79 } |
79 } |
80 |
80 |
81 void shutdown_eventhandlers_wait(void) { |
81 void shutdown_eventhandlers_wait(void) { |
82 log_ereport(LOG_INFORM, "shutdown eventhandlers"); |
82 log_ereport(LOG_INFORM, "shutdown eventhandlers"); |
83 |
83 |
84 CxIterator i = cxMapIteratorValues(event_handler_map); |
84 CxMapIterator i = cxMapIteratorValues(event_handler_map); |
85 cx_foreach(EVHandler *, e, i) { |
85 cx_foreach(EVHandler *, e, i) { |
86 evhandler_shutdown(e); |
86 evhandler_shutdown(e); |
87 } |
87 } |
88 |
88 |
89 i = cxMapIteratorValues(event_handler_map); |
89 i = cxMapIteratorValues(event_handler_map); |
90 cx_foreach(EVHandler *, e, i) { |
90 cx_foreach(EVHandler *, e, i) { |
91 evhandler_wait_and_destroy(e); |
91 evhandler_wait_and_destroy(e); |
92 } |
92 } |
93 |
93 |
94 cxMapDestroy(event_handler_map); |
94 cxMapFree(event_handler_map); |
95 |
95 |
96 log_ereport(LOG_INFORM, "all eventhandlers closed"); |
96 log_ereport(LOG_INFORM, "all eventhandlers closed"); |
97 } |
97 } |
98 |
98 |
99 void evhandler_shutdown(EVHandler *h) { |
99 void evhandler_shutdown(EVHandler *h) { |