mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-17 00:44:33 +00:00
BUG/MAJOR: lua: Dead lock with sockets
In some cases, when we are waiting for data and the socket timeout expires, we have a dead lock. The Lua socket locks the applet socket, and call for a notify. The notify immediately executes code and try to acquire the same lock, so ... dead lock. stream_int_notify() cant be used because it wakeup the applet task only if the stream have changes. The changes are forces by Lua, but not repported on the stream. stream_int_update_applet() cant be used because the deadlock. So, I inconditionnaly wakeup the applet. This wake is performed asynchronously, and will call a stream_int_notify(). This patch must be backported in 1.6, 1.7 and 1.8
This commit is contained in:
parent
af4bd0867a
commit
7e4ee47acc
@ -1766,8 +1766,7 @@ __LJMP static int hlua_socket_receive_yield(struct lua_State *L, int status, lua
|
||||
co_skip(oc, len + skip_at_end);
|
||||
|
||||
/* Don't wait anything. */
|
||||
stream_int_notify(&s->si[0]);
|
||||
stream_int_update_applet(&s->si[0]);
|
||||
appctx_wakeup(appctx);
|
||||
|
||||
/* If the pattern reclaim to read all the data
|
||||
* in the connection, got out.
|
||||
|
Loading…
Reference in New Issue
Block a user