From: Willy Tarreau Date: Wed, 18 Jul 2018 06:18:20 +0000 (+0200) Subject: MINOR: connection: simplify subscription by adding a registration function X-Git-Tag: v1.9-dev1~66 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8318885487792bdfccf753d6de2554c006739e10;p=thirdparty%2Fhaproxy.git MINOR: connection: simplify subscription by adding a registration function This new function wl_set_waitcb() prepopulates a wait_list with a tasklet and a context and returns it so that it can be passed to ->subscribe() to be added to a connection or conn_stream's wait_list. The caller doesn't need to know all the insiders details anymore this way. --- diff --git a/include/proto/connection.h b/include/proto/connection.h index a2580f10b3..8344c951de 100644 --- a/include/proto/connection.h +++ b/include/proto/connection.h @@ -773,6 +773,15 @@ static inline void cs_attach(struct conn_stream *cs, void *data, const struct da cs->data = data; } +static inline struct wait_list *wl_set_waitcb(struct wait_list *wl, struct task *(*cb)(struct task *, void *, unsigned short), void *ctx) +{ + if (!wl->task->process) { + wl->task->process = cb; + wl->task->context = ctx; + } + return wl; +} + /* Installs the connection's mux layer for upper context . * Returns < 0 on error. */ diff --git a/src/checks.c b/src/checks.c index 624a065940..af6ddd453a 100644 --- a/src/checks.c +++ b/src/checks.c @@ -779,11 +779,7 @@ static void __event_srv_chk_w(struct conn_stream *cs) goto out_wakeup; } if (b_data(&check->bo)) { - if (!cs->wait_list.task->process) { - cs->wait_list.task->process = event_srv_chk_w; - cs->wait_list.task->context = cs; - } - conn->mux->subscribe(cs, SUB_CAN_SEND, &cs->wait_list); + conn->mux->subscribe(cs, SUB_CAN_SEND, wl_set_waitcb(&cs->wait_list, event_srv_chk_w, cs)); goto out; } } diff --git a/src/stream_interface.c b/src/stream_interface.c index 6fb7b535fc..f1b52c176b 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -732,13 +732,9 @@ static struct task * si_cs_send(struct task *t, void *ctx, unsigned short state) } } /* We couldn't send all of our data, let the mux know we'd like to send more */ - if (co_data(oc)) { - if (!cs->wait_list.task->process) { - cs->wait_list.task->process = si_cs_send; - cs->wait_list.task->context = ctx; - } - conn->mux->subscribe(cs, SUB_CAN_SEND, &cs->wait_list); - } + if (co_data(oc)) + conn->mux->subscribe(cs, SUB_CAN_SEND, wl_set_waitcb(&cs->wait_list, si_cs_send, ctx)); + wake_others: /* Maybe somebody was waiting for this conn_stream, wake them */ if (did_send) {