]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: task/thread: factor out a wake-up condition
authorWilly Tarreau <w@1wt.eu>
Wed, 17 Apr 2019 18:52:51 +0000 (20:52 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 17 Apr 2019 20:15:58 +0000 (22:15 +0200)
The wakeup condition in task_wakeup() is redundant as it is already
validated by the CAS. Better move the __task_wakeup() call there, it
also has the merit of being easier to audit this way. This also reduces
the code size by around 1.8 kB :

  $ size haproxy-?
     text    data     bss     dec     hex filename
  2153806  100208 1307676 3561690  3658da haproxy-1
  2152094  100208 1307676 3559978  36522a haproxy-2

include/proto/task.h

index 361ea85380ad9fa356b10794116c64ea3b20e557..ab1245f8259ec91f9037c1b1d8c23458971d8633 100644 (file)
@@ -153,11 +153,11 @@ static inline void task_wakeup(struct task *t, unsigned int f)
 
        state = _HA_ATOMIC_OR(&t->state, f);
        while (!(state & (TASK_RUNNING | TASK_QUEUED))) {
-               if (_HA_ATOMIC_CAS(&t->state, &state, state | TASK_QUEUED))
+               if (_HA_ATOMIC_CAS(&t->state, &state, state | TASK_QUEUED)) {
+                       __task_wakeup(t, root);
                        break;
+               }
        }
-       if (!(state & (TASK_QUEUED | TASK_RUNNING)))
-               __task_wakeup(t, root);
 }
 
 /* change the thread affinity of a task to <thread_mask> */