MINOR: threads: avoid clearing harmless twice in thread_release()
thread_release() is to be called after thread_isolate(), i.e. when the
thread already has its harmless bit cleared. No need to clear it twice,
thus avoid calling thread_harmless_end() and directly check the rdv
bits then loop on them.
diff --git a/src/hathreads.c b/src/hathreads.c
index 8359dd5..006a089 100644
--- a/src/hathreads.c
+++ b/src/hathreads.c
@@ -94,7 +94,12 @@
void thread_release()
{
_HA_ATOMIC_AND(&threads_want_rdv_mask, ~tid_bit);
- thread_harmless_end();
+ while (threads_want_rdv_mask & all_threads_mask) {
+ _HA_ATOMIC_OR(&threads_harmless_mask, tid_bit);
+ while (threads_want_rdv_mask & all_threads_mask)
+ ha_thread_relax();
+ HA_ATOMIC_AND(&threads_harmless_mask, ~tid_bit);
+ }
}
/* send signal <sig> to thread <thr> */