Browse Source

fixed bug at server destructor

master
Georg Hopp 14 years ago
parent
commit
9198f7e7aa
  1. 6
      ChangeLog
  2. 2
      include/server.h
  3. 6
      src/server.c
  4. 4
      src/server/close_conn.c
  5. 8
      src/server/poll.c
  6. 1
      src/server/run.c

6
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 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 2012-02-10 09:52:27 +0100 Georg Hopp

2
include/server.h

@ -35,7 +35,6 @@ CLASS(Server) {
* von poll beruecksichtigen. * von poll beruecksichtigen.
*/ */
nfds_t nfds; nfds_t nfds;
nfds_t ndel;
struct pollfd fds[POLL_FD_NSIZE]; struct pollfd fds[POLL_FD_NSIZE];
struct { struct {
@ -43,6 +42,7 @@ CLASS(Server) {
void * reader; void * reader;
char keep_alive; char keep_alive;
char wbuf[2048]; char wbuf[2048];
char * rbuf; char * rbuf;
unsigned int rpos; unsigned int rpos;

6
src/server.c

@ -36,12 +36,14 @@ dtor(void * _this)
Server this = _this; Server this = _this;
int i; int i;
printf("nfds: %d\n", this->nfds);
for (i=1; i<this->nfds; i++) { for (i=1; i<this->nfds; i++) {
/* /*
* @TODO do some finalization...buffer handling...etc. * @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); delete(&this->sock);

4
src/server/close_conn.c

@ -17,10 +17,6 @@ serverCloseConn(Server this, unsigned int i)
(this->fds)[i].events = 0; (this->fds)[i].events = 0;
(this->fds)[i].revents = 0; (this->fds)[i].revents = 0;
(this->fds)[i].fd = 0; (this->fds)[i].fd = 0;
this->ndel++;
// CLEAR_CONN(this, i);
// this->nfds--;
} }
// vim: set ts=4 sw=4: // vim: set ts=4 sw=4:

8
src/server/poll.c

@ -26,8 +26,8 @@ serverPoll(Server this) {
int events; int events;
qsort(this->fds, this->nfds, sizeof(struct pollfd), sortEvents); 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 * 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; return events;
} }

1
src/server/run.c

@ -74,6 +74,7 @@ serverRun(Server this)
* generalizing here. * generalizing here.
*/ */
int size; int size;
if (0 < (size=serverRead(this, i))) { if (0 < (size=serverRead(this, i))) {
int j; int j;
HttpRequestQueue queue = HttpRequestQueue queue =

Loading…
Cancel
Save