Ensure the lock is released if there is an exception on socket I/O.
authorDamien Stuart <dstuart@dstuart.org>
Sun, 31 Dec 2017 21:00:57 +0000 (16:00 -0500)
committerDamien Stuart <dstuart@dstuart.org>
Sun, 31 Dec 2017 21:00:57 +0000 (16:00 -0500)
pigpio.py

index df01c0d1c72c2add22d1b64e1106aa89b667b78c..5d22c556d866b24229c990c91fa98a966a33bff0 100644 (file)
--- a/pigpio.py
+++ b/pigpio.py
@@ -980,8 +980,12 @@ def _pigpio_command(sl, cmd, p1, p2, rl=True):
     p2:= command parameter 2 (if applicable).
    """
    sl.l.acquire()
-   sl.s.send(struct.pack('IIII', cmd, p1, p2, 0))
-   dummy, res = struct.unpack('12sI', sl.s.recv(_SOCK_CMD_LEN))
+   try:
+      sl.s.send(struct.pack('IIII', cmd, p1, p2, 0))
+      dummy, res = struct.unpack('12sI', sl.s.recv(_SOCK_CMD_LEN))
+   except Exception, e:
+      sl.l.release()
+      raise(e)
    if rl: sl.l.release()
    return res
 
@@ -1003,8 +1007,12 @@ def _pigpio_command_ext(sl, cmd, p1, p2, p3, extents, rl=True):
       else:
          ext.extend(x)
    sl.l.acquire()
-   sl.s.sendall(ext)
-   dummy, res = struct.unpack('12sI', sl.s.recv(_SOCK_CMD_LEN))
+   try:
+      sl.s.sendall(ext)
+      dummy, res = struct.unpack('12sI', sl.s.recv(_SOCK_CMD_LEN))
+   except Exception, e:
+      sl.l.release()
+      raise(e)
    if rl: sl.l.release()
    return res