celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) { celix_status_t status = CELIX_SUCCESS; struct activator *activator = userData; if (serviceTracker_close(activator->remoteServiceAdminTracker) == CELIX_SUCCESS) { serviceTracker_destroy(activator->remoteServiceAdminTracker); } if (serviceTracker_close(activator->endpointListenerTracker) == CELIX_SUCCESS) { serviceTracker_destroy(activator->endpointListenerTracker); } bundleContext_removeServiceListener(context, activator->serviceListener); free(activator->serviceListener); serviceRegistration_unregister(activator->hook); free(activator->hookService); serviceRegistration_unregister(activator->endpointListenerService); free(activator->endpointListener); serviceRegistration_unregister(activator->scopeReg); topologyManager_closeImports(activator->manager); return status; }
celix_status_t refining_driver_cleanup_device(refining_driver_device_pt handler) { celix_status_t status = CELIX_SUCCESS;; refining_driver_device_pt device = handler; if (device != NULL) { if (device->listener != NULL) { bundleContext_removeServiceListener(device->driver->context, device->listener); } } return status; }
celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) { celix_status_t status; shell_tui_activator_pt act = (shell_tui_activator_pt) userData; status = bundleContext_removeServiceListener(context, act->listener); if (status == CELIX_SUCCESS) { apr_status_t join; free(act->listener); act->listener = NULL; act->context = NULL; act->running = false; apr_thread_join(&join, act->runnable); } return status; }
celix_status_t serviceTracker_destroy(service_tracker_pt tracker) { if (tracker->listener != NULL) { bundleContext_removeServiceListener(tracker->context, tracker->listener); } if (tracker->customizer != NULL) { serviceTrackerCustomizer_destroy(tracker->customizer); } arrayList_destroy(tracker->tracked); if (tracker->listener != NULL) { free (tracker->listener); } free(tracker->filter); free(tracker); return CELIX_SUCCESS; }
celix_status_t serviceTracker_close(service_tracker_pt tracker) { celix_status_t status = CELIX_SUCCESS; status = bundleContext_removeServiceListener(tracker->context, tracker->listener); if (status == CELIX_SUCCESS) { array_list_pt refs = serviceTracker_getServiceReferences(tracker); if (refs != NULL) { unsigned int i; for (i = 0; i < arrayList_size(refs); i++) { service_reference_pt ref = (service_reference_pt) arrayList_get(refs, i); status = serviceTracker_untrack(tracker, ref, NULL); } } arrayList_destroy(refs); } framework_logIfError(logger, status, NULL, "Cannot close tracker"); return status; }