Avoid possible race in ConditionVariable where new processes begin waiting while #broadcast is running.

This commit is contained in:
Patrick Mahoney committed 2011-12-20 22:12:25 -06:00
1 parent cc663a8d7f
commit edc927709a
1 file changed
+3 -7
+3 -7
View File
@@ -10,7 +10,9 @@ module ProcessShared
end
def broadcast
waiting.times { @sem.post }
@internal.synchronize do
@waiting.read_int.times { @sem.post }
end
end
def signal
@@ -38,12 +40,6 @@ module ProcessShared
private
def waiting
@internal.synchronize do
@waiting.read_int
end
end
def inc_waiting(val = 1)
@internal.synchronize do
@waiting.write_int(@waiting.read_int + val)