diff options
author | mathieui <mathieui@mathieui.net> | 2014-04-22 19:57:25 +0200 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2014-04-22 19:57:25 +0200 |
commit | b14aceaa4f3806dd797cd3e31c1973387409784a (patch) | |
tree | 1d459aeb44b111768d2ddc2a343b0c7398396331 | |
parent | 266ab8e10d93d52af7210a7c273b616944d4093c (diff) | |
download | poezio-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.py | 28 |
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) |