diff options
Diffstat (limited to 'src/daemon')
-rw-r--r-- | src/daemon/daemon.c | 25 | ||||
-rw-r--r-- | src/daemon/session.c | 3 |
2 files changed, 18 insertions, 10 deletions
diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c index 1b882a08..0abb74b0 100644 --- a/src/daemon/daemon.c +++ b/src/daemon/daemon.c | |||
@@ -58,7 +58,7 @@ MHD_register_handler(struct MHD_Daemon * daemon, | |||
58 | return MHD_NO; | 58 | return MHD_NO; |
59 | ah = ah->next; | 59 | ah = ah->next; |
60 | } | 60 | } |
61 | ah = malloc(sizeof(MHD_AccessHandlerCallback)); | 61 | ah = malloc(sizeof(struct MHD_AccessHandler)); |
62 | ah->next = daemon->handlers; | 62 | ah->next = daemon->handlers; |
63 | ah->uri_prefix = strdup(uri_prefix); | 63 | ah->uri_prefix = strdup(uri_prefix); |
64 | ah->dh = dh; | 64 | ah->dh = dh; |
@@ -186,7 +186,8 @@ MHD_handle_connection(void * data) { | |||
186 | } | 186 | } |
187 | if ( ( (FD_ISSET(con->socket_fd, &rs)) && | 187 | if ( ( (FD_ISSET(con->socket_fd, &rs)) && |
188 | (MHD_YES != MHD_session_handle_read(con)) ) || | 188 | (MHD_YES != MHD_session_handle_read(con)) ) || |
189 | ( (FD_ISSET(con->socket_fd, &ws)) && | 189 | ( (con->socket_fd != -1) && |
190 | (FD_ISSET(con->socket_fd, &ws)) && | ||
190 | (MHD_YES != MHD_session_handle_write(con)) ) ) | 191 | (MHD_YES != MHD_session_handle_write(con)) ) ) |
191 | break; | 192 | break; |
192 | } | 193 | } |
@@ -214,9 +215,10 @@ MHD_accept_connection(struct MHD_Daemon * daemon) { | |||
214 | memset(&addr, | 215 | memset(&addr, |
215 | 0, | 216 | 0, |
216 | sizeof(struct sockaddr)); | 217 | sizeof(struct sockaddr)); |
217 | if ( (0 != (s = accept(daemon->socket_fd, | 218 | s = accept(daemon->socket_fd, |
218 | &addr, | 219 | &addr, |
219 | &addrlen))) || | 220 | &addrlen); |
221 | if ( (s < 0) || | ||
220 | (addrlen <= 0) ) { | 222 | (addrlen <= 0) ) { |
221 | MHD_DLOG(daemon, | 223 | MHD_DLOG(daemon, |
222 | "Error accepting connection: %s\n", | 224 | "Error accepting connection: %s\n", |
@@ -298,20 +300,23 @@ MHD_cleanup_sessions(struct MHD_Daemon * daemon) { | |||
298 | free(hpos->header); | 300 | free(hpos->header); |
299 | free(hpos->value); | 301 | free(hpos->value); |
300 | } | 302 | } |
301 | |||
302 | if (pos->response != NULL) | 303 | if (pos->response != NULL) |
303 | MHD_destroy_response(pos->response); | 304 | MHD_destroy_response(pos->response); |
304 | free(pos); | 305 | free(pos); |
305 | } | 306 | if (prev == NULL) |
306 | 307 | pos = daemon->connections; | |
308 | else | ||
309 | pos = prev->next; | ||
310 | continue; | ||
311 | } | ||
312 | |||
307 | if ( (pos->headersReceived == 1) && | 313 | if ( (pos->headersReceived == 1) && |
308 | (pos->read_buffer_size == pos->readLoc) && | 314 | (pos->read_buffer_size == pos->readLoc) && |
309 | (pos->readLoc > 0) ) | 315 | (pos->readLoc > 0) ) |
310 | MHD_call_session_handler(pos); | 316 | MHD_call_session_handler(pos); |
311 | 317 | ||
312 | |||
313 | prev = pos; | 318 | prev = pos; |
314 | pos = pos->next; | 319 | pos = pos->next; |
315 | } | 320 | } |
316 | } | 321 | } |
317 | 322 | ||
diff --git a/src/daemon/session.c b/src/daemon/session.c index ed1b6b88..7dbc781d 100644 --- a/src/daemon/session.c +++ b/src/daemon/session.c | |||
@@ -361,6 +361,9 @@ MHD_session_handle_read(struct MHD_Session * session) { | |||
361 | session->read_buffer, | 361 | session->read_buffer, |
362 | session->read_buffer_size); | 362 | session->read_buffer_size); |
363 | session->read_buffer_size = session->read_buffer_size * 2 + MHD_MAX_BUF_SIZE; | 363 | session->read_buffer_size = session->read_buffer_size * 2 + MHD_MAX_BUF_SIZE; |
364 | if (session->read_buffer != NULL) | ||
365 | free(session->read_buffer); | ||
366 | session->read_buffer = tmp; | ||
364 | } | 367 | } |
365 | if (session->readLoc >= session->read_buffer_size) { | 368 | if (session->readLoc >= session->read_buffer_size) { |
366 | MHD_DLOG(session->daemon, | 369 | MHD_DLOG(session->daemon, |