summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2014-04-22 19:57:25 +0200
committermathieui <mathieui@mathieui.net>2014-04-22 19:57:25 +0200
commitb14aceaa4f3806dd797cd3e31c1973387409784a (patch)
tree1d459aeb44b111768d2ddc2a343b0c7398396331
parent266ab8e10d93d52af7210a7c273b616944d4093c (diff)
downloadpoezio-b14aceaa4f3806dd797cd3e31c1973387409784a.tar.gz
poezio-b14aceaa4f3806dd797cd3e31c1973387409784a.tar.bz2
poezio-b14aceaa4f3806dd797cd3e31c1973387409784a.tar.xz
poezio-b14aceaa4f3806dd797cd3e31c1973387409784a.zip
Close the file descriptor of the fifo on closing
(also, it indeed needs to be a thread because opening a fifo for reading is a blocking operation)
-rw-r--r--src/fifo.py28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/fifo.py b/src/fifo.py
index 983b21e4..863ef228 100644
--- a/src/fifo.py
+++ b/src/fifo.py
@@ -1,12 +1,8 @@
-# Copyright 2011 Florent Le Coz <louiz@louiz.org>
-#
-# This file is part of Poezio.
-#
-# Poezio is free software: you can redistribute it and/or modify
-# it under the terms of the zlib license. See the COPYING file.
-
"""
Defines the Fifo class
+
+This fifo allows simple communication between a remote poezio
+and a local computer, with ssh+cat.
"""
import logging
@@ -20,12 +16,11 @@ class OpenTrick(threading.Thread):
A threaded trick to make the open for writing succeed.
A fifo cannot be opened for writing if it has not been
yet opened by the other hand for reading.
- So, we just open the fifo for reading and close it
- immediately afterwards.
- Once that is done, we can freely keep the fifo open for
- writing and write things in it. The writing can fail if
- there’s still nothing reading that fifo, but we just yell
- an error in that case.
+ So, we just open the fifo for reading and we do not close
+ it afterwards, because if the other reader disconnects,
+ we will receive a SIGPIPE. And we do not want that.
+
+ (we never read anything from it, obviously)
"""
def __init__(self, path):
threading.Thread.__init__(self)
@@ -62,10 +57,15 @@ class Fifo(object):
self.fd.flush()
def readline(self):
+ "Read a line from the fifo"
return self.fd.readline()
def __del__(self):
+ "Close opened fds"
try:
self.fd.close()
+ if self.trick:
+ self.trick.fd.close()
except:
- pass
+ log.error('Unable to close descriptors for the fifo',
+ exc_info=True)