]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: listeners: make use of fd_want_recv_safe() to enable early receivers
authorWilly Tarreau <w@1wt.eu>
Wed, 4 Nov 2020 12:59:04 +0000 (13:59 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 4 Nov 2020 13:22:42 +0000 (14:22 +0100)
We used to refrain from calling fd_want_recv() if fd_updt was not allocated
but it's not the right solution as this does not allow the FD to be set.
Instead, let's use the new fd_want_recv_safe() which will update the FD and
create an update entry only if possible. In addition, the equivalent test
before calling fd_stop_recv() was removed as totally useless since there's
not fd_updt creation in this case.

src/proto_sockpair.c
src/proto_tcp.c
src/proto_udp.c
src/proto_uxst.c
src/sock.c

index f8e673d0b58e062edf5e61199e56975ca1db2e3c..cc92753792005a5fb46760fc8c25e8a99ad2ea9b 100644 (file)
@@ -107,21 +107,19 @@ static void sockpair_add_listener(struct listener *listener, int port)
 }
 
 /* Enable receipt of incoming connections for listener <l>. The receiver must
- * still be valid. Does nothing in early boot (needs fd_updt).
+ * still be valid.
  */
 static void sockpair_enable_listener(struct listener *l)
 {
-       if (fd_updt)
-               fd_want_recv(l->rx.fd);
+       fd_want_recv_safe(l->rx.fd);
 }
 
 /* Disable receipt of incoming connections for listener <l>. The receiver must
- * still be valid. Does nothing in early boot (needs fd_updt).
+ * still be valid.
  */
 static void sockpair_disable_listener(struct listener *l)
 {
-       if (fd_updt)
-               fd_stop_recv(l->rx.fd);
+       fd_stop_recv(l->rx.fd);
 }
 
 /* Binds receiver <rx>, and assigns rx->iocb and rx->owner as the callback
index e59aa961cbc9cb8dea385298ff38287830d63bdc..06adf9b4789e6b4e3da86e1db1cda6f89f21e7cf 100644 (file)
@@ -749,21 +749,19 @@ static void tcpv6_add_listener(struct listener *listener, int port)
 }
 
 /* Enable receipt of incoming connections for listener <l>. The receiver must
- * still be valid. Does nothing in early boot (needs fd_updt).
+ * still be valid.
  */
 static void tcp_enable_listener(struct listener *l)
 {
-       if (fd_updt)
-               fd_want_recv(l->rx.fd);
+       fd_want_recv_safe(l->rx.fd);
 }
 
 /* Disable receipt of incoming connections for listener <l>. The receiver must
- * still be valid. Does nothing in early boot (needs fd_updt).
+ * still be valid.
  */
 static void tcp_disable_listener(struct listener *l)
 {
-       if (fd_updt)
-               fd_stop_recv(l->rx.fd);
+       fd_stop_recv(l->rx.fd);
 }
 
 /* Suspend a receiver. Returns < 0 in case of failure, 0 if the receiver
index 0724680a9a654997fba6ec25f8515721fa61b20d..ae5562afb2e6345754bb8ad2d44f6898dcd48972 100644 (file)
@@ -173,21 +173,19 @@ static void udp6_add_listener(struct listener *listener, int port)
 }
 
 /* Enable receipt of incoming connections for listener <l>. The receiver must
- * still be valid. Does nothing in early boot (needs fd_updt).
+ * still be valid.
  */
 static void udp_enable_listener(struct listener *l)
 {
-       if (fd_updt)
-               fd_want_recv(l->rx.fd);
+       fd_want_recv_safe(l->rx.fd);
 }
 
 /* Disable receipt of incoming connections for listener <l>. The receiver must
- * still be valid. Does nothing in early boot (needs fd_updt).
+ * still be valid.
  */
 static void udp_disable_listener(struct listener *l)
 {
-       if (fd_updt)
-               fd_stop_recv(l->rx.fd);
+       fd_stop_recv(l->rx.fd);
 }
 
 /* Suspend a receiver. Returns < 0 in case of failure, 0 if the receiver
index d33f8c3a7af23722c41658f462c8bb09a80fa604..f558e5f34b2fd05f59f234ad67292b9453c8da9c 100644 (file)
@@ -153,21 +153,19 @@ static void uxst_add_listener(struct listener *listener, int port)
 }
 
 /* Enable receipt of incoming connections for listener <l>. The receiver must
- * still be valid. Does nothing in early boot (needs fd_updt).
+ * still be valid.
  */
 static void uxst_enable_listener(struct listener *l)
 {
-       if (fd_updt)
-               fd_want_recv(l->rx.fd);
+       fd_want_recv_safe(l->rx.fd);
 }
 
 /* Disable receipt of incoming connections for listener <l>. The receiver must
- * still be valid. Does nothing in early boot (needs fd_updt).
+ * still be valid.
  */
 static void uxst_disable_listener(struct listener *l)
 {
-       if (fd_updt)
-               fd_stop_recv(l->rx.fd);
+       fd_stop_recv(l->rx.fd);
 }
 
 /* Suspend a receiver. Returns < 0 in case of failure, 0 if the receiver
index 192559bfbf262fa7de2e89198d84cd23e417df96..3e2f208879e8028b4a90a12b21880d98de0681e1 100644 (file)
@@ -186,21 +186,17 @@ int sock_create_server_socket(struct connection *conn)
        return my_socketat(ns, conn->dst->ss_family, SOCK_STREAM, 0);
 }
 
-/* Enables receiving on receiver <rx> once already bound. Does nothing in early
- * boot (needs fd_updt).
- */
+/* Enables receiving on receiver <rx> once already bound. */
 void sock_enable(struct receiver *rx)
 {
-        if (rx->flags & RX_F_BOUND && fd_updt)
-               fd_want_recv(rx->fd);
+        if (rx->flags & RX_F_BOUND)
+               fd_want_recv_safe(rx->fd);
 }
 
-/* Disables receiving on receiver <rx> once already bound. Does nothing in early
- * boot (needs fd_updt).
- */
+/* Disables receiving on receiver <rx> once already bound. */
 void sock_disable(struct receiver *rx)
 {
-        if (rx->flags & RX_F_BOUND && fd_updt)
+        if (rx->flags & RX_F_BOUND)
                fd_stop_recv(rx->fd);
 }