src/server/daemon/webserver.c

changeset 619
4e2bac64c950
parent 584
f3ddd6dc8e7b
child 650
3e4f9cdd70b8
equal deleted inserted replaced
618:e42a8de6d66f 619:4e2bac64c950
282 log_ereport(LOG_INFORM, "webserver shutdown"); 282 log_ereport(LOG_INFORM, "webserver shutdown");
283 283
284 srvctrl_shutdown(); 284 srvctrl_shutdown();
285 } 285 }
286 286
287 static volatile int ws_clean_shutdown = TRUE;
288
289 void webserver_stop() {
290 log_ereport(LOG_INFORM, "webserver stop");
291 ws_clean_shutdown = FALSE;
292 srvctrl_shutdown();
293 }
294
287 void webserver_end() { 295 void webserver_end() {
288 cfgmgr_shutdown(); 296 if(ws_clean_shutdown) {
289 shutdown_threadpools(60); 297 cfgmgr_shutdown();
290 298 shutdown_threadpools(60);
291 shutdown_eventhandlers_wait(); // TODO: timeout 299
292 300 shutdown_eventhandlers_wait(); // TODO: timeout
293 shutdown_logging(); 301 shutdown_logging();
302 }
294 303
295 // execute restart callbacks 304 // execute restart callbacks
296 RestartCallback *re = atrestart; 305 RestartCallback *re = atrestart;
297 RestartCallback *re_next; 306 RestartCallback *re_next;
298 while(re) { 307 while(re) {
299 re->func(re->data); 308 re->func(re->data);
300 re_next = re->next; 309 re_next = re->next;
301 free(re); 310 free(re);
302 re = re_next; 311 re = re_next;
303 } 312 }
304 313
305 webserver_destroy(); 314 if(ws_clean_shutdown) {
315 // TODO: check if previous shutdown was successful
316 webserver_destroy();
317 }
306 } 318 }
307 319
308 int webserver_reconfig() { 320 int webserver_reconfig() {
309 CfgManager mgr; 321 CfgManager mgr;
310 if(cfgmgr_load_config(&mgr) != 0) { 322 if(cfgmgr_load_config(&mgr) != 0) {

mercurial