summaryrefslogtreecommitdiff
path: root/Tools/audiopy
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>1999-08-18 20:17:42 +0000
committerBarry Warsaw <barry@python.org>1999-08-18 20:17:42 +0000
commitea49f74235fae768778fc72e974a7e17eebfadaf (patch)
tree8c9841326aba66ab07ba5861f3143976858b3236 /Tools/audiopy
parenta4bd3f5982b9d70043c5b66a517bf98bb6446d06 (diff)
downloadcpython-ea49f74235fae768778fc72e974a7e17eebfadaf.tar.gz
__update(): Jeremy Hylton reports occurances of sunaudiodev.error
(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.
Diffstat (limited to 'Tools/audiopy')
-rwxr-xr-xTools/audiopy/audiopy19
1 files changed, 14 insertions, 5 deletions
diff --git a/Tools/audiopy/audiopy b/Tools/audiopy/audiopy
index 1d6a6410d6..19d69fdbda 100755
--- a/Tools/audiopy/audiopy
+++ b/Tools/audiopy/audiopy
@@ -54,7 +54,7 @@ from SUNAUDIODEV import *
# Milliseconds between interrupt checks
KEEPALIVE_TIMER = 500
-__version__ = '1.0'
+__version__ = '1.1'
@@ -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