mirror of
https://github.com/haproxy/haproxy.git
synced 2026-06-08 00:02:18 -04:00
A stream can be awakened for different reasons. During its processing, it can be early stopped if no buffer is available. In this situation, the reason why the stream was awakened is lost, because we rely on the task state, which is reset after each processing loop. In many cases, that's not a big deal. But it can be useful to accumulate the task states if the stream processing is interrupted, especially if some filters need to be called. To be clearer, here is an simple example: 1) A stream is awakened with the reason TASK_WOKEN_MSG. 2) Because no buffer is available, the processing is interrupted, the stream is back to sleep. And the task state is reset. 3) Some buffers become available, so the stream is awakened with the reason TASK_WOKEN_RES. At this step, the previous reason (TASK_WOKEN_MSG) is lost. Now, the task states are saved for a stream and reset only when the stream processing is not interrupted. The correspoing bitfield represents the pending events for a stream. And we use this one instead of the task state during the stream processing. Note that TASK_WOKEN_TIMER and TASK_WOKEN_RES are always removed because these events are always handled during the stream processing. [wt: backport to 1.7 and 1.6] |
||
|---|---|---|
| .. | ||
| common | ||
| import | ||
| proto | ||
| types | ||