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 bundleActivator_create(bundle_context_pt context, void **userData) { celix_status_t status = CELIX_SUCCESS; struct activator *activator; activator = calloc(1, sizeof(*activator)); if (!activator) { status = CELIX_ENOMEM; } else{ *userData = activator; status = pubsubAdmin_create(context, &(activator->admin)); if(status == CELIX_SUCCESS){ service_tracker_customizer_pt customizer = NULL; status = serviceTrackerCustomizer_create(activator->admin, NULL, pubsubAdmin_serializerAdded, NULL, pubsubAdmin_serializerRemoved, &customizer); if(status == CELIX_SUCCESS){ status = serviceTracker_create(context, PUBSUB_SERIALIZER_SERVICE, customizer, &(activator->serializerTracker)); if(status != CELIX_SUCCESS){ serviceTrackerCustomizer_destroy(customizer); pubsubAdmin_destroy(activator->admin); } } else{ pubsubAdmin_destroy(activator->admin); } } } return status; }