]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: h1: Use BUG_ON() to enforce rules in subscribe/unsubscribe.
authorOlivier Houchard <ohouchard@haproxy.com>
Tue, 14 May 2019 16:02:23 +0000 (18:02 +0200)
committerOlivier Houchard <cognet@ci0.org>
Tue, 14 May 2019 16:18:25 +0000 (18:18 +0200)
It is not legal to subscribe if we're already subscribed, or to unsubscribe
if we did not subscribe, so instead of trying to handle those cases, just
assert that it's ok using the new BUG_ON() macro.

src/mux_h1.c

index e3f104f49d172c3ed2b31ff04499bf204f6b9348..dfe4d3f661078907609018e68e1466ea36101ca4 100644 (file)
@@ -2178,17 +2178,15 @@ static int h1_unsubscribe(struct conn_stream *cs, int event_type, void *param)
 
        if (event_type & SUB_RETRY_RECV) {
                sw = param;
-               if (h1s->recv_wait == sw) {
-                       sw->events &= ~SUB_RETRY_RECV;
-                       h1s->recv_wait = NULL;
-               }
+               BUG_ON(h1s->recv_wait != sw);
+               sw->events &= ~SUB_RETRY_RECV;
+               h1s->recv_wait = NULL;
        }
        if (event_type & SUB_RETRY_SEND) {
                sw = param;
-               if (h1s->send_wait == sw) {
-                       sw->events &= ~SUB_RETRY_SEND;
-                       h1s->send_wait = NULL;
-               }
+               BUG_ON(h1s->send_wait != sw);
+               sw->events &= ~SUB_RETRY_SEND;
+               h1s->send_wait = NULL;
        }
        return 0;
 }
@@ -2205,17 +2203,15 @@ static int h1_subscribe(struct conn_stream *cs, int event_type, void *param)
        switch (event_type) {
                case SUB_RETRY_RECV:
                        sw = param;
-                       if (!(sw->events & SUB_RETRY_RECV)) {
-                               sw->events |= SUB_RETRY_RECV;
-                               h1s->recv_wait = sw;
-                       }
+                       BUG_ON(h1s->recv_wait != NULL || (sw->events & SUB_RETRY_RECV));
+                       sw->events |= SUB_RETRY_RECV;
+                       h1s->recv_wait = sw;
                        return 0;
                case SUB_RETRY_SEND:
                        sw = param;
-                       if (!(sw->events & SUB_RETRY_SEND)) {
-                               sw->events |= SUB_RETRY_SEND;
-                               h1s->send_wait = sw;
-                       }
+                       BUG_ON(h1s->send_wait != NULL || (sw->events & SUB_RETRY_SEND));
+                       sw->events |= SUB_RETRY_SEND;
+                       h1s->send_wait = sw;
                        return 0;
                default:
                        break;