diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-07-29 19:23:35 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-07-29 19:30:27 +0200 |
commit | 40bf201dc53465be1d2805039ef5963a21e44c08 (patch) | |
tree | c3cb5639c71dc8d30739c3770d8c7646259a0bc5 /src/microhttpd/daemon.c | |
parent | 1aaff72582b6093f0dcf8c187d125e5fca2d2e8b (diff) | |
download | libmicrohttpd-40bf201dc53465be1d2805039ef5963a21e44c08.tar.gz libmicrohttpd-40bf201dc53465be1d2805039ef5963a21e44c08.zip |
indentation fixes, adding test_upgrade_large.c test for issue reported by Viet
Diffstat (limited to 'src/microhttpd/daemon.c')
-rw-r--r-- | src/microhttpd/daemon.c | 167 |
1 files changed, 84 insertions, 83 deletions
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c index b312c305..3fc992de 100644 --- a/src/microhttpd/daemon.c +++ b/src/microhttpd/daemon.c | |||
@@ -4178,28 +4178,29 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon) | |||
4178 | struct MHD_UpgradeResponseHandle * prev; | 4178 | struct MHD_UpgradeResponseHandle * prev; |
4179 | 4179 | ||
4180 | num_events = MAX_EVENTS; | 4180 | num_events = MAX_EVENTS; |
4181 | while (MAX_EVENTS == num_events) | 4181 | while (0 != num_events) |
4182 | { | 4182 | { |
4183 | unsigned int i; | 4183 | unsigned int i; |
4184 | /* update event masks */ | 4184 | /* update event masks */ |
4185 | num_events = epoll_wait (daemon->epoll_upgrade_fd, | 4185 | num_events = epoll_wait (daemon->epoll_upgrade_fd, |
4186 | events, | 4186 | events, |
4187 | MAX_EVENTS, | 4187 | MAX_EVENTS, |
4188 | 0); | 4188 | 0); |
4189 | if (-1 == num_events) | 4189 | if (-1 == num_events) |
4190 | { | 4190 | { |
4191 | const int err = MHD_socket_get_error_ (); | 4191 | const int err = MHD_socket_get_error_ (); |
4192 | |||
4192 | if (MHD_SCKT_ERR_IS_EINTR_ (err)) | 4193 | if (MHD_SCKT_ERR_IS_EINTR_ (err)) |
4193 | return MHD_YES; | 4194 | return MHD_YES; |
4194 | #ifdef HAVE_MESSAGES | 4195 | #ifdef HAVE_MESSAGES |
4195 | MHD_DLOG (daemon, | 4196 | MHD_DLOG (daemon, |
4196 | _("Call to epoll_wait failed: %s\n"), | 4197 | _("Call to epoll_wait failed: %s\n"), |
4197 | MHD_socket_strerr_ (err)); | 4198 | MHD_socket_strerr_ (err)); |
4198 | #endif | 4199 | #endif |
4199 | return MHD_NO; | 4200 | return MHD_NO; |
4200 | } | 4201 | } |
4201 | for (i = 0; i < (unsigned int) num_events; i++) | 4202 | for (i = 0; i < (unsigned int) num_events; i++) |
4202 | { | 4203 | { |
4203 | struct UpgradeEpollHandle * const ueh = events[i].data.ptr; | 4204 | struct UpgradeEpollHandle * const ueh = events[i].data.ptr; |
4204 | struct MHD_UpgradeResponseHandle * const urh = ueh->urh; | 4205 | struct MHD_UpgradeResponseHandle * const urh = ueh->urh; |
4205 | bool new_err_state = false; | 4206 | bool new_err_state = false; |
@@ -4217,24 +4218,24 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon) | |||
4217 | 4218 | ||
4218 | if ( (0 == (ueh->celi & MHD_EPOLL_STATE_ERROR)) && | 4219 | if ( (0 == (ueh->celi & MHD_EPOLL_STATE_ERROR)) && |
4219 | (0 != (events[i].events & (EPOLLERR | EPOLLPRI))) ) | 4220 | (0 != (events[i].events & (EPOLLERR | EPOLLPRI))) ) |
4220 | { | 4221 | { |
4221 | /* Process new error state only one time | 4222 | /* Process new error state only one time |
4222 | * and avoid continuously marking this connection | 4223 | * and avoid continuously marking this connection |
4223 | * as 'ready'. */ | 4224 | * as 'ready'. */ |
4224 | ueh->celi |= MHD_EPOLL_STATE_ERROR; | 4225 | ueh->celi |= MHD_EPOLL_STATE_ERROR; |
4225 | new_err_state = true; | 4226 | new_err_state = true; |
4226 | } | 4227 | } |
4227 | 4228 | ||
4228 | if (! urh->in_eready_list) | 4229 | if (! urh->in_eready_list) |
4229 | { | 4230 | { |
4230 | if (new_err_state || | 4231 | if (new_err_state || |
4231 | is_urh_ready(urh)) | 4232 | is_urh_ready(urh)) |
4232 | { | 4233 | { |
4233 | EDLL_insert (daemon->eready_urh_head, | 4234 | EDLL_insert (daemon->eready_urh_head, |
4234 | daemon->eready_urh_tail, | 4235 | daemon->eready_urh_tail, |
4235 | urh); | 4236 | urh); |
4236 | urh->in_eready_list = true; | 4237 | urh->in_eready_list = true; |
4237 | } | 4238 | } |
4238 | } | 4239 | } |
4239 | } | 4240 | } |
4240 | } | 4241 | } |
@@ -4246,8 +4247,8 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon) | |||
4246 | if (! is_urh_ready(pos)) | 4247 | if (! is_urh_ready(pos)) |
4247 | { | 4248 | { |
4248 | EDLL_remove (daemon->eready_urh_head, | 4249 | EDLL_remove (daemon->eready_urh_head, |
4249 | daemon->eready_urh_tail, | 4250 | daemon->eready_urh_tail, |
4250 | pos); | 4251 | pos); |
4251 | pos->in_eready_list = false; | 4252 | pos->in_eready_list = false; |
4252 | } | 4253 | } |
4253 | /* Finished forwarding? */ | 4254 | /* Finished forwarding? */ |
@@ -4287,7 +4288,7 @@ static const char * const epoll_itc_marker = "itc_marker"; | |||
4287 | */ | 4288 | */ |
4288 | static int | 4289 | static int |
4289 | MHD_epoll (struct MHD_Daemon *daemon, | 4290 | MHD_epoll (struct MHD_Daemon *daemon, |
4290 | int may_block) | 4291 | int may_block) |
4291 | { | 4292 | { |
4292 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) | 4293 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) |
4293 | static const char * const upgrade_marker = "upgrade_ptr"; | 4294 | static const char * const upgrade_marker = "upgrade_ptr"; |
@@ -4302,7 +4303,7 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4302 | unsigned int i; | 4303 | unsigned int i; |
4303 | MHD_socket ls; | 4304 | MHD_socket ls; |
4304 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) | 4305 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) |
4305 | int run_upgraded = MHD_NO; | 4306 | bool run_upgraded = false; |
4306 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ | 4307 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ |
4307 | 4308 | ||
4308 | if (-1 == daemon->epoll_fd) | 4309 | if (-1 == daemon->epoll_fd) |
@@ -4318,31 +4319,31 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4318 | event.events = EPOLLIN; | 4319 | event.events = EPOLLIN; |
4319 | event.data.ptr = daemon; | 4320 | event.data.ptr = daemon; |
4320 | if (0 != epoll_ctl (daemon->epoll_fd, | 4321 | if (0 != epoll_ctl (daemon->epoll_fd, |
4321 | EPOLL_CTL_ADD, | 4322 | EPOLL_CTL_ADD, |
4322 | ls, | 4323 | ls, |
4323 | &event)) | 4324 | &event)) |
4324 | { | 4325 | { |
4325 | #ifdef HAVE_MESSAGES | 4326 | #ifdef HAVE_MESSAGES |
4326 | MHD_DLOG (daemon, | 4327 | MHD_DLOG (daemon, |
4327 | _("Call to epoll_ctl failed: %s\n"), | 4328 | _("Call to epoll_ctl failed: %s\n"), |
4328 | MHD_socket_last_strerr_ ()); | 4329 | MHD_socket_last_strerr_ ()); |
4329 | #endif | 4330 | #endif |
4330 | return MHD_NO; | 4331 | return MHD_NO; |
4331 | } | 4332 | } |
4332 | daemon->listen_socket_in_epoll = true; | 4333 | daemon->listen_socket_in_epoll = true; |
4333 | } | 4334 | } |
4334 | if ( (daemon->was_quiesced) && | 4335 | if ( (daemon->was_quiesced) && |
4335 | (daemon->listen_socket_in_epoll) ) | 4336 | (daemon->listen_socket_in_epoll) ) |
4336 | { | 4337 | { |
4337 | if ( (0 != epoll_ctl (daemon->epoll_fd, | 4338 | if ( (0 != epoll_ctl (daemon->epoll_fd, |
4338 | EPOLL_CTL_DEL, | 4339 | EPOLL_CTL_DEL, |
4339 | ls, | 4340 | ls, |
4340 | NULL)) && | 4341 | NULL)) && |
4341 | (ENOENT != errno) ) /* ENOENT can happen due to race with | 4342 | (ENOENT != errno) ) /* ENOENT can happen due to race with |
4342 | #MHD_quiesce_daemon() */ | 4343 | #MHD_quiesce_daemon() */ |
4343 | MHD_PANIC ("Failed to remove listen FD from epoll set\n"); | 4344 | MHD_PANIC ("Failed to remove listen FD from epoll set\n"); |
4344 | daemon->listen_socket_in_epoll = false; | 4345 | daemon->listen_socket_in_epoll = false; |
4345 | } | 4346 | } |
4346 | 4347 | ||
4347 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) | 4348 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) |
4348 | if ( (! daemon->upgrade_fd_in_epoll) && | 4349 | if ( (! daemon->upgrade_fd_in_epoll) && |
@@ -4351,17 +4352,17 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4351 | event.events = EPOLLIN | EPOLLOUT; | 4352 | event.events = EPOLLIN | EPOLLOUT; |
4352 | event.data.ptr = (void *) upgrade_marker; | 4353 | event.data.ptr = (void *) upgrade_marker; |
4353 | if (0 != epoll_ctl (daemon->epoll_fd, | 4354 | if (0 != epoll_ctl (daemon->epoll_fd, |
4354 | EPOLL_CTL_ADD, | 4355 | EPOLL_CTL_ADD, |
4355 | daemon->epoll_upgrade_fd, | 4356 | daemon->epoll_upgrade_fd, |
4356 | &event)) | 4357 | &event)) |
4357 | { | 4358 | { |
4358 | #ifdef HAVE_MESSAGES | 4359 | #ifdef HAVE_MESSAGES |
4359 | MHD_DLOG (daemon, | 4360 | MHD_DLOG (daemon, |
4360 | _("Call to epoll_ctl failed: %s\n"), | 4361 | _("Call to epoll_ctl failed: %s\n"), |
4361 | MHD_socket_last_strerr_ ()); | 4362 | MHD_socket_last_strerr_ ()); |
4362 | #endif | 4363 | #endif |
4363 | return MHD_NO; | 4364 | return MHD_NO; |
4364 | } | 4365 | } |
4365 | daemon->upgrade_fd_in_epoll = true; | 4366 | daemon->upgrade_fd_in_epoll = true; |
4366 | } | 4367 | } |
4367 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ | 4368 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ |
@@ -4373,10 +4374,10 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4373 | /* we're at the connection limit, disable listen socket | 4374 | /* we're at the connection limit, disable listen socket |
4374 | for event loop for now */ | 4375 | for event loop for now */ |
4375 | if (0 != epoll_ctl (daemon->epoll_fd, | 4376 | if (0 != epoll_ctl (daemon->epoll_fd, |
4376 | EPOLL_CTL_DEL, | 4377 | EPOLL_CTL_DEL, |
4377 | ls, | 4378 | ls, |
4378 | NULL)) | 4379 | NULL)) |
4379 | MHD_PANIC (_("Failed to remove listen FD from epoll set\n")); | 4380 | MHD_PANIC (_("Failed to remove listen FD from epoll set\n")); |
4380 | daemon->listen_socket_in_epoll = false; | 4381 | daemon->listen_socket_in_epoll = false; |
4381 | } | 4382 | } |
4382 | 4383 | ||
@@ -4388,14 +4389,14 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4388 | { | 4389 | { |
4389 | if (MHD_YES == MHD_get_timeout (daemon, | 4390 | if (MHD_YES == MHD_get_timeout (daemon, |
4390 | &timeout_ll)) | 4391 | &timeout_ll)) |
4391 | { | 4392 | { |
4392 | if (timeout_ll >= (MHD_UNSIGNED_LONG_LONG) INT_MAX) | 4393 | if (timeout_ll >= (MHD_UNSIGNED_LONG_LONG) INT_MAX) |
4393 | timeout_ms = INT_MAX; | 4394 | timeout_ms = INT_MAX; |
4394 | else | 4395 | else |
4395 | timeout_ms = (int) timeout_ll; | 4396 | timeout_ms = (int) timeout_ll; |
4396 | } | 4397 | } |
4397 | else | 4398 | else |
4398 | timeout_ms = -1; | 4399 | timeout_ms = -1; |
4399 | } | 4400 | } |
4400 | else | 4401 | else |
4401 | timeout_ms = 0; | 4402 | timeout_ms = 0; |
@@ -4414,33 +4415,33 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4414 | { | 4415 | { |
4415 | /* update event masks */ | 4416 | /* update event masks */ |
4416 | num_events = epoll_wait (daemon->epoll_fd, | 4417 | num_events = epoll_wait (daemon->epoll_fd, |
4417 | events, | 4418 | events, |
4418 | MAX_EVENTS, | 4419 | MAX_EVENTS, |
4419 | timeout_ms); | 4420 | timeout_ms); |
4420 | if (-1 == num_events) | 4421 | if (-1 == num_events) |
4421 | { | 4422 | { |
4422 | const int err = MHD_socket_get_error_ (); | 4423 | const int err = MHD_socket_get_error_ (); |
4423 | if (MHD_SCKT_ERR_IS_EINTR_ (err)) | 4424 | if (MHD_SCKT_ERR_IS_EINTR_ (err)) |
4424 | return MHD_YES; | 4425 | return MHD_YES; |
4425 | #ifdef HAVE_MESSAGES | 4426 | #ifdef HAVE_MESSAGES |
4426 | MHD_DLOG (daemon, | 4427 | MHD_DLOG (daemon, |
4427 | _("Call to epoll_wait failed: %s\n"), | 4428 | _("Call to epoll_wait failed: %s\n"), |
4428 | MHD_socket_strerr_ (err)); | 4429 | MHD_socket_strerr_ (err)); |
4429 | #endif | 4430 | #endif |
4430 | return MHD_NO; | 4431 | return MHD_NO; |
4431 | } | 4432 | } |
4432 | for (i=0;i<(unsigned int) num_events;i++) | 4433 | for (i=0;i<(unsigned int) num_events;i++) |
4433 | { | 4434 | { |
4434 | /* First, check for the values of `ptr` that would indicate | 4435 | /* First, check for the values of `ptr` that would indicate |
4435 | that this event is not about a normal connection. */ | 4436 | that this event is not about a normal connection. */ |
4436 | if (NULL == events[i].data.ptr) | 4437 | if (NULL == events[i].data.ptr) |
4437 | continue; /* shutdown signal! */ | 4438 | continue; /* shutdown signal! */ |
4438 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) | 4439 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) |
4439 | if (upgrade_marker == events[i].data.ptr) | 4440 | if (upgrade_marker == events[i].data.ptr) |
4440 | { | 4441 | { |
4441 | /* activity on an upgraded connection, we process | 4442 | /* activity on an upgraded connection, we process |
4442 | those in a separate epoll() */ | 4443 | those in a separate epoll() */ |
4443 | run_upgraded = MHD_YES; | 4444 | run_upgraded = true; |
4444 | continue; | 4445 | continue; |
4445 | } | 4446 | } |
4446 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ | 4447 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ |
@@ -4451,8 +4452,8 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4451 | MHD_itc_clear_ (daemon->itc); | 4452 | MHD_itc_clear_ (daemon->itc); |
4452 | continue; | 4453 | continue; |
4453 | } | 4454 | } |
4454 | if (daemon == events[i].data.ptr) | 4455 | if (daemon == events[i].data.ptr) |
4455 | { | 4456 | { |
4456 | /* Check for error conditions on listen socket. */ | 4457 | /* Check for error conditions on listen socket. */ |
4457 | /* FIXME: Initiate MHD_quiesce_daemon() to prevent busy waiting? */ | 4458 | /* FIXME: Initiate MHD_quiesce_daemon() to prevent busy waiting? */ |
4458 | if (0 == (events[i].events & (EPOLLERR | EPOLLHUP))) | 4459 | if (0 == (events[i].events & (EPOLLERR | EPOLLHUP))) |
@@ -4467,9 +4468,9 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4467 | (daemon->connections < daemon->connection_limit) && | 4468 | (daemon->connections < daemon->connection_limit) && |
4468 | (! daemon->at_limit) ) | 4469 | (! daemon->at_limit) ) |
4469 | series_length++; | 4470 | series_length++; |
4470 | } | 4471 | } |
4471 | continue; | 4472 | continue; |
4472 | } | 4473 | } |
4473 | /* this is an event relating to a 'normal' connection, | 4474 | /* this is an event relating to a 'normal' connection, |
4474 | remember the event and if appropriate mark the | 4475 | remember the event and if appropriate mark the |
4475 | connection as 'eready'. */ | 4476 | connection as 'eready'. */ |
@@ -4518,7 +4519,7 @@ MHD_epoll (struct MHD_Daemon *daemon, | |||
4518 | } | 4519 | } |
4519 | 4520 | ||
4520 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) | 4521 | #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT) |
4521 | if (MHD_YES == run_upgraded) | 4522 | if (run_upgraded) |
4522 | run_epoll_for_upgrade (daemon); | 4523 | run_epoll_for_upgrade (daemon); |
4523 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ | 4524 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ |
4524 | 4525 | ||
@@ -4606,22 +4607,22 @@ MHD_run (struct MHD_Daemon *daemon) | |||
4606 | (0 != (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) ) | 4607 | (0 != (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) ) |
4607 | return MHD_NO; | 4608 | return MHD_NO; |
4608 | if (0 != (daemon->options & MHD_USE_POLL)) | 4609 | if (0 != (daemon->options & MHD_USE_POLL)) |
4609 | { | 4610 | { |
4610 | MHD_poll (daemon, MHD_NO); | 4611 | MHD_poll (daemon, MHD_NO); |
4611 | MHD_cleanup_connections (daemon); | 4612 | MHD_cleanup_connections (daemon); |
4612 | } | 4613 | } |
4613 | #ifdef EPOLL_SUPPORT | 4614 | #ifdef EPOLL_SUPPORT |
4614 | else if (0 != (daemon->options & MHD_USE_EPOLL)) | 4615 | else if (0 != (daemon->options & MHD_USE_EPOLL)) |
4615 | { | 4616 | { |
4616 | MHD_epoll (daemon, MHD_NO); | 4617 | MHD_epoll (daemon, MHD_NO); |
4617 | MHD_cleanup_connections (daemon); | 4618 | MHD_cleanup_connections (daemon); |
4618 | } | 4619 | } |
4619 | #endif | 4620 | #endif |
4620 | else | 4621 | else |
4621 | { | 4622 | { |
4622 | MHD_select (daemon, MHD_NO); | 4623 | MHD_select (daemon, MHD_NO); |
4623 | /* MHD_select does MHD_cleanup_connections already */ | 4624 | /* MHD_select does MHD_cleanup_connections already */ |
4624 | } | 4625 | } |
4625 | return MHD_YES; | 4626 | return MHD_YES; |
4626 | } | 4627 | } |
4627 | 4628 | ||
@@ -6494,10 +6495,10 @@ thread_failed: | |||
6494 | if (daemon->upgrade_fd_in_epoll) | 6495 | if (daemon->upgrade_fd_in_epoll) |
6495 | { | 6496 | { |
6496 | if (0 != epoll_ctl (daemon->epoll_fd, | 6497 | if (0 != epoll_ctl (daemon->epoll_fd, |
6497 | EPOLL_CTL_DEL, | 6498 | EPOLL_CTL_DEL, |
6498 | daemon->epoll_upgrade_fd, | 6499 | daemon->epoll_upgrade_fd, |
6499 | NULL)) | 6500 | NULL)) |
6500 | MHD_PANIC (_("Failed to remove FD from epoll set\n")); | 6501 | MHD_PANIC (_("Failed to remove FD from epoll set\n")); |
6501 | daemon->upgrade_fd_in_epoll = false; | 6502 | daemon->upgrade_fd_in_epoll = false; |
6502 | } | 6503 | } |
6503 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ | 6504 | #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */ |