]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: lua: outgoing connection was broken since 1.6-dev2 (bis)
authorThierry FOURNIER <tfournier@arpalert.org>
Fri, 4 Sep 2015 16:25:53 +0000 (18:25 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 6 Sep 2015 06:22:49 +0000 (08:22 +0200)
See commit id bdc97a8795c52af94683db25a4984578e26f4857

Michael Ezzell reported that the following Lua code fails in
dev4 when the TCP is not established immediately (due to a little
bit of latency):

   function tricky_socket()
        local sock = core.tcp();
        sock:settimeout(3);
        core.log(core.alert,"calling connect()\n");
        local connected, con_err = sock:connect("x.x.x.x",80);
        core.log(core.alert,"returned from connect()\n");
        if con_err ~= nil then
          core.log(core.alert,"connect() failed with error: '" .. con_err .. "'\n");
        end

The problem is that the flags who want to wake up the applet are
resetted before each applet call, so the applet must set again the
flags if the connection is not established.

src/hlua.c

index 61e28d00146c90ce1c6a0a8d832e2495b3ede066..1e4d47c31e66c16c837ff2aa5ef577f6cafdc7e7 100644 (file)
@@ -1461,8 +1461,14 @@ static void hlua_socket_handler(struct appctx *appctx)
                return;
        }
 
-       if (!(c->flags & CO_FL_CONNECTED))
+       /* if the connection is not estabkished, inform the stream that we want
+        * to be notified whenever the connection completes.
+        */
+       if (!(c->flags & CO_FL_CONNECTED)) {
+               si_applet_cant_get(si);
+               si_applet_cant_put(si);
                return;
+       }
 
        /* This function is called after the connect. */
        appctx->ctx.hlua.connected = 1;