mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-23 14:51:27 +02:00
BUG/MINOR: lua: schedule socket task upon lua connect()
The parameters like server-address, port and timeout should be set before process_stream task is called to avoid the stream being 'closed' before it got initialized properly. This is most clearly visible when running with tune.lua.forced-yield=1.. So scheduling the task should not be done when creating the lua socket, but when connect is called. The error "socket: not yet initialised, you can't set timeouts." would then appear. Below code for example also shows this issue, as the sleep will yield the lua code: local con = core.tcp() core.sleep(1) con:settimeout(10)
This commit is contained in:
parent
cb92f5cae4
commit
706d5ee0c3
@ -2423,6 +2423,10 @@ __LJMP static int hlua_socket_connect(struct lua_State *L)
|
|||||||
WILL_LJMP(luaL_error(L, "out of memory"));
|
WILL_LJMP(luaL_error(L, "out of memory"));
|
||||||
}
|
}
|
||||||
xref_unlock(&socket->xref, peer);
|
xref_unlock(&socket->xref, peer);
|
||||||
|
|
||||||
|
task_wakeup(s->task, TASK_WOKEN_INIT);
|
||||||
|
/* Return yield waiting for connection. */
|
||||||
|
|
||||||
WILL_LJMP(hlua_yieldk(L, 0, 0, hlua_socket_connect_yield, TICK_ETERNITY, 0));
|
WILL_LJMP(hlua_yieldk(L, 0, 0, hlua_socket_connect_yield, TICK_ETERNITY, 0));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -2582,8 +2586,6 @@ __LJMP static int hlua_socket_new(lua_State *L)
|
|||||||
strm->flags |= SF_DIRECT | SF_ASSIGNED | SF_ADDR_SET | SF_BE_ASSIGNED;
|
strm->flags |= SF_DIRECT | SF_ASSIGNED | SF_ADDR_SET | SF_BE_ASSIGNED;
|
||||||
strm->target = &socket_tcp.obj_type;
|
strm->target = &socket_tcp.obj_type;
|
||||||
|
|
||||||
task_wakeup(strm->task, TASK_WOKEN_INIT);
|
|
||||||
/* Return yield waiting for connection. */
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
out_fail_stream:
|
out_fail_stream:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user