You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
self.wait() without await returns a Future, so the notified() object is not
created until we await on the returned future. That means notify_waiters()
can be called before notified() is. This leads to notified() waiting
forever because notify_waiters is called only once, when the last waiter is
dropped.
notify_waiters() and notified() form a happens-before relationship.
There are two possible scenarios:
1. If notified() comes before notify_waiters() this means we can
safely await on notified().
2. If notified() comes after notify_waiters() this means that what happened
before it is visible in the notified() thread. Waiting on notified() at
this point will block but we can check for waiters count, which is
guaranteed to be 0 because it was set before notify_waiters() call.
Let's move notified() call before checking that the number of waiters
is 0.
Signed-off-by: Alexandru Matei <alexandru.matei@uipath.com>
0 commit comments