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'

source/libcli/cldap/cldap.c
source/libcli/dgram/dgramsocket.c
source/libcli/nbt/nbtsocket.c
source/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);