555:66b0accda0a8 | 556:b036ccad4b49 |
---|---|
246 tmp_priv.ptr, | 246 tmp_priv.ptr, |
247 strerror(errno)); | 247 strerror(errno)); |
248 return -1; | 248 return -1; |
249 } | 249 } |
250 } | 250 } |
251 free(tmp_priv.ptr); | |
251 | 252 |
252 | 253 |
253 // create srvctrl unix domain socket | 254 // create srvctrl unix domain socket |
254 // this socket is used for stop, reconfigure and other operations | 255 // this socket is used for stop, reconfigure and other operations |
255 if(srvctrl_init(cfg)) { | 256 if(srvctrl_init(cfg)) { |
277 | 278 |
278 void webserver_shutdown() { | 279 void webserver_shutdown() { |
279 log_ereport(LOG_INFORM, "webserver shutdown"); | 280 log_ereport(LOG_INFORM, "webserver shutdown"); |
280 | 281 |
281 srvctrl_shutdown(); | 282 srvctrl_shutdown(); |
282 | 283 } |
284 | |
285 void webserver_end() { | |
283 // execute restart callbacks | 286 // execute restart callbacks |
284 RestartCallback *re = atrestart; | 287 RestartCallback *re = atrestart; |
285 while(re) { | 288 while(re) { |
286 re->func(re->data); | 289 re->func(re->data); |
287 re = re->next; | 290 re = re->next; |
288 } | 291 } |
292 | |
293 shutdown_threadpools(); | |
294 | |
295 shutdown_eventhandlers_wait(); | |
296 | |
297 webserver_destroy(); | |
289 } | 298 } |
290 | 299 |
291 int webserver_reconfig() { | 300 int webserver_reconfig() { |
292 CfgManager mgr; | 301 CfgManager mgr; |
293 if(cfgmgr_load_config(&mgr) != 0) { | 302 if(cfgmgr_load_config(&mgr) != 0) { |
324 } else { | 333 } else { |
325 atrestart = cb; | 334 atrestart = cb; |
326 } | 335 } |
327 } | 336 } |
328 | 337 |
338 void webserver_destroy() { | |
339 // free some stuff | |
340 // this is not necessary, because the whole process will exit | |
341 // however it will result in a nicer valgrind output with less | |
342 // memory leaks | |
343 pool_destroy(cfg_get_init_pool()); | |
344 } | |
345 | |
329 int nsapi_runtime_version() { | 346 int nsapi_runtime_version() { |
330 return 303; | 347 return 303; |
331 } | 348 } |
332 | 349 |
333 | 350 |