From 9c502dd71fe3833e3e91d451d048db80f88935a4 Mon Sep 17 00:00:00 2001 From: Artur Gaspar Date: Tue, 8 Mar 2016 10:33:03 -0300 Subject: [PATCH 1/2] Undo write if it fails. Fixes #14. --- queuelib/queue.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/queuelib/queue.py b/queuelib/queue.py index 385fe6a..dd184aa 100644 --- a/queuelib/queue.py +++ b/queuelib/queue.py @@ -149,9 +149,16 @@ def __init__(self, path): def push(self, string): if not isinstance(string, bytes): raise TypeError('Unsupported type: {}'.format(type(string).__name__)) - self.f.write(string) - ssize = struct.pack(self.SIZE_FORMAT, len(string)) - self.f.write(ssize) + pos = self.f.tell() + try: + self.f.write(string) + ssize = struct.pack(self.SIZE_FORMAT, len(string)) + self.f.write(ssize) + self.f.flush() + except: + self.f.seek(pos) + self.f.truncate() + raise self.size += 1 def pop(self): From 7c90be84d1f016413e7267238ec8a86ae9aefa01 Mon Sep 17 00:00:00 2001 From: Artur Gaspar Date: Tue, 8 Mar 2016 11:39:25 -0300 Subject: [PATCH 2/2] Catch only IOError when writing in LifoDiskQueue. --- queuelib/queue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/queuelib/queue.py b/queuelib/queue.py index dd184aa..9f2be70 100644 --- a/queuelib/queue.py +++ b/queuelib/queue.py @@ -155,7 +155,7 @@ def push(self, string): ssize = struct.pack(self.SIZE_FORMAT, len(string)) self.f.write(ssize) self.f.flush() - except: + except IOError: self.f.seek(pos) self.f.truncate() raise