aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/daemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/daemon.c')
-rw-r--r--src/microhttpd/daemon.c99
1 files changed, 50 insertions, 49 deletions
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 2c3dbe1a..ae334226 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -1107,7 +1107,7 @@ MHD_get_fdset2 (struct MHD_Daemon *daemon,
1107 (NULL == read_fd_set) || 1107 (NULL == read_fd_set) ||
1108 (NULL == write_fd_set) || 1108 (NULL == write_fd_set) ||
1109 (0 != (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || 1109 (0 != (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) ||
1110 (0 != (daemon->options & MHD_USE_POLL))) 1110 MHD_D_IS_USING_POLL_ (daemon))
1111 return MHD_NO; 1111 return MHD_NO;
1112 1112
1113 if (NULL == except_fd_set) 1113 if (NULL == except_fd_set)
@@ -1122,7 +1122,7 @@ MHD_get_fdset2 (struct MHD_Daemon *daemon,
1122 } 1122 }
1123 1123
1124#ifdef EPOLL_SUPPORT 1124#ifdef EPOLL_SUPPORT
1125 if (0 != (daemon->options & MHD_USE_EPOLL)) 1125 if (MHD_D_IS_USING_EPOLL_ (daemon))
1126 { 1126 {
1127 if (daemon->shutdown) 1127 if (daemon->shutdown)
1128 return MHD_NO; 1128 return MHD_NO;
@@ -1680,7 +1680,7 @@ thread_main_connection_upgrade (struct MHD_Connection *con)
1680 until the application tells us that it is done 1680 until the application tells us that it is done
1681 with the socket; */ 1681 with the socket; */
1682 if ( (0 != (daemon->options & MHD_USE_TLS)) && 1682 if ( (0 != (daemon->options & MHD_USE_TLS)) &&
1683 (0 == (daemon->options & MHD_USE_POLL))) 1683 MHD_D_IS_USING_SELECT_ (daemon))
1684 { 1684 {
1685 while ( (0 != urh->in_buffer_size) || 1685 while ( (0 != urh->in_buffer_size) ||
1686 (0 != urh->out_buffer_size) || 1686 (0 != urh->out_buffer_size) ||
@@ -1896,7 +1896,7 @@ thread_main_handle_connection (void *data)
1896#endif 1896#endif
1897#undef EXTRA_SLOTS 1897#undef EXTRA_SLOTS
1898#ifdef HAVE_POLL 1898#ifdef HAVE_POLL
1899 const bool use_poll = (0 != (daemon->options & MHD_USE_POLL)); 1899 const bool use_poll = MHD_D_IS_USING_POLL_ (daemon);
1900#else /* ! HAVE_POLL */ 1900#else /* ! HAVE_POLL */
1901 const bool use_poll = 0; 1901 const bool use_poll = 0;
1902#endif /* ! HAVE_POLL */ 1902#endif /* ! HAVE_POLL */
@@ -2813,7 +2813,7 @@ new_connection_process_ (struct MHD_Daemon *daemon,
2813#ifdef MHD_USE_THREADS 2813#ifdef MHD_USE_THREADS
2814 if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) 2814 if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
2815 { 2815 {
2816 mhd_assert (0 == (daemon->options & MHD_USE_EPOLL)); 2816 mhd_assert (! MHD_D_IS_USING_EPOLL_ (daemon));
2817 if (! MHD_create_named_thread_ (&connection->tid, 2817 if (! MHD_create_named_thread_ (&connection->tid,
2818 "MHD-connection", 2818 "MHD-connection",
2819 daemon->thread_stack_size, 2819 daemon->thread_stack_size,
@@ -2847,7 +2847,7 @@ new_connection_process_ (struct MHD_Daemon *daemon,
2847 connection->tid = daemon->tid; 2847 connection->tid = daemon->tid;
2848#endif /* MHD_USE_THREADS */ 2848#endif /* MHD_USE_THREADS */
2849#ifdef EPOLL_SUPPORT 2849#ifdef EPOLL_SUPPORT
2850 if (0 != (daemon->options & MHD_USE_EPOLL)) 2850 if (MHD_D_IS_USING_EPOLL_ (daemon))
2851 { 2851 {
2852 if (0 == (daemon->options & MHD_USE_TURBO)) 2852 if (0 == (daemon->options & MHD_USE_TURBO))
2853 { 2853 {
@@ -2979,8 +2979,8 @@ internal_add_connection (struct MHD_Daemon *daemon,
2979 mhd_assert ((NULL == daemon->worker_pool)); 2979 mhd_assert ((NULL == daemon->worker_pool));
2980#endif 2980#endif
2981 2981
2982 if ( (0 == (daemon->options & (MHD_USE_POLL | MHD_USE_EPOLL))) && 2982 if (MHD_D_IS_USING_SELECT_ (daemon) &&
2983 (! MHD_SCKT_FD_FITS_FDSET_ (client_socket, NULL)) ) 2983 (! MHD_SCKT_FD_FITS_FDSET_ (client_socket, NULL)) )
2984 { 2984 {
2985#ifdef HAVE_MESSAGES 2985#ifdef HAVE_MESSAGES
2986 MHD_DLOG (daemon, 2986 MHD_DLOG (daemon,
@@ -2996,8 +2996,8 @@ internal_add_connection (struct MHD_Daemon *daemon,
2996 return MHD_NO; 2996 return MHD_NO;
2997 } 2997 }
2998 2998
2999 if ( (0 != (daemon->options & MHD_USE_EPOLL)) && 2999 if (MHD_D_IS_USING_EPOLL_ (daemon) &&
3000 (! non_blck) ) 3000 (! non_blck) )
3001 { 3001 {
3002#ifdef HAVE_MESSAGES 3002#ifdef HAVE_MESSAGES
3003 MHD_DLOG (daemon, 3003 MHD_DLOG (daemon,
@@ -3142,7 +3142,7 @@ internal_suspend_connection_ (struct MHD_Connection *connection)
3142 connection); 3142 connection);
3143 connection->suspended = true; 3143 connection->suspended = true;
3144#ifdef EPOLL_SUPPORT 3144#ifdef EPOLL_SUPPORT
3145 if (0 != (daemon->options & MHD_USE_EPOLL)) 3145 if (MHD_D_IS_USING_EPOLL_ (daemon))
3146 { 3146 {
3147 if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL)) 3147 if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL))
3148 { 3148 {
@@ -3392,7 +3392,7 @@ resume_suspended_connections (struct MHD_Daemon *daemon)
3392 pos); 3392 pos);
3393 } 3393 }
3394#ifdef EPOLL_SUPPORT 3394#ifdef EPOLL_SUPPORT
3395 if (0 != (daemon->options & MHD_USE_EPOLL)) 3395 if (MHD_D_IS_USING_EPOLL_ (daemon))
3396 { 3396 {
3397 if (0 != (pos->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL)) 3397 if (0 != (pos->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL))
3398 MHD_PANIC ("Resumed connection was already in EREADY set.\n"); 3398 MHD_PANIC ("Resumed connection was already in EREADY set.\n");
@@ -3932,7 +3932,7 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
3932 pos->addr, 3932 pos->addr,
3933 pos->addr_len); 3933 pos->addr_len);
3934#ifdef EPOLL_SUPPORT 3934#ifdef EPOLL_SUPPORT
3935 if (0 != (daemon->options & MHD_USE_EPOLL)) 3935 if (MHD_D_IS_USING_EPOLL_ (daemon))
3936 { 3936 {
3937 if (0 != (pos->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL)) 3937 if (0 != (pos->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL))
3938 { 3938 {
@@ -4101,12 +4101,12 @@ MHD_get_timeout64 (struct MHD_Daemon *daemon,
4101 return MHD_YES; 4101 return MHD_YES;
4102 } 4102 }
4103#ifdef EPOLL_SUPPORT 4103#ifdef EPOLL_SUPPORT
4104 if ( (0 != (daemon->options & MHD_USE_EPOLL)) && 4104 if (MHD_D_IS_USING_EPOLL_ (daemon) &&
4105 ((NULL != daemon->eready_head) 4105 ((NULL != daemon->eready_head)
4106#if defined(UPGRADE_SUPPORT) && defined(HTTPS_SUPPORT) 4106#if defined(UPGRADE_SUPPORT) && defined(HTTPS_SUPPORT)
4107 || (NULL != daemon->eready_urh_head) 4107 || (NULL != daemon->eready_urh_head)
4108#endif /* UPGRADE_SUPPORT && HTTPS_SUPPORT */ 4108#endif /* UPGRADE_SUPPORT && HTTPS_SUPPORT */
4109 ) ) 4109 ) )
4110 { 4110 {
4111 /* Some connection(s) already have some data pending. */ 4111 /* Some connection(s) already have some data pending. */
4112 *timeout64 = 0; 4112 *timeout64 = 0;
@@ -4449,8 +4449,8 @@ MHD_run_from_select (struct MHD_Daemon *daemon,
4449 const fd_set *except_fd_set) 4449 const fd_set *except_fd_set)
4450{ 4450{
4451 fd_set es; 4451 fd_set es;
4452 if (0 != (daemon->options 4452 if (MHD_D_IS_USING_POLL_ (daemon) ||
4453 & (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_POLL)) ) 4453 (0 != (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)))
4454 return MHD_NO; 4454 return MHD_NO;
4455 if ((NULL == read_fd_set) || (NULL == write_fd_set)) 4455 if ((NULL == read_fd_set) || (NULL == write_fd_set))
4456 return MHD_NO; 4456 return MHD_NO;
@@ -4464,7 +4464,7 @@ MHD_run_from_select (struct MHD_Daemon *daemon,
4464 FD_ZERO (&es); 4464 FD_ZERO (&es);
4465 except_fd_set = &es; 4465 except_fd_set = &es;
4466 } 4466 }
4467 if (0 != (daemon->options & MHD_USE_EPOLL)) 4467 if (MHD_D_IS_USING_EPOLL_ (daemon))
4468 { 4468 {
4469#ifdef EPOLL_SUPPORT 4469#ifdef EPOLL_SUPPORT
4470 enum MHD_Result ret = MHD_epoll (daemon, 4470 enum MHD_Result ret = MHD_epoll (daemon,
@@ -5606,7 +5606,7 @@ MHD_run_wait (struct MHD_Daemon *daemon,
5606 if (0 > millisec) 5606 if (0 > millisec)
5607 millisec = -1; 5607 millisec = -1;
5608#ifdef HAVE_POLL 5608#ifdef HAVE_POLL
5609 if (0 != (daemon->options & MHD_USE_POLL)) 5609 if (MHD_D_IS_USING_POLL_ (daemon))
5610 { 5610 {
5611 res = MHD_poll_all (daemon, millisec); 5611 res = MHD_poll_all (daemon, millisec);
5612 MHD_cleanup_connections (daemon); 5612 MHD_cleanup_connections (daemon);
@@ -5614,7 +5614,7 @@ MHD_run_wait (struct MHD_Daemon *daemon,
5614 else 5614 else
5615#endif /* HAVE_POLL */ 5615#endif /* HAVE_POLL */
5616#ifdef EPOLL_SUPPORT 5616#ifdef EPOLL_SUPPORT
5617 if (0 != (daemon->options & MHD_USE_EPOLL)) 5617 if (MHD_D_IS_USING_EPOLL_ (daemon))
5618 { 5618 {
5619 res = MHD_epoll (daemon, millisec); 5619 res = MHD_epoll (daemon, millisec);
5620 MHD_cleanup_connections (daemon); 5620 MHD_cleanup_connections (daemon);
@@ -5720,12 +5720,12 @@ MHD_polling_thread (void *cls)
5720 while (! daemon->shutdown) 5720 while (! daemon->shutdown)
5721 { 5721 {
5722#ifdef HAVE_POLL 5722#ifdef HAVE_POLL
5723 if (0 != (daemon->options & MHD_USE_POLL)) 5723 if (MHD_D_IS_USING_POLL_ (daemon))
5724 MHD_poll (daemon, MHD_YES); 5724 MHD_poll (daemon, MHD_YES);
5725 else 5725 else
5726#endif /* HAVE_POLL */ 5726#endif /* HAVE_POLL */
5727#ifdef EPOLL_SUPPORT 5727#ifdef EPOLL_SUPPORT
5728 if (0 != (daemon->options & MHD_USE_EPOLL)) 5728 if (MHD_D_IS_USING_EPOLL_ (daemon))
5729 MHD_epoll (daemon, -1); 5729 MHD_epoll (daemon, -1);
5730 else 5730 else
5731#endif 5731#endif
@@ -5876,9 +5876,9 @@ MHD_quiesce_daemon (struct MHD_Daemon *daemon)
5876 { 5876 {
5877 daemon->worker_pool[i].was_quiesced = true; 5877 daemon->worker_pool[i].was_quiesced = true;
5878#ifdef EPOLL_SUPPORT 5878#ifdef EPOLL_SUPPORT
5879 if ( (0 != (daemon->options & MHD_USE_EPOLL)) && 5879 if (MHD_D_IS_USING_EPOLL_ (daemon) &&
5880 (-1 != daemon->worker_pool[i].epoll_fd) && 5880 (-1 != daemon->worker_pool[i].epoll_fd) &&
5881 (daemon->worker_pool[i].listen_socket_in_epoll) ) 5881 (daemon->worker_pool[i].listen_socket_in_epoll) )
5882 { 5882 {
5883 if (0 != epoll_ctl (daemon->worker_pool[i].epoll_fd, 5883 if (0 != epoll_ctl (daemon->worker_pool[i].epoll_fd,
5884 EPOLL_CTL_DEL, 5884 EPOLL_CTL_DEL,
@@ -5899,9 +5899,9 @@ MHD_quiesce_daemon (struct MHD_Daemon *daemon)
5899#endif 5899#endif
5900 daemon->was_quiesced = true; 5900 daemon->was_quiesced = true;
5901#ifdef EPOLL_SUPPORT 5901#ifdef EPOLL_SUPPORT
5902 if ( (0 != (daemon->options & MHD_USE_EPOLL)) && 5902 if (MHD_D_IS_USING_EPOLL_ (daemon) &&
5903 (-1 != daemon->epoll_fd) && 5903 (-1 != daemon->epoll_fd) &&
5904 (daemon->listen_socket_in_epoll) ) 5904 (daemon->listen_socket_in_epoll) )
5905 { 5905 {
5906 if ( (0 != epoll_ctl (daemon->epoll_fd, 5906 if ( (0 != epoll_ctl (daemon->epoll_fd,
5907 EPOLL_CTL_DEL, 5907 EPOLL_CTL_DEL,
@@ -7007,7 +7007,7 @@ setup_epoll_to_listen (struct MHD_Daemon *daemon)
7007 struct epoll_event event; 7007 struct epoll_event event;
7008 MHD_socket ls; 7008 MHD_socket ls;
7009 7009
7010 mhd_assert (0 != (daemon->options & MHD_USE_EPOLL)); 7010 mhd_assert (MHD_D_IS_USING_EPOLL_ (daemon));
7011 mhd_assert (0 == (daemon->options & MHD_USE_THREAD_PER_CONNECTION)); 7011 mhd_assert (0 == (daemon->options & MHD_USE_THREAD_PER_CONNECTION));
7012 mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \ 7012 mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
7013 (MHD_INVALID_SOCKET != (ls = daemon->listen_fd)) || \ 7013 (MHD_INVALID_SOCKET != (ls = daemon->listen_fd)) || \
@@ -7170,7 +7170,8 @@ MHD_start_daemon_va (unsigned int flags,
7170 if (0 != (*pflags & MHD_USE_INTERNAL_POLLING_THREAD)) 7170 if (0 != (*pflags & MHD_USE_INTERNAL_POLLING_THREAD))
7171 *pflags |= MHD_USE_POLL; /* Including thread-per-connection */ 7171 *pflags |= MHD_USE_POLL; /* Including thread-per-connection */
7172#elif defined(EPOLL_SUPPORT) 7172#elif defined(EPOLL_SUPPORT)
7173#warning 'epoll' enabled, while 'poll' not detected. Check configure. 7173 if (0 == (*pflags & MHD_USE_THREAD_PER_CONNECTION))
7174 *pflags |= MHD_USE_EPOLL; /* Including "external select" mode */
7174#else 7175#else
7175 /* No choice: use select() for any mode - do not modify flags */ 7176 /* No choice: use select() for any mode - do not modify flags */
7176#endif 7177#endif
@@ -7328,9 +7329,9 @@ MHD_start_daemon_va (unsigned int flags,
7328 free (daemon); 7329 free (daemon);
7329 return NULL; 7330 return NULL;
7330 } 7331 }
7331 if ( (0 == (*pflags & (MHD_USE_POLL | MHD_USE_EPOLL))) && 7332 if (MHD_D_IS_USING_SELECT_ (daemon) &&
7332 (! MHD_SCKT_FD_FITS_FDSET_ (MHD_itc_r_fd_ (daemon->itc), 7333 (! MHD_SCKT_FD_FITS_FDSET_ (MHD_itc_r_fd_ (daemon->itc),
7333 NULL)) ) 7334 NULL)) )
7334 { 7335 {
7335#ifdef HAVE_MESSAGES 7336#ifdef HAVE_MESSAGES
7336 MHD_DLOG (daemon, 7337 MHD_DLOG (daemon,
@@ -7774,7 +7775,7 @@ MHD_start_daemon_va (unsigned int flags,
7774 _ ("Failed to set nonblocking mode on listening socket: %s\n"), 7775 _ ("Failed to set nonblocking mode on listening socket: %s\n"),
7775 MHD_socket_last_strerr_ ()); 7776 MHD_socket_last_strerr_ ());
7776#endif 7777#endif
7777 if (0 != (*pflags & MHD_USE_EPOLL) 7778 if (MHD_D_IS_USING_EPOLL_ (daemon)
7778#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS) 7779#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
7779 || (daemon->worker_pool_size > 0) 7780 || (daemon->worker_pool_size > 0)
7780#endif 7781#endif
@@ -7792,7 +7793,7 @@ MHD_start_daemon_va (unsigned int flags,
7792 daemon->listen_nonblk = true; 7793 daemon->listen_nonblk = true;
7793 if ( (! MHD_SCKT_FD_FITS_FDSET_ (listen_fd, 7794 if ( (! MHD_SCKT_FD_FITS_FDSET_ (listen_fd,
7794 NULL)) && 7795 NULL)) &&
7795 (0 == (*pflags & (MHD_USE_POLL | MHD_USE_EPOLL)) ) ) 7796 MHD_D_IS_USING_SELECT_ (daemon) )
7796 { 7797 {
7797#ifdef HAVE_MESSAGES 7798#ifdef HAVE_MESSAGES
7798 MHD_DLOG (daemon, 7799 MHD_DLOG (daemon,
@@ -7809,11 +7810,11 @@ MHD_start_daemon_va (unsigned int flags,
7809 daemon->listen_nonblk = false; /* Actually listen socket does not exist */ 7810 daemon->listen_nonblk = false; /* Actually listen socket does not exist */
7810 7811
7811#ifdef EPOLL_SUPPORT 7812#ifdef EPOLL_SUPPORT
7812 if ( (0 != (*pflags & MHD_USE_EPOLL)) 7813 if (MHD_D_IS_USING_EPOLL_ (daemon)
7813#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS) 7814#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
7814 && (0 == daemon->worker_pool_size) 7815 && (0 == daemon->worker_pool_size)
7815#endif 7816#endif
7816 ) 7817 )
7817 { 7818 {
7818 if (0 != (*pflags & MHD_USE_THREAD_PER_CONNECTION)) 7819 if (0 != (*pflags & MHD_USE_THREAD_PER_CONNECTION))
7819 { 7820 {
@@ -7992,9 +7993,9 @@ MHD_start_daemon_va (unsigned int flags,
7992 MHD_mutex_destroy_chk_ (&d->cleanup_connection_mutex); 7993 MHD_mutex_destroy_chk_ (&d->cleanup_connection_mutex);
7993 goto thread_failed; 7994 goto thread_failed;
7994 } 7995 }
7995 if ( (0 == (*pflags & (MHD_USE_POLL | MHD_USE_EPOLL))) && 7996 if (MHD_D_IS_USING_SELECT_ (d) &&
7996 (! MHD_SCKT_FD_FITS_FDSET_ (MHD_itc_r_fd_ (d->itc), 7997 (! MHD_SCKT_FD_FITS_FDSET_ (MHD_itc_r_fd_ (d->itc),
7997 NULL)) ) 7998 NULL)) )
7998 { 7999 {
7999#ifdef HAVE_MESSAGES 8000#ifdef HAVE_MESSAGES
8000 MHD_DLOG (daemon, 8001 MHD_DLOG (daemon,
@@ -8024,8 +8025,8 @@ MHD_start_daemon_va (unsigned int flags,
8024 if (i < leftover_conns) 8025 if (i < leftover_conns)
8025 ++d->connection_limit; 8026 ++d->connection_limit;
8026#ifdef EPOLL_SUPPORT 8027#ifdef EPOLL_SUPPORT
8027 if ( (0 != (*pflags & MHD_USE_EPOLL)) && 8028 if (MHD_D_IS_USING_EPOLL_ (d) &&
8028 (MHD_NO == setup_epoll_to_listen (d)) ) 8029 (MHD_NO == setup_epoll_to_listen (d)) )
8029 { 8030 {
8030 if (MHD_ITC_IS_VALID_ (d->itc)) 8031 if (MHD_ITC_IS_VALID_ (d->itc))
8031 MHD_itc_destroy_chk_ (d->itc); 8032 MHD_itc_destroy_chk_ (d->itc);
@@ -8527,12 +8528,12 @@ MHD_stop_daemon (struct MHD_Daemon *daemon)
8527 MHD_itc_destroy_chk_ (daemon->itc); 8528 MHD_itc_destroy_chk_ (daemon->itc);
8528 8529
8529#ifdef EPOLL_SUPPORT 8530#ifdef EPOLL_SUPPORT
8530 if ( (0 != (daemon->options & MHD_USE_EPOLL)) && 8531 if (MHD_D_IS_USING_EPOLL_ (daemon) &&
8531 (-1 != daemon->epoll_fd) ) 8532 (-1 != daemon->epoll_fd) )
8532 MHD_socket_close_chk_ (daemon->epoll_fd); 8533 MHD_socket_close_chk_ (daemon->epoll_fd);
8533#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) 8534#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
8534 if ( (0 != (daemon->options & MHD_USE_EPOLL)) && 8535 if (MHD_D_IS_USING_EPOLL_ (daemon) &&
8535 (-1 != daemon->epoll_upgrade_fd) ) 8536 (-1 != daemon->epoll_upgrade_fd) )
8536 MHD_socket_close_chk_ (daemon->epoll_upgrade_fd); 8537 MHD_socket_close_chk_ (daemon->epoll_upgrade_fd);
8537#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ 8538#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
8538#endif /* EPOLL_SUPPORT */ 8539#endif /* EPOLL_SUPPORT */