BUG/MAJOR: applet: fix a freeze if data is immedately forwarded.

Introduced regression with 'MAJOR: applet scheduler rework' (1.8-dev only).

The fix consist to re-enable the appctx immediatly from the
applet wake cb if the process_stream is not pending in runqueue
and the applet want perform a put or a get and the WAIT_ROOM
flag was removed by stream_int_notify.
This commit is contained in:
Emeric Brun 2017-06-30 14:11:56 +02:00 committed by Willy Tarreau
parent a03d4ada26
commit 2802b07d97

View File

@ -1354,7 +1354,7 @@ void stream_sock_read0(struct stream_interface *si)
/* Callback to be used by applet handlers upon completion. It updates the stream
* (which may or may not take this opportunity to try to forward data), then
* may disable the applet's based on the channels and stream interface's final
* may re-enable the applet's based on the channels and stream interface's final
* states.
*/
void si_applet_wake_cb(struct stream_interface *si)
@ -1369,8 +1369,15 @@ void si_applet_wake_cb(struct stream_interface *si)
/* update the stream-int, channels, and possibly wake the stream up */
stream_int_notify(si);
}
/* stream_int_notify may pass throught checksnd and released some
* WAIT_ROOM flags. The process_stream will consider those flags
* to wakeup the appctx but in the case the task is not in runqueue
* we may have to wakeup the appctx immediately.
*/
if (!task_in_rq(si_task(si)))
stream_int_update_applet(si);
}
/* Updates the activity status of an applet outside of the applet handler based
* on the channel's flags and the stream interface's flags. It needs to be