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
* minimum acceptable initialization for an appctx. This means only the
* 3 integer states st0, st1, st2 are zeroed.
((si_oc(si)->flags & CF_WAKE_WRITE) &&
(si_oc(si)->prod->state != SI_ST_EST ||
(channel_is_empty(si_oc(si)) && !si_oc(si)->to_forward)))))) {
- if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
- task_wakeup(si->owner, TASK_WOKEN_IO);
+ if (!(si->flags & SI_FL_DONT_WAKE))
+ task_wakeup(si_task(si), TASK_WOKEN_IO);
}
if (si_ic(si)->flags & CF_READ_ACTIVITY)
si_ic(si)->flags &= ~CF_READ_DONTWAIT;
}
/* note that if the task exists, it must unregister itself once it runs */
- if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
- task_wakeup(si->owner, TASK_WOKEN_IO);
+ if (!(si->flags & SI_FL_DONT_WAKE))
+ task_wakeup(si_task(si), TASK_WOKEN_IO);
}
/*
}
/* note that if the task exists, it must unregister itself once it runs */
- if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
- task_wakeup(si->owner, TASK_WOKEN_IO);
+ if (!(si->flags & SI_FL_DONT_WAKE))
+ task_wakeup(si_task(si), TASK_WOKEN_IO);
}
/* default chk_rcv function for scheduled tasks */
else {
/* (re)start reading */
si->flags &= ~SI_FL_WAIT_ROOM;
- if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
- task_wakeup(si->owner, TASK_WOKEN_IO);
+ if (!(si->flags & SI_FL_DONT_WAKE))
+ task_wakeup(si_task(si), TASK_WOKEN_IO);
}
}
if (!tick_isset(ob->wex))
ob->wex = tick_add_ifset(now_ms, ob->wto);
- if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
- task_wakeup(si->owner, TASK_WOKEN_IO);
+ if (!(si->flags & SI_FL_DONT_WAKE))
+ task_wakeup(si_task(si), TASK_WOKEN_IO);
}
/* Register an applet to handle a stream_interface as part of the
{
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);
if (!appctx)
((si_oc(si)->flags & CF_WAKE_WRITE) &&
(si_oc(si)->prod->state != SI_ST_EST ||
(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)
si_ic(si)->flags &= ~CF_READ_DONTWAIT;
((channel_is_empty(si_oc(si)) && !ob->to_forward) ||
si->state != SI_ST_EST)))) {
out_wakeup:
- if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
- task_wakeup(si->owner, TASK_WOKEN_IO);
+ if (!(si->flags & SI_FL_DONT_WAKE))
+ task_wakeup(si_task(si), TASK_WOKEN_IO);
}
/* commit possible polling changes */