diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2016-04-22 15:03:27 +0000 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2016-04-22 15:03:27 +0000 |
commit | 366a260595db768fa12371b8a746894e73f5af79 (patch) | |
tree | b2466a335c9e7b88aa34dbc660894c799bb29794 | |
parent | 11dc6d06afa0fe8f7d2eb8a64d9a7698a3192434 (diff) | |
download | libmicrohttpd-366a260595db768fa12371b8a746894e73f5af79.tar.gz libmicrohttpd-366a260595db768fa12371b8a746894e73f5af79.zip |
Fixed race conditions for thread pool.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/microhttpd/daemon.c | 7 |
2 files changed, 8 insertions, 3 deletions
@@ -1,3 +1,7 @@ | |||
1 | Fri Apr 22 14:29:28 CET 2016 | ||
2 | Fixed race conditions when stopping quiesced daemon with thread | ||
3 | pool. -EG | ||
4 | |||
1 | Wed Apr 20 18:12:30 CET 2016 | 5 | Wed Apr 20 18:12:30 CET 2016 |
2 | Fixed macros in sysfdsetsize.c which could prevent compiling with | 6 | Fixed macros in sysfdsetsize.c which could prevent compiling with |
3 | non-default FD_SETSIZE. | 7 | non-default FD_SETSIZE. |
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c index 2173378d..42b07c5e 100644 --- a/src/microhttpd/daemon.c +++ b/src/microhttpd/daemon.c | |||
@@ -4306,7 +4306,8 @@ MHD_start_daemon_va (unsigned int flags, | |||
4306 | d->worker_pool_size = 0; | 4306 | d->worker_pool_size = 0; |
4307 | d->worker_pool = NULL; | 4307 | d->worker_pool = NULL; |
4308 | 4308 | ||
4309 | if (MHD_USE_SUSPEND_RESUME == (flags & MHD_USE_SUSPEND_RESUME)) | 4309 | /* Always use individual control pipes */ |
4310 | if (1) | ||
4310 | { | 4311 | { |
4311 | if (0 != MHD_pipe_ (d->wpipe)) | 4312 | if (0 != MHD_pipe_ (d->wpipe)) |
4312 | { | 4313 | { |
@@ -4330,7 +4331,6 @@ MHD_start_daemon_va (unsigned int flags, | |||
4330 | } | 4331 | } |
4331 | #ifndef MHD_WINSOCK_SOCKETS | 4332 | #ifndef MHD_WINSOCK_SOCKETS |
4332 | if ( (0 == (flags & (MHD_USE_POLL | MHD_USE_EPOLL_LINUX_ONLY))) && | 4333 | if ( (0 == (flags & (MHD_USE_POLL | MHD_USE_EPOLL_LINUX_ONLY))) && |
4333 | (MHD_USE_SUSPEND_RESUME == (flags & MHD_USE_SUSPEND_RESUME)) && | ||
4334 | (d->wpipe[0] >= FD_SETSIZE) ) | 4334 | (d->wpipe[0] >= FD_SETSIZE) ) |
4335 | { | 4335 | { |
4336 | #ifdef HAVE_MESSAGES | 4336 | #ifdef HAVE_MESSAGES |
@@ -4650,7 +4650,8 @@ MHD_stop_daemon (struct MHD_Daemon *daemon) | |||
4650 | (0 != MHD_socket_close_ (daemon->worker_pool[i].epoll_fd)) ) | 4650 | (0 != MHD_socket_close_ (daemon->worker_pool[i].epoll_fd)) ) |
4651 | MHD_PANIC ("close failed\n"); | 4651 | MHD_PANIC ("close failed\n"); |
4652 | #endif | 4652 | #endif |
4653 | if ( (MHD_USE_SUSPEND_RESUME == (daemon->options & MHD_USE_SUSPEND_RESUME)) ) | 4653 | /* Individual pipes are always used */ |
4654 | if (1) | ||
4654 | { | 4655 | { |
4655 | if (MHD_INVALID_PIPE_ != daemon->worker_pool[i].wpipe[1]) | 4656 | if (MHD_INVALID_PIPE_ != daemon->worker_pool[i].wpipe[1]) |
4656 | { | 4657 | { |