X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fevent_client.c;h=79a2f0f9c213feb6d4b8517f0de0d7cbef88aae3;hb=aa7365c86de8e26e796d3aa3fd605c85d8c26220;hp=bd0b8a105be45f9cda7a142a32860a8331b36052;hpb=fd8fe6104cd95ec30d9dfd4d13be164a9dc4d71d;p=citadel.git diff --git a/citadel/event_client.c b/citadel/event_client.c index bd0b8a105..79a2f0f9c 100644 --- a/citadel/event_client.c +++ b/citadel/event_client.c @@ -1,20 +1,13 @@ /* - * * Copyright (c) 1998-2012 by the citadel.org team * - * This program is open source software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 3. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include "sysdep.h" @@ -309,7 +302,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 +313,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 +345,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 +578,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 +810,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);