rx-makecall-race-fix-20050518
authorJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 18 May 2005 23:01:10 +0000 (23:01 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 18 May 2005 23:01:10 +0000 (23:01 +0000)
commit10f6e5d6e2960469eb4d0e75f62fa9b33629b132
tree57b963f40391c920b1eeb5a60e24063151ed84b7
parent70a7e29bc0ad770d56a11e45d0bea84727eed755
rx-makecall-race-fix-20050518

On at least one system it was noticed that threads waiting in rx_NewCall
would starve forever (aka deadlock).   This was the result of one out of
two problems related to a race condition on the RX_CONN_MAKECALL_WAITING
bit flag.  This flag was set once in rx_NewCall and cleared in rx_EndCall.
However, it was possible for the flag to be cleared even though there
were additional flags waiting in rx_NewCall.  This was due to a failure
to check the value of makeCallWaiters before clearing the flag and also
due to a failure to properly lock the access to the makeCallWaiters field.

The second problem was an ability to destroy a connection on which threads
are waiting within rx_NewCall.
src/rx/rx.c