git.ucc.asn.au
/
progcomp2013.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Got cgi script to work
[progcomp2013.git]
/
qchess
/
src
/
player.py
diff --git
a/qchess/src/player.py
b/qchess/src/player.py
index
1f40066
..
346674b
100644
(file)
--- a/
qchess/src/player.py
+++ b/
qchess/src/player.py
@@
-38,10
+38,15
@@
def open_fifo(name, mode, timeout=None):
def __init__(self):
threading.Thread.__init__(self)
self.result = None
def __init__(self):
threading.Thread.__init__(self)
self.result = None
+ self.exception = None
def run(self):
def run(self):
- self.result = open(name, mode)
+ try:
+ self.result = open(name, mode)
+ except Exception, e:
+ self.exception = e
+ self.result = None
w = Worker()
w = Worker()
@@
-51,16
+56,22
@@
def open_fifo(name, mode, timeout=None):
while time.time() - start < timeout:
if w.is_alive() == False:
w.join()
while time.time() - start < timeout:
if w.is_alive() == False:
w.join()
+ if w.exception != None:
+ raise w.exception
return w.result
time.sleep(0.1)
if w.is_alive():
#sys.stderr.write("FIFO_TIMEOUT!\n")
return w.result
time.sleep(0.1)
if w.is_alive():
#sys.stderr.write("FIFO_TIMEOUT!\n")
- if mode == "r":
- f = open(name, "w")
- else:
- f = open(name, "r")
+ # Recursive to deal with possible race condition
+ try:
+ if mode == "r":
+ f = open_fifo(name, "w", 1)
+ else:
+ f = open_fifo(name, "r", 1)
+ except:
+ pass
#sys.stderr.write("Opened other end!\n")
while w.is_alive():
#sys.stderr.write("Opened other end!\n")
while w.is_alive():
@@
-72,6
+83,8
@@
def open_fifo(name, mode, timeout=None):
raise Exception("FIFO_TIMEOUT")
else:
w.join()
raise Exception("FIFO_TIMEOUT")
else:
w.join()
+ if w.exception != None:
+ raise w.exception
return w.result
return w.result
UCC
git Repository :: git.ucc.asn.au