En Fri, 17 Apr 2009 22:20:11 -0300, <stephane.bisin...@gmail.com> escribió:

I have a problem with Condition.wait(), it doesn't return after the
given timeout. The thing is that if I try to create a simple program,
it works as expected, but in the actual code, the timeout is not
respected (albeit the notify()s work as expected). [...]

Has anyone the slightest idea on what I may be doing wrong? Or am I
just lucky enough to have stumbled across a bug?

Looks like a real bug :(

Maybe pollution from
another module in other parts of the code? (Like gobject...)

Anyway just for completeness here is a sample program that works for
me:

from threading import Thread
from threading import Condition

def some_func():
    while True:
        cond.acquire()
        while True:
            cond.wait(0.5)
            print "Hello, world!"

cond = Condition()
thread = Thread(target=some_func)
thread.start()

If another thread has acquired the lock, cond.wait() doesn't return. Add these lines at the end of your test and see:

sleep(2)
print "Main thread - cond.acquire()"
cond.acquire()
sleep(2)
print "Main thread - cond.release()"
cond.release()
sleep(2)
sys.exit()

The timeout is detected, but the wait method doesn't return, it's stuck at the last line (trying to restore a saved RLock state).
I don't understand the logic behind that.
Please file a bug report at http://bugs.python.org/

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to