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.
This commit is contained in:
parent
910b2bc829
commit
8318885487
@ -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 <ctx>.
|
||||
* Returns < 0 on error.
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user