]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: stream-int: don't needlessly call si_cs_send() in si_cs_process()
authorWilly Tarreau <w@1wt.eu>
Thu, 25 Oct 2018 12:02:47 +0000 (14:02 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 28 Oct 2018 12:50:02 +0000 (13:50 +0100)
There's a call there to si_cs_send() while we're supposed to come from
si_cs_io_cb() which has just done it. But in fact we can also come here
as a lower layer callback from ->wake() after a connection is established.
Since most of the time we'll end up here with either no data in the buffer
or a blocked output, let's simply check if we're already susbcribed to send
events before calling si_cs_send().

src/stream_interface.c

index 60098da395d542a66bb88d0e9bf759d5023b59cf..dbc9d167a421ed571c7d183e91967d4f3dde0fa2 100644 (file)
@@ -568,8 +568,9 @@ static int si_cs_process(struct conn_stream *cs)
        int wait_room = si->flags & SI_FL_WAIT_ROOM;
 
        /* If we have data to send, try it now */
-       if (!channel_is_empty(oc) && objt_cs(si->end))
-               si_cs_send(objt_cs(si->end));
+       if (!channel_is_empty(oc) && !(si->wait_event.wait_reason & SUB_CAN_SEND))
+               si_cs_send(cs);
+
        /* First step, report to the stream-int what was detected at the
         * connection layer : errors and connection establishment.
         */