mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-14 07:24:32 +00:00
MEDIUM: stream-int: use si_task() to retrieve the task from the stream int
We go back to the session to get the owner. Here again it's very easy and is just a matter of relative offsets. Since the owner always exists and always points to the session's task, we can remove some unneeded tests.
This commit is contained in:
parent
aefd79004c
commit
07373b8660
@ -73,6 +73,15 @@ static inline struct session *si_sess(struct stream_interface *si)
|
|||||||
return LIST_ELEM(si, struct session *, si[0]);
|
return LIST_ELEM(si, struct session *, si[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* returns the task associated to this stream interface */
|
||||||
|
static inline struct task *si_task(struct stream_interface *si)
|
||||||
|
{
|
||||||
|
if (si->flags & SI_FL_ISBACK)
|
||||||
|
return LIST_ELEM(si, struct session *, si[1])->task;
|
||||||
|
else
|
||||||
|
return LIST_ELEM(si, struct session *, si[0])->task;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initializes all required fields for a new appctx. Note that it does the
|
/* Initializes all required fields for a new appctx. Note that it does the
|
||||||
* minimum acceptable initialization for an appctx. This means only the
|
* minimum acceptable initialization for an appctx. This means only the
|
||||||
* 3 integer states st0, st1, st2 are zeroed.
|
* 3 integer states st0, st1, st2 are zeroed.
|
||||||
|
@ -1750,10 +1750,8 @@ struct task *process_session(struct task *t)
|
|||||||
rpf_last = s->res.flags & ~CF_MASK_ANALYSER;
|
rpf_last = s->res.flags & ~CF_MASK_ANALYSER;
|
||||||
|
|
||||||
/* we don't want the stream interface functions to recursively wake us up */
|
/* we don't want the stream interface functions to recursively wake us up */
|
||||||
if (s->req.prod->owner == t)
|
s->req.prod->flags |= SI_FL_DONT_WAKE;
|
||||||
s->req.prod->flags |= SI_FL_DONT_WAKE;
|
s->req.cons->flags |= SI_FL_DONT_WAKE;
|
||||||
if (s->req.cons->owner == t)
|
|
||||||
s->req.cons->flags |= SI_FL_DONT_WAKE;
|
|
||||||
|
|
||||||
/* 1a: Check for low level timeouts if needed. We just set a flag on
|
/* 1a: Check for low level timeouts if needed. We just set a flag on
|
||||||
* stream interfaces when their timeouts have expired.
|
* stream interfaces when their timeouts have expired.
|
||||||
|
@ -212,8 +212,8 @@ static void stream_int_update_embedded(struct stream_interface *si)
|
|||||||
((si_oc(si)->flags & CF_WAKE_WRITE) &&
|
((si_oc(si)->flags & CF_WAKE_WRITE) &&
|
||||||
(si_oc(si)->prod->state != SI_ST_EST ||
|
(si_oc(si)->prod->state != SI_ST_EST ||
|
||||||
(channel_is_empty(si_oc(si)) && !si_oc(si)->to_forward)))))) {
|
(channel_is_empty(si_oc(si)) && !si_oc(si)->to_forward)))))) {
|
||||||
if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
|
if (!(si->flags & SI_FL_DONT_WAKE))
|
||||||
task_wakeup(si->owner, TASK_WOKEN_IO);
|
task_wakeup(si_task(si), TASK_WOKEN_IO);
|
||||||
}
|
}
|
||||||
if (si_ic(si)->flags & CF_READ_ACTIVITY)
|
if (si_ic(si)->flags & CF_READ_ACTIVITY)
|
||||||
si_ic(si)->flags &= ~CF_READ_DONTWAIT;
|
si_ic(si)->flags &= ~CF_READ_DONTWAIT;
|
||||||
@ -250,8 +250,8 @@ static void stream_int_shutr(struct stream_interface *si)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* note that if the task exists, it must unregister itself once it runs */
|
/* note that if the task exists, it must unregister itself once it runs */
|
||||||
if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
|
if (!(si->flags & SI_FL_DONT_WAKE))
|
||||||
task_wakeup(si->owner, TASK_WOKEN_IO);
|
task_wakeup(si_task(si), TASK_WOKEN_IO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -299,8 +299,8 @@ static void stream_int_shutw(struct stream_interface *si)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* note that if the task exists, it must unregister itself once it runs */
|
/* note that if the task exists, it must unregister itself once it runs */
|
||||||
if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
|
if (!(si->flags & SI_FL_DONT_WAKE))
|
||||||
task_wakeup(si->owner, TASK_WOKEN_IO);
|
task_wakeup(si_task(si), TASK_WOKEN_IO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* default chk_rcv function for scheduled tasks */
|
/* default chk_rcv function for scheduled tasks */
|
||||||
@ -322,8 +322,8 @@ static void stream_int_chk_rcv(struct stream_interface *si)
|
|||||||
else {
|
else {
|
||||||
/* (re)start reading */
|
/* (re)start reading */
|
||||||
si->flags &= ~SI_FL_WAIT_ROOM;
|
si->flags &= ~SI_FL_WAIT_ROOM;
|
||||||
if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
|
if (!(si->flags & SI_FL_DONT_WAKE))
|
||||||
task_wakeup(si->owner, TASK_WOKEN_IO);
|
task_wakeup(si_task(si), TASK_WOKEN_IO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,8 +350,8 @@ static void stream_int_chk_snd(struct stream_interface *si)
|
|||||||
if (!tick_isset(ob->wex))
|
if (!tick_isset(ob->wex))
|
||||||
ob->wex = tick_add_ifset(now_ms, ob->wto);
|
ob->wex = tick_add_ifset(now_ms, ob->wto);
|
||||||
|
|
||||||
if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
|
if (!(si->flags & SI_FL_DONT_WAKE))
|
||||||
task_wakeup(si->owner, TASK_WOKEN_IO);
|
task_wakeup(si_task(si), TASK_WOKEN_IO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Register an applet to handle a stream_interface as part of the
|
/* Register an applet to handle a stream_interface as part of the
|
||||||
@ -366,7 +366,7 @@ struct appctx *stream_int_register_handler(struct stream_interface *si, struct s
|
|||||||
{
|
{
|
||||||
struct appctx *appctx;
|
struct appctx *appctx;
|
||||||
|
|
||||||
DPRINTF(stderr, "registering handler %p for si %p (was %p)\n", app, si, si->owner);
|
DPRINTF(stderr, "registering handler %p for si %p (was %p)\n", app, si, si_task(si));
|
||||||
|
|
||||||
appctx = si_alloc_appctx(si);
|
appctx = si_alloc_appctx(si);
|
||||||
if (!appctx)
|
if (!appctx)
|
||||||
@ -639,7 +639,7 @@ static int si_conn_wake_cb(struct connection *conn)
|
|||||||
((si_oc(si)->flags & CF_WAKE_WRITE) &&
|
((si_oc(si)->flags & CF_WAKE_WRITE) &&
|
||||||
(si_oc(si)->prod->state != SI_ST_EST ||
|
(si_oc(si)->prod->state != SI_ST_EST ||
|
||||||
(channel_is_empty(si_oc(si)) && !si_oc(si)->to_forward)))))) {
|
(channel_is_empty(si_oc(si)) && !si_oc(si)->to_forward)))))) {
|
||||||
task_wakeup(si->owner, TASK_WOKEN_IO);
|
task_wakeup(si_task(si), TASK_WOKEN_IO);
|
||||||
}
|
}
|
||||||
if (si_ic(si)->flags & CF_READ_ACTIVITY)
|
if (si_ic(si)->flags & CF_READ_ACTIVITY)
|
||||||
si_ic(si)->flags &= ~CF_READ_DONTWAIT;
|
si_ic(si)->flags &= ~CF_READ_DONTWAIT;
|
||||||
@ -1058,8 +1058,8 @@ static void stream_int_chk_snd_conn(struct stream_interface *si)
|
|||||||
((channel_is_empty(si_oc(si)) && !ob->to_forward) ||
|
((channel_is_empty(si_oc(si)) && !ob->to_forward) ||
|
||||||
si->state != SI_ST_EST)))) {
|
si->state != SI_ST_EST)))) {
|
||||||
out_wakeup:
|
out_wakeup:
|
||||||
if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
|
if (!(si->flags & SI_FL_DONT_WAKE))
|
||||||
task_wakeup(si->owner, TASK_WOKEN_IO);
|
task_wakeup(si_task(si), TASK_WOKEN_IO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* commit possible polling changes */
|
/* commit possible polling changes */
|
||||||
|
Loading…
Reference in New Issue
Block a user