MINOR: thread: make wake_thread() take care of the sleeping threads mask

Almost every call place of wake_thread() checks for sleeping threads and
clears the sleeping mask itself, while the function is solely used for
there. Let's move the check and the clearing of the bit inside the function
itself. Note that updt_fd_polling() still performs the check because its
rules are a bit different.
diff --git a/include/haproxy/fd.h b/include/haproxy/fd.h
index cf2d02b..010fdac 100644
--- a/include/haproxy/fd.h
+++ b/include/haproxy/fd.h
@@ -369,11 +369,13 @@
 	return evts[fd / (8*sizeof(*evts))] & (1U << (fd & (8*sizeof(*evts) - 1)));
 }
 
-static inline void wake_thread(int tid)
+static inline void wake_thread(int thr)
 {
-	char c = 'c';
-
-	DISGUISE(write(poller_wr_pipe[tid], &c, 1));
+	if (sleeping_thread_mask & (1UL << thr)) {
+		char c = 'c';
+		_HA_ATOMIC_AND(&sleeping_thread_mask, ~(1UL << thr));
+		DISGUISE(write(poller_wr_pipe[thr], &c, 1));
+	}
 }
 
 
diff --git a/src/fd.c b/src/fd.c
index 079df15..96d77bd 100644
--- a/src/fd.c
+++ b/src/fd.c
@@ -454,7 +454,6 @@
 			/* we need to wake up one thread to handle it immediately */
 			int thr = my_ffsl(fdtab[fd].thread_mask & ~tid_bit & all_threads_mask) - 1;
 
-			_HA_ATOMIC_AND(&sleeping_thread_mask, ~(1UL << thr));
 			wake_thread(thr);
 		}
 	}
diff --git a/src/task.c b/src/task.c
index fc698d5..76a7432 100644
--- a/src/task.c
+++ b/src/task.c
@@ -86,10 +86,7 @@
 			               list_to_mt_list(&((struct tasklet *)t)->list));
 			_HA_ATOMIC_INC(&ha_thread_ctx[thr].rq_total);
 			_HA_ATOMIC_INC(&ha_thread_ctx[thr].tasks_in_list);
-			if (sleeping_thread_mask & (1UL << thr)) {
-				_HA_ATOMIC_AND(&sleeping_thread_mask, ~(1UL << thr));
-				wake_thread(thr);
-			}
+			wake_thread(thr);
 			return;
 		}
 	}
@@ -124,10 +121,7 @@
 			MT_LIST_APPEND(&ha_thread_ctx[thr].shared_tasklet_list,
 			               list_to_mt_list(&t->list));
 			_HA_ATOMIC_INC(&ha_thread_ctx[thr].rq_total);
-			if (sleeping_thread_mask & (1UL << thr)) {
-				_HA_ATOMIC_AND(&sleeping_thread_mask, ~(1UL << thr));
-				wake_thread(thr);
-			}
+			wake_thread(thr);
 			return;
 		}
 	}
@@ -168,10 +162,7 @@
 		/* this tasklet runs on a specific thread. */
 		MT_LIST_APPEND(&ha_thread_ctx[thr].shared_tasklet_list, list_to_mt_list(&tl->list));
 		_HA_ATOMIC_INC(&ha_thread_ctx[thr].rq_total);
-		if (sleeping_thread_mask & (1UL << thr)) {
-			_HA_ATOMIC_AND(&sleeping_thread_mask, ~(1UL << thr));
-			wake_thread(thr);
-		}
+		wake_thread(thr);
 	}
 }
 
@@ -262,12 +253,7 @@
 		/* If all threads that are supposed to handle this task are sleeping,
 		 * wake one.
 		 */
-		if (sleeping_thread_mask & (1UL << thr)) {
-			unsigned long m = 1UL << thr;
-
-			_HA_ATOMIC_AND(&sleeping_thread_mask, ~m);
-			wake_thread(thr);
-		}
+		wake_thread(thr);
 	}
 #endif
 	return;