BUG/MEDIUM: threads: fix thread_release() at the end of the rendez-vous point

There is a bug in this function used to release other threads. It leaves
the current thread marked as harmless. If after this another thread does
a thread_isolate(), but before the first one reaches poll(), the second
thread will believe it's alone while it's not.

This must be backported to 1.8 since the rendez-vous point was merged
into 1.8.14.
This commit is contained in:
Willy Tarreau 2018-10-16 16:11:56 +02:00
parent e18db9e984
commit a9c0252b2e

View File

@ -88,12 +88,8 @@ void thread_isolate()
*/
void thread_release()
{
while (1) {
HA_ATOMIC_AND(&threads_want_rdv_mask, ~tid_bit);
if (!(threads_want_rdv_mask & all_threads_mask))
break;
thread_harmless_till_end();
}
HA_ATOMIC_AND(&threads_want_rdv_mask, ~tid_bit);
thread_harmless_end();
}
__attribute__((constructor))