diff options
Diffstat (limited to 'src/daemon/session.c')
-rw-r--r-- | src/daemon/session.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/daemon/session.c b/src/daemon/session.c index 1af59e84..84ed6bc2 100644 --- a/src/daemon/session.c +++ b/src/daemon/session.c | |||
@@ -131,17 +131,22 @@ MHD_session_get_fdset(struct MHD_Session * session, | |||
131 | fd_set * write_fd_set, | 131 | fd_set * write_fd_set, |
132 | fd_set * except_fd_set, | 132 | fd_set * except_fd_set, |
133 | int * max_fd) { | 133 | int * max_fd) { |
134 | int fd; | ||
135 | |||
136 | fd = session->socket_fd; | ||
137 | if (fd == -1) | ||
138 | return MHD_YES; | ||
134 | if ( (session->read_close == 0) && | 139 | if ( (session->read_close == 0) && |
135 | ( (session->headersReceived == 0) || | 140 | ( (session->headersReceived == 0) || |
136 | (session->readLoc < session->read_buffer_size) ) ) | 141 | (session->readLoc < session->read_buffer_size) ) ) |
137 | FD_SET(session->socket_fd, read_fd_set); | 142 | FD_SET(fd, read_fd_set); |
138 | if (session->response != NULL) | 143 | if (session->response != NULL) |
139 | FD_SET(session->socket_fd, write_fd_set); | 144 | FD_SET(fd, write_fd_set); |
140 | if ( (session->socket_fd > *max_fd) && | 145 | if ( (fd > *max_fd) && |
141 | ( (session->headersReceived == 0) || | 146 | ( (session->headersReceived == 0) || |
142 | (session->readLoc < session->read_buffer_size) || | 147 | (session->readLoc < session->read_buffer_size) || |
143 | (session->response != NULL) ) ) | 148 | (session->response != NULL) ) ) |
144 | *max_fd = session->socket_fd; | 149 | *max_fd = fd; |
145 | return MHD_YES; | 150 | return MHD_YES; |
146 | } | 151 | } |
147 | 152 | ||
@@ -479,9 +484,9 @@ MHD_call_session_handler(struct MHD_Session * session) { | |||
479 | memmove(session->read_buffer, | 484 | memmove(session->read_buffer, |
480 | &session->read_buffer[session->readLoc - processed], | 485 | &session->read_buffer[session->readLoc - processed], |
481 | processed); | 486 | processed); |
482 | session->readLoc = processed; | ||
483 | if (session->uploadSize != -1) | 487 | if (session->uploadSize != -1) |
484 | session->uploadSize -= processed; | 488 | session->uploadSize -= (session->readLoc - processed); |
489 | session->readLoc = processed; | ||
485 | if ( (session->uploadSize == 0) || | 490 | if ( (session->uploadSize == 0) || |
486 | ( (session->readLoc == 0) && | 491 | ( (session->readLoc == 0) && |
487 | (session->uploadSize == -1) && | 492 | (session->uploadSize == -1) && |