r7483: ensure we try reading from a socket if epoll says we can, and don't
authorAndrew Tridgell <tridge@samba.org>
Sat, 11 Jun 2005 03:53:39 +0000 (03:53 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:17:58 +0000 (13:17 -0500)
just do the write. This is needed because the write could return
-1/EAGAIN for dgram sockets, if the socket buffer is nearly full. The
epoll loop then goes on forever.

This was causing some failures in 'make test'
(This used to be commit b7fefe76a2d3c288611868f41d65af4e13ac460b)

source4/libcli/cldap/cldap.c
source4/libcli/dgram/dgramsocket.c
source4/libcli/nbt/nbtsocket.c
source4/libcli/wins/winsrepl.c

index a96906cf4c986c8edf64835c7dd17a0ea9e616c5..41d5f1a06e4d25811332fd626a7f9f867dbf4f38 100644 (file)
@@ -222,7 +222,8 @@ static void cldap_socket_handler(struct event_context *ev, struct fd_event *fde,
        struct cldap_socket *cldap = talloc_get_type(private, struct cldap_socket);
        if (flags & EVENT_FD_WRITE) {
                cldap_socket_send(cldap);
-       } else if (flags & EVENT_FD_READ) {
+       } 
+       if (flags & EVENT_FD_READ) {
                cldap_socket_recv(cldap);
        }
 }
index 88eed5c10b0eb3fa068090216609a59bdaddc4bb..aff9d2e1825c1ace4b0d16293749bb44aed68093 100644 (file)
@@ -146,7 +146,8 @@ static void dgm_socket_handler(struct event_context *ev, struct fd_event *fde,
                                                           struct nbt_dgram_socket);
        if (flags & EVENT_FD_WRITE) {
                dgm_socket_send(dgmsock);
-       } else if (flags & EVENT_FD_READ) {
+       } 
+       if (flags & EVENT_FD_READ) {
                dgm_socket_recv(dgmsock);
        }
 }
index f600afb79fdc35678824c001aebe0766dfb5bee6..0401e68af8d8b6523d43a725f890d142f5b85a29 100644 (file)
@@ -292,7 +292,8 @@ static void nbt_name_socket_handler(struct event_context *ev, struct fd_event *f
                                                          struct nbt_name_socket);
        if (flags & EVENT_FD_WRITE) {
                nbt_name_socket_send(nbtsock);
-       } else if (flags & EVENT_FD_READ) {
+       } 
+       if (flags & EVENT_FD_READ) {
                nbt_name_socket_recv(nbtsock);
        }
 }
index 65b713202f0861d119f9d7769b2f69aa8c3aff45..732b597c530ef96fec4fddb2db10e7e2c04148de 100644 (file)
@@ -200,7 +200,6 @@ static void wrepl_handler(struct event_context *ev, struct fd_event *fde,
                                                            struct wrepl_socket);
        if (flags & EVENT_FD_WRITE) {
                wrepl_handler_send(wrepl_socket);
-               return;
        }
        if (flags & EVENT_FD_READ) {
                wrepl_handler_recv(wrepl_socket);