X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fevent_client.c;h=383668c45722027327f21b26ccebddf44e8cbb55;hb=b6b7232c3d43b56d6606eecd9ae84a396ba8ff25;hp=bd0b8a105be45f9cda7a142a32860a8331b36052;hpb=089a2ec7acc14d03ea90ce182acb46f803f377f2;p=citadel.git diff --git a/citadel/event_client.c b/citadel/event_client.c index bd0b8a105..383668c45 100644 --- a/citadel/event_client.c +++ b/citadel/event_client.c @@ -309,7 +309,7 @@ void FreeAsyncIOContents(AsyncIO *IO) } -void StopClientWatchers(AsyncIO *IO) +void StopClientWatchers(AsyncIO *IO, int CloseFD) { ev_timer_stop (event_base, &IO->rw_timeout); ev_timer_stop(event_base, &IO->conn_fail); @@ -320,11 +320,11 @@ void StopClientWatchers(AsyncIO *IO) ev_io_stop(event_base, &IO->send_event); ev_io_stop(event_base, &IO->recv_event); - if (IO->SendBuf.fd != 0) { + if (CloseFD && (IO->SendBuf.fd > 0)) { close(IO->SendBuf.fd); + IO->SendBuf.fd = -1; + IO->RecvBuf.fd = -1; } - IO->SendBuf.fd = 0; - IO->RecvBuf.fd = 0; } void StopCurlWatchers(AsyncIO *IO) @@ -352,7 +352,7 @@ void ShutDownCLient(AsyncIO *IO) EVM_syslog(LOG_DEBUG, "EVENT Terminating \n"); - StopClientWatchers(IO); + StopClientWatchers(IO, 1); if (IO->DNS.Channel != NULL) { ares_destroy(IO->DNS.Channel); @@ -585,7 +585,7 @@ IO_send_callback(struct ev_loop *loop, ev_io *watcher, int revents) } else if (rc < 0) { if (errno != EAGAIN) { - StopClientWatchers(IO); + StopClientWatchers(IO, 1); EV_syslog(LOG_DEBUG, "EVENT: Socket Invalid! [%d] [%s] [%d]\n", errno, strerror(errno), IO->SendBuf.fd); @@ -817,7 +817,7 @@ IO_recv_callback(struct ev_loop *loop, ev_io *watcher, int revents) } else if (nbytes == -1) { if (errno != EAGAIN) { // FD is gone. kick it. - StopClientWatchers(IO); + StopClientWatchers(IO, 1); EV_syslog(LOG_DEBUG, "EVENT: Socket Invalid! [%d] [%s] [%d]\n", errno, strerror(errno), IO->SendBuf.fd);