From 9198f7e7aa8d00a9dd5940892f735863fbac724b Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Fri, 10 Feb 2012 12:42:04 +0100 Subject: [PATCH] fixed bug at server destructor --- ChangeLog | 6 +++++- include/server.h | 2 +- src/server.c | 6 ++++-- src/server/close_conn.c | 4 ---- src/server/poll.c | 8 +++++--- src/server/run.c | 1 + 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index d0a890b..96cad48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ +2012-02-10 12:42:04 +0100 Georg Hopp + + * fixed bug at server destructor (HEAD, master) + 2012-02-10 09:59:41 +0100 Georg Hopp - * reset keep_live flag on connection close (HEAD, master) + * reset keep_live flag on connection close 2012-02-10 09:52:27 +0100 Georg Hopp diff --git a/include/server.h b/include/server.h index 1e46903..7df30a6 100644 --- a/include/server.h +++ b/include/server.h @@ -35,7 +35,6 @@ CLASS(Server) { * von poll beruecksichtigen. */ nfds_t nfds; - nfds_t ndel; struct pollfd fds[POLL_FD_NSIZE]; struct { @@ -43,6 +42,7 @@ CLASS(Server) { void * reader; char keep_alive; + char wbuf[2048]; char * rbuf; unsigned int rpos; diff --git a/src/server.c b/src/server.c index e83c8b8..3e26b30 100644 --- a/src/server.c +++ b/src/server.c @@ -36,12 +36,14 @@ dtor(void * _this) Server this = _this; int i; + printf("nfds: %d\n", this->nfds); + for (i=1; infds; i++) { /* * @TODO do some finalization...buffer handling...etc. */ - delete(&(this->conns[i]).sock); - delete(&(this->conns[i]).reader); + delete(&(this->conns[(this->fds)[i].fd]).sock); + delete(&(this->conns[(this->fds)[i].fd]).reader); } delete(&this->sock); diff --git a/src/server/close_conn.c b/src/server/close_conn.c index 9a8a4ab..2f90e15 100644 --- a/src/server/close_conn.c +++ b/src/server/close_conn.c @@ -17,10 +17,6 @@ serverCloseConn(Server this, unsigned int i) (this->fds)[i].events = 0; (this->fds)[i].revents = 0; (this->fds)[i].fd = 0; - - this->ndel++; -// CLEAR_CONN(this, i); -// this->nfds--; } // vim: set ts=4 sw=4: diff --git a/src/server/poll.c b/src/server/poll.c index f6829df..8ad7d84 100644 --- a/src/server/poll.c +++ b/src/server/poll.c @@ -26,8 +26,8 @@ serverPoll(Server this) { int events; qsort(this->fds, this->nfds, sizeof(struct pollfd), sortEvents); - this->nfds -= this->ndel; - this->ndel = 0; + while((this->fds)[this->nfds].fd == 0 && this->nfds > 0) this->nfds--; + this->nfds++; /* * wait for handles to become ready @@ -49,7 +49,9 @@ serverPoll(Server this) { } } - qsort(this->fds, this->nfds, sizeof(struct pollfd), sortRevents); + if (-1 != events) { + qsort(this->fds, this->nfds, sizeof(struct pollfd), sortRevents); + } return events; } diff --git a/src/server/run.c b/src/server/run.c index 5145b08..58bd24f 100644 --- a/src/server/run.c +++ b/src/server/run.c @@ -74,6 +74,7 @@ serverRun(Server this) * generalizing here. */ int size; + if (0 < (size=serverRead(this, i))) { int j; HttpRequestQueue queue =