]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: fd: add fd_want_recv_safe()
authorWilly Tarreau <w@1wt.eu>
Wed, 4 Nov 2020 12:52:22 +0000 (13:52 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 4 Nov 2020 13:22:42 +0000 (14:22 +0100)
This does the same as fd_want_recv() except that it does check for
fd_updt[] to be allocated, as this may be called during early listener
initialization. Previously we used to check fd_updt[] before calling
fd_want_recv() but this is not correct since it does not update the
FD flags. This method will be safer.

include/haproxy/fd.h

index 5300fd4dc5d5e4575ae48b4e22239f0b0de06aa9..9492c3ed0bd8a5a1434cd87297bfbfd31764abe9 100644 (file)
@@ -288,6 +288,18 @@ static inline void fd_want_recv(int fd)
        updt_fd_polling(fd);
 }
 
+/* Prepare FD <fd> to try to receive, and only create update if fd_updt exists
+ * (essentially for receivers during early boot).
+ */
+static inline void fd_want_recv_safe(int fd)
+{
+       if ((fdtab[fd].state & FD_EV_ACTIVE_R) ||
+           HA_ATOMIC_BTS(&fdtab[fd].state, FD_EV_ACTIVE_R_BIT))
+               return;
+       if (fd_updt)
+               updt_fd_polling(fd);
+}
+
 /* Prepare FD <fd> to try to send */
 static inline void fd_want_send(int fd)
 {