]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
__update(): Jeremy Hylton reports occurances of sunaudiodev.error
authorBarry Warsaw <barry@python.org>
Wed, 18 Aug 1999 20:17:42 +0000 (20:17 +0000)
committerBarry Warsaw <barry@python.org>
Wed, 18 Aug 1999 20:17:42 +0000 (20:17 +0000)
(interrupted system call) when getting the device information.  I've
never seen it, but this patch should take care of the problem.

If we get that exception and we're polling, just return since we'll
wake up again soon and get the right information.  If we're not
polling, try 4 times and then give up.

Tools/audiopy/audiopy

index 1d6a6410d6dc05ddbe03aa05ada5c1e806a5cd69..19d69fdbda55eae0977ac1a193b6e41bdfae71d1 100755 (executable)
@@ -54,7 +54,7 @@ from SUNAUDIODEV import *
 # Milliseconds between interrupt checks
 KEEPALIVE_TIMER = 500
 
-__version__ = '1.0'
+__version__ = '1.1'
 
 
 \f
@@ -278,10 +278,19 @@ Email:   bwarsaw@python.org''' % __version__)
             self.__update()
 
     def __update(self, num=None, frame=None):
-        # We have to poll because the device could have changed state and the
-        # underlying module does not support the SIGPOLL notification
-        # interface.
-        info = self.__devctl.getinfo()
+        # It's possible (although I have never seen it) to get an interrupted
+        # system call during the getinfo() call.  If so, and we're polling,
+        # don't sweat it because we'll come around again later.  Otherwise,
+        # we'll give it a couple of tries and then give up until next time.
+        tries = 0
+        while 1:
+            try:
+                info = self.__devctl.getinfo()
+                break
+            except sunaudiodev.error:
+                if self.__needtopoll or tries > 3:
+                    return
+                tries = tries + 1
         # input
         self.__inputvar.set(info.i_port)
         # output