static void signal_handler(int sig) { if (is_dispatch_thread()) { discovery_stop(); signal(sig, SIG_DFL); raise(sig); } else { post_event(shutdown_event, NULL); } }
void discovery_destroy(discovery_t** self_p) { assert(self_p); if (*self_p) { discovery_t* self = *self_p; if (self->started) { discovery_stop(self); } free(self); *self_p = NULL; } }
static void check_idle_timeout(void * args) { if (list_is_empty(&channel_root)) { idle_count++; if (idle_count > idle_timeout) { trace(LOG_ALWAYS, "No connections for %d seconds, shutting down", idle_timeout); discovery_stop(); cancel_event_loop(); return; } } post_event_with_delay(check_idle_timeout, NULL, 1000000); }
celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) { celix_status_t status = CELIX_SUCCESS; struct activator *activator = userData; status = serviceTracker_close(activator->endpointListenerTracker); status = serviceRegistration_unregister(activator->endpointListenerService); status = discovery_stop(activator->discovery); return status; }
static void shutdown_event(void * args) { discovery_stop(); cancel_event_loop(); }