celix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From abroekh...@apache.org
Subject svn commit: r1646648 - in /celix/trunk: dependency_manager_2/ dependency_manager_2/private/include/ dependency_manager_2/private/src/ dependency_manager_2/public/include/ examples/ examples/whiteboard/publisherA/ examples/whiteboard/publisherB/ example...
Date Fri, 19 Dec 2014 08:18:10 GMT
Author: abroekhuis
Date: Fri Dec 19 08:18:09 2014
New Revision: 1646648

URL: http://svn.apache.org/r1646648
Log:
Update dep manager code, updated example for testing.

Added:
    celix/trunk/dependency_manager_2/private/src/dm_event.c
Modified:
    celix/trunk/dependency_manager_2/CMakeLists.txt
    celix/trunk/dependency_manager_2/private/include/dm_component_impl.h
    celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h
    celix/trunk/dependency_manager_2/private/src/dm_activator_base.c
    celix/trunk/dependency_manager_2/private/src/dm_component_impl.c
    celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c
    celix/trunk/dependency_manager_2/public/include/dm_activator_base.h
    celix/trunk/dependency_manager_2/public/include/dm_component.h
    celix/trunk/dependency_manager_2/public/include/dm_event.h
    celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h
    celix/trunk/examples/CMakeLists.txt
    celix/trunk/examples/deploy.cmake
    celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt
    celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt
    celix/trunk/examples/whiteboard/tracker/CMakeLists.txt
    celix/trunk/examples/whiteboard/tracker/private/src/activator.c
    celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt
    celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h
    celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c
    celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c

Modified: celix/trunk/dependency_manager_2/CMakeLists.txt
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/CMakeLists.txt (original)
+++ celix/trunk/dependency_manager_2/CMakeLists.txt Fri Dec 19 08:18:09 2014
@@ -36,7 +36,11 @@ if (DEPENDENCY_MANAGER2)
     )
     
     add_library(dependency_manager2 STATIC 
-    	private/src/dm_activator_base private/src/dm_component_impl private/src/dm_dependency_manager_impl)
+    	private/src/dm_activator_base 
+    	private/src/dm_component_impl 
+    	private/src/dm_service_dependency
+    	private/src/dm_event
+    	private/src/dm_dependency_manager_impl)
    	include_directories("public/include")
    	include_directories("private/include")
     include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")

Modified: celix/trunk/dependency_manager_2/private/include/dm_component_impl.h
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/include/dm_component_impl.h?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/private/include/dm_component_impl.h (original)
+++ celix/trunk/dependency_manager_2/private/include/dm_component_impl.h Fri Dec 19 08:18:09
2014
@@ -87,4 +87,6 @@ celix_status_t component_getBundleContex
 
 celix_status_t component_handleEvent(dm_component_pt component, dm_service_dependency_pt
dependency, dm_event_pt event);
 
+celix_status_t component_setCallbacks(dm_component_pt component, init_fpt init, start_fpt
start, stop_fpt, destroy_fpt);
+
 #endif /* COMPONENT_IMPL_H_ */

Modified: celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h (original)
+++ celix/trunk/dependency_manager_2/private/include/dm_service_dependency_impl.h Fri Dec
19 08:18:09 2014
@@ -29,6 +29,9 @@
 
 #include <stdbool.h>
 
+#include "service_tracker.h"
+#include "service_tracker_customizer.h"
+
 #include "dm_service_dependency.h"
 
 typedef celix_status_t (*service_add_fpt)(void *handle, service_reference_pt reference, void
*service);

Modified: celix/trunk/dependency_manager_2/private/src/dm_activator_base.c
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/src/dm_activator_base.c?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/private/src/dm_activator_base.c (original)
+++ celix/trunk/dependency_manager_2/private/src/dm_activator_base.c Fri Dec 19 08:18:09 2014
@@ -1,7 +1,8 @@
-#include "dm_activator_base.h"
-
 #include <stdlib.h>
 
+#include "bundle_activator.h"
+#include "dm_activator_base.h"
+
 
 struct dm_dependency_activator_base {
 	dm_dependency_manager_pt manager;
@@ -35,7 +36,7 @@ celix_status_t bundleActivator_start(voi
 	status = dependencyManager_create(dependency_activator->context, &dependency_activator->manager);
 
 	if (status == CELIX_SUCCESS) {
-		dm_init(dependency_activator->manager, context, dependency_activator->userData);
+		dm_init(dependency_activator->userData, context, dependency_activator->manager);
 	}
 
 	return status;
@@ -45,7 +46,7 @@ celix_status_t bundleActivator_stop(void
 	celix_status_t status = CELIX_SUCCESS;
 	dependency_activator_base_pt dependency_activator = (dependency_activator_base_pt) userData;
 
-	dm_destroy(dependency_activator->manager, dependency_activator->context, dependency_activator->userData);
+	dm_destroy(dependency_activator->userData, dependency_activator->context, dependency_activator->manager);
 
 	dependency_activator->userData = NULL;
 	dependency_activator->manager = NULL;

Modified: celix/trunk/dependency_manager_2/private/src/dm_component_impl.c
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/src/dm_component_impl.c?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/private/src/dm_component_impl.c (original)
+++ celix/trunk/dependency_manager_2/private/src/dm_component_impl.c Fri Dec 19 08:18:09 2014
@@ -93,6 +93,8 @@ celix_status_t component_create(bundle_c
         (*component)->context = context;
         (*component)->manager = manager;
 
+        (*component)->state = DM_CMP_STATE_INACTIVE;
+
         (*component)->callbackInit = NULL;
         (*component)->callbackStart = NULL;
         (*component)->callbackStop = NULL;
@@ -105,6 +107,7 @@ celix_status_t component_create(bundle_c
         pthread_mutex_init(&(*component)->mutex, NULL);
 
         (*component)->isStarted = false;
+        (*component)->active = false;
         (*component)->dependencyEvents = hashMap_create(NULL, NULL, NULL, NULL);
 
         (*component)->executor = NULL;
@@ -126,13 +129,14 @@ celix_status_t component_addServiceDepen
     while (dependency != NULL) {
         arrayList_add(dependenciesList, dependency);
 
-        executor_executeTask(component->executor, component, component_addTask, dependenciesList);
 
         dependency = va_arg(dependencies, dm_service_dependency_pt);
     }
 
     va_end(dependencies);
 
+	executor_executeTask(component->executor, component, component_addTask, dependenciesList);
+
     return status;
 }
 
@@ -188,6 +192,7 @@ celix_status_t component_removeTask(dm_c
 celix_status_t component_start(dm_component_pt component) {
     celix_status_t status = CELIX_SUCCESS;
 
+    component->active = true;
     executor_executeTask(component->executor, component, component_startTask, NULL);
 
     return status;
@@ -205,6 +210,7 @@ celix_status_t component_startTask(dm_co
 celix_status_t component_stop(dm_component_pt component) {
     celix_status_t status = CELIX_SUCCESS;
 
+    component->active = false;
     executor_executeTask(component->executor, component, component_stopTask, NULL);
 
     return status;
@@ -273,6 +279,10 @@ celix_status_t component_handleAdded(dm_
     celix_status_t status = CELIX_SUCCESS;
 
     array_list_pt events = hashMap_get(component->dependencyEvents, dependency);
+    if (events == NULL) {
+    	arrayList_create(&events);
+    	hashMap_put(component->dependencyEvents, dependency, events);
+    }
     arrayList_add(events, event);
     serviceDependency_setAvailable(dependency, true);
 
@@ -524,6 +534,8 @@ celix_status_t component_calculateNewSta
         return status;
     }
 
+    *newState = currentState;
+
     return status;
 }
 
@@ -544,7 +556,9 @@ celix_status_t component_performTransiti
         component_invokeAddRequiredDependencies(component);
 //        component_invokeAutoConfigDependencies(component);
         dm_component_state_pt stateBeforeCallingInit = component->state;
-        component->callbackInit(component->implementation);
+        if (component->callbackInit) {
+        	component->callbackInit(component->implementation);
+        }
         if (stateBeforeCallingInit == component->state) {
 //            #TODO Add listener support
 //            notifyListeners(newState); // init did not change current state, we can notify
about this new state
@@ -556,7 +570,9 @@ celix_status_t component_performTransiti
     if (oldState == DM_CMP_STATE_INSTANTIATED_AND_WAITING_FOR_REQUIRED && newState
== DM_CMP_STATE_TRACKING_OPTIONAL) {
         component_invokeAddRequiredInstanceBoundDependencies(component);
 //        component_invokeAutoConfigInstanceBoundDependencies(component);
-        component->callbackStart(component->implementation);
+        if (component->callbackStart) {
+        	component->callbackStart(component->implementation);
+        }
         component_invokeAddOptionalDependencies(component);
         component_registerService(component);
 //            #TODO Add listener support
@@ -567,7 +583,9 @@ celix_status_t component_performTransiti
     if (oldState == DM_CMP_STATE_TRACKING_OPTIONAL && newState == DM_CMP_STATE_INSTANTIATED_AND_WAITING_FOR_REQUIRED)
{
         component_unregisterService(component);
         component_invokeRemoveOptionalDependencies(component);
-        component->callbackStop(component->implementation);
+        if (component->callbackStop) {
+        	component->callbackStop(component->implementation);
+        }
         component_invokeRemoveInstanceBoundDependencies(component);
 //            #TODO Add listener support
 //        notifyListeners(newState);
@@ -576,7 +594,9 @@ celix_status_t component_performTransiti
     }
 
     if (oldState == DM_CMP_STATE_INSTANTIATED_AND_WAITING_FOR_REQUIRED && newState
== DM_CMP_STATE_WAITING_FOR_REQUIRED) {
-        component->callbackDestroy(component->implementation);
+    	if (component->callbackDestroy) {
+    		component->callbackDestroy(component->implementation);
+    	}
         component_invokeRemoveRequiredDependencies(component);
 //            #TODO Add listener support
 //        notifyListeners(newState);
@@ -666,9 +686,11 @@ celix_status_t component_invokeAddRequir
 
         if (required && !instanceBound) {
             array_list_pt events = hashMap_get(component->dependencyEvents, dependency);
-            for (int i = 0; i < arrayList_size(events); i++) {
-                dm_event_pt event = arrayList_get(events, i);
-                serviceDependency_invokeAdd(dependency, event);
+            if (events) {
+				for (int i = 0; i < arrayList_size(events); i++) {
+					dm_event_pt event = arrayList_get(events, i);
+					serviceDependency_invokeAdd(dependency, event);
+				}
             }
         }
     }
@@ -690,9 +712,11 @@ celix_status_t component_invokeAddRequir
 
         if (instanceBound && required) {
             array_list_pt events = hashMap_get(component->dependencyEvents, dependency);
-            for (int i = 0; i < arrayList_size(events); i++) {
-                dm_event_pt event = arrayList_get(events, i);
-                serviceDependency_invokeAdd(dependency, event);
+            if (events) {
+				for (int i = 0; i < arrayList_size(events); i++) {
+					dm_event_pt event = arrayList_get(events, i);
+					serviceDependency_invokeAdd(dependency, event);
+				}
             }
         }
     }
@@ -712,9 +736,11 @@ celix_status_t component_invokeAddOption
 
         if (!required) {
             array_list_pt events = hashMap_get(component->dependencyEvents, dependency);
-            for (int i = 0; i < arrayList_size(events); i++) {
-                dm_event_pt event = arrayList_get(events, i);
-                serviceDependency_invokeAdd(dependency, event);
+            if (events) {
+				for (int i = 0; i < arrayList_size(events); i++) {
+					dm_event_pt event = arrayList_get(events, i);
+					serviceDependency_invokeAdd(dependency, event);
+				}
             }
         }
     }
@@ -734,9 +760,11 @@ celix_status_t component_invokeRemoveOpt
 
         if (!required) {
             array_list_pt events = hashMap_get(component->dependencyEvents, dependency);
-            for (int i = 0; i < arrayList_size(events); i++) {
-                dm_event_pt event = arrayList_get(events, i);
-                serviceDependency_invokeRemove(dependency, event);
+            if (events) {
+				for (int i = 0; i < arrayList_size(events); i++) {
+					dm_event_pt event = arrayList_get(events, i);
+					serviceDependency_invokeRemove(dependency, event);
+				}
             }
         }
     }
@@ -756,9 +784,11 @@ celix_status_t component_invokeRemoveIns
 
         if (instanceBound) {
             array_list_pt events = hashMap_get(component->dependencyEvents, dependency);
-            for (int i = 0; i < arrayList_size(events); i++) {
-                dm_event_pt event = arrayList_get(events, i);
-                serviceDependency_invokeRemove(dependency, event);
+            if (events) {
+				for (int i = 0; i < arrayList_size(events); i++) {
+					dm_event_pt event = arrayList_get(events, i);
+					serviceDependency_invokeRemove(dependency, event);
+				}
             }
         }
     }
@@ -780,9 +810,11 @@ celix_status_t component_invokeRemoveReq
 
         if (!instanceBound && required) {
             array_list_pt events = hashMap_get(component->dependencyEvents, dependency);
-            for (int i = 0; i < arrayList_size(events); i++) {
-                dm_event_pt event = arrayList_get(events, i);
-                serviceDependency_invokeRemove(dependency, event);
+            if (events) {
+				for (int i = 0; i < arrayList_size(events); i++) {
+					dm_event_pt event = arrayList_get(events, i);
+					serviceDependency_invokeRemove(dependency, event);
+				}
             }
         }
     }
@@ -819,6 +851,17 @@ celix_status_t component_unregisterServi
     return status;
 }
 
+celix_status_t component_setCallbacks(dm_component_pt component, init_fpt init, start_fpt
start, stop_fpt stop, destroy_fpt destroy) {
+	if (component->active) {
+		return CELIX_ILLEGAL_STATE;
+	}
+	component->callbackInit = init;
+	component->callbackStart = start;
+	component->callbackStop = stop;
+	component->callbackDestroy = destroy;
+	return CELIX_SUCCESS;
+}
+
 celix_status_t component_isAvailable(dm_component_pt component, bool *available) {
     *available = component->state == DM_CMP_STATE_TRACKING_OPTIONAL;
     return CELIX_SUCCESS;
@@ -932,13 +975,13 @@ celix_status_t executor_runTasks(dm_exec
         executor->runningThread = NULL;
         pthread_mutex_unlock(&executor->mutex);
 
-        pthread_mutex_lock(&executor->mutex);
-        if (executor->runningThread == NULL) {
-            executor->runningThread = currentThread;
-            execute = true;
-        }
-        pthread_mutex_unlock(&executor->mutex);
-    } while (!linkedList_isEmpty(executor->workQueue) && execute);
+//        pthread_mutex_lock(&executor->mutex);
+//        if (executor->runningThread == NULL) {
+//            executor->runningThread = currentThread;
+//            execute = true;
+//        }
+//        pthread_mutex_unlock(&executor->mutex);
+    } while (!linkedList_isEmpty(executor->workQueue)); // && execute
 
     return status;
 }

Added: celix/trunk/dependency_manager_2/private/src/dm_event.c
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/src/dm_event.c?rev=1646648&view=auto
==============================================================================
--- celix/trunk/dependency_manager_2/private/src/dm_event.c (added)
+++ celix/trunk/dependency_manager_2/private/src/dm_event.c Fri Dec 19 08:18:09 2014
@@ -0,0 +1,30 @@
+/*
+ * dm_event.c
+ *
+ *  Created on: 18 Dec 2014
+ *      Author: abroekhuis
+ */
+
+#include <stdlib.h>
+
+#include "dm_event.h"
+
+celix_status_t event_create(dm_event_type_e event_type, bundle_pt bundle, bundle_context_pt
context, service_reference_pt reference, void *service, dm_event_pt *event) {
+	celix_status_t status = CELIX_SUCCESS;
+
+	*event = calloc(1, sizeof(**event));
+	if (!*event) {
+		status = CELIX_ENOMEM;
+	}
+
+	if (status == CELIX_SUCCESS) {
+		(*event)->bundle = bundle;
+		(*event)->event_type = event_type;
+		(*event)->context = context;
+		(*event)->reference = reference;
+		(*event)->service = service;
+	}
+
+	return status;
+}
+

Modified: celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c (original)
+++ celix/trunk/dependency_manager_2/private/src/dm_service_dependency.c Fri Dec 19 08:18:09
2014
@@ -24,7 +24,18 @@
  *  \copyright  Apache License, Version 2.0
  */
 
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "constants.h"
+
 #include "dm_service_dependency_impl.h"
+#include "dm_component_impl.h"
+#include "dm_event.h"
+
+static celix_status_t serviceDependency_addedService(void *_ptr, service_reference_pt reference,
void *service);
+static celix_status_t serviceDependency_modifiedService(void *_ptr, service_reference_pt
reference, void *service);
+static celix_status_t serviceDependency_removedService(void *_ptr, service_reference_pt reference,
void *service);
 
 celix_status_t serviceDependency_create(dm_service_dependency_pt *dependency_ptr) {
 	celix_status_t status = CELIX_SUCCESS;
@@ -49,6 +60,9 @@ celix_status_t serviceDependency_create(
 		(*dependency_ptr)->tracked_service_name = NULL;
 		(*dependency_ptr)->tracked_filter_unmodified = NULL;
 		(*dependency_ptr)->tracked_filter = NULL;
+
+		(*dependency_ptr)->tracker = NULL;
+		(*dependency_ptr)->tracker_customizer = NULL;
 	}
 
 	return status;
@@ -85,7 +99,7 @@ celix_status_t serviceDependency_setServ
 				dependency->tracked_filter = strdup(filter);
 			} else {
 				int len = strlen(serviceName) + strlen(OSGI_FRAMEWORK_OBJECTCLASS) + strlen(filter) +
7;
-				char *nfilter[len];
+				char nfilter[len];
 				snprintf(nfilter, len, "(&(%s=%s)%s)", OSGI_FRAMEWORK_OBJECTCLASS, serviceName, filter);
 				dependency->tracked_filter = strdup(nfilter);
 			}
@@ -98,7 +112,7 @@ celix_status_t serviceDependency_setServ
 	return status;
 }
 
-celix_status_t serviceDependency_setCallbacks(dm_service_dependency_pt dependency, service_add_fpt
add, service_change_fpt change, service_remove_fpt remove) {
+celix_status_t serviceDependency_setCallbacks(dm_service_dependency_pt dependency, service_add_fpt
add, service_change_fpt change, service_remove_fpt remove, service_swap_fpt swap) {
 	celix_status_t status = CELIX_SUCCESS;
 
 	if (!dependency) {
@@ -109,6 +123,7 @@ celix_status_t serviceDependency_setCall
 		dependency->add = add;
 		dependency->change = change;
 		dependency->remove = remove;
+		dependency->swap = swap;
 	}
 
 	return status;
@@ -158,6 +173,7 @@ celix_status_t serviceDependency_start(d
 	}
 
 	if (status == CELIX_SUCCESS) {
+		dependency->tracker_customizer = NULL;
 		status = serviceTrackerCustomizer_create(dependency, NULL, serviceDependency_addedService,
serviceDependency_modifiedService,
 				serviceDependency_removedService, &dependency->tracker_customizer);
 	}
@@ -271,7 +287,7 @@ celix_status_t serviceDependency_invokeR
 	return status;
 }
 
-celix_status_t serviceDependency_invokeSwap(dm_service_dependency_pt dependency, dm_event_pt
event) {
+celix_status_t serviceDependency_invokeSwap(dm_service_dependency_pt dependency, dm_event_pt
event, dm_event_pt newEvent) {
 	celix_status_t status = CELIX_SUCCESS;
 
 	if (!dependency) {
@@ -279,7 +295,7 @@ celix_status_t serviceDependency_invokeS
 	}
 
 	if (status == CELIX_SUCCESS) {
-		dependency->swap(dependency->component->implementation, event->reference, event->service);
+		dependency->swap(dependency->component->implementation, event->reference, event->service,
newEvent->reference, newEvent->service);
 	}
 
 	return status;
@@ -327,11 +343,12 @@ celix_status_t serviceDependency_isInsta
 	return status;
 }
 
-celix_status_t serviceDependency_addedService(dm_service_dependency_pt dependency, service_reference_pt
reference, void *service) {
+celix_status_t serviceDependency_addedService(void *_ptr, service_reference_pt reference,
void *service) {
 	celix_status_t status = CELIX_SUCCESS;
 	bundle_context_pt context = NULL;
 	bundle_pt bundle = NULL;
 	dm_event_pt event = NULL;
+	dm_service_dependency_pt dependency = _ptr;
 
 	if (!dependency || !reference || !service) {
 		status = CELIX_ILLEGAL_ARGUMENT;
@@ -362,11 +379,12 @@ celix_status_t serviceDependency_addedSe
 	return status;
 }
 
-celix_status_t serviceDependency_modifiedService(dm_service_dependency_pt dependency, service_reference_pt
reference, void *service) {
+celix_status_t serviceDependency_modifiedService(void *_ptr, service_reference_pt reference,
void *service) {
 	celix_status_t status = CELIX_SUCCESS;
 	bundle_context_pt context = NULL;
 	bundle_pt bundle = NULL;
 	dm_event_pt event = NULL;
+	dm_service_dependency_pt dependency = _ptr;
 
 	if (!dependency || !reference || !service) {
 		status = CELIX_ILLEGAL_ARGUMENT;
@@ -397,11 +415,12 @@ celix_status_t serviceDependency_modifie
 	return status;
 }
 
-celix_status_t serviceDependency_removedService(dm_service_dependency_pt dependency, service_reference_pt
reference, void *service) {
+celix_status_t serviceDependency_removedService(void *_ptr, service_reference_pt reference,
void *service) {
 	celix_status_t status = CELIX_SUCCESS;
 	bundle_context_pt context = NULL;
 	bundle_pt bundle = NULL;
 	dm_event_pt event = NULL;
+	dm_service_dependency_pt dependency = _ptr;
 
 	if (!dependency || !reference || !service) {
 		status = CELIX_ILLEGAL_ARGUMENT;

Modified: celix/trunk/dependency_manager_2/public/include/dm_activator_base.h
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/public/include/dm_activator_base.h?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/public/include/dm_activator_base.h (original)
+++ celix/trunk/dependency_manager_2/public/include/dm_activator_base.h Fri Dec 19 08:18:09
2014
@@ -6,7 +6,7 @@
 #include "dm_dependency_manager.h"
 
 celix_status_t dm_create(bundle_context_pt context, void ** userData);
-celix_status_t dm_init(dm_dependency_manager_pt manager, bundle_context_pt context, void
* userData);
-celix_status_t dm_destroy(dm_dependency_manager_pt manager, bundle_context_pt context, void
* userData);
+celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt
manager);
+celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt
manager);
 
 #endif /* DM_ACTIVATOR_BASE_H_ */

Modified: celix/trunk/dependency_manager_2/public/include/dm_component.h
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/public/include/dm_component.h?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/public/include/dm_component.h (original)
+++ celix/trunk/dependency_manager_2/public/include/dm_component.h Fri Dec 19 08:18:09 2014
@@ -27,6 +27,8 @@
 #ifndef COMPONENT_H_
 #define COMPONENT_H_
 
+#include "celix_errno.h"
+
 typedef struct dm_component *dm_component_pt;
 
 

Modified: celix/trunk/dependency_manager_2/public/include/dm_event.h
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/public/include/dm_event.h?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/public/include/dm_event.h (original)
+++ celix/trunk/dependency_manager_2/public/include/dm_event.h Fri Dec 19 08:18:09 2014
@@ -27,6 +27,10 @@
 #ifndef DM_EVENT_H_
 #define DM_EVENT_H_
 
+#include "service_reference.h"
+#include "bundle_context.h"
+#include "bundle.h"
+
 enum dm_event_type {
 	DM_EVENT_ADDED,
 	DM_EVENT_CHANGED,

Modified: celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h
URL: http://svn.apache.org/viewvc/celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h (original)
+++ celix/trunk/dependency_manager_2/public/include/dm_service_dependency.h Fri Dec 19 08:18:09
2014
@@ -34,6 +34,8 @@
 
 typedef struct dm_service_dependency *dm_service_dependency_pt;
 
+celix_status_t serviceDependency_create(dm_service_dependency_pt *dependency_ptr);
+
 celix_status_t serviceDependency_setComponent(dm_service_dependency_pt dependency, dm_component_pt
component);
 //celix_status_t serviceDependency_removeComponent(dm_service_dependency_pt dependency, dm_component_pt
component);
 

Modified: celix/trunk/examples/CMakeLists.txt
URL: http://svn.apache.org/viewvc/celix/trunk/examples/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/CMakeLists.txt (original)
+++ celix/trunk/examples/CMakeLists.txt Fri Dec 19 08:18:09 2014
@@ -20,7 +20,7 @@ if (EXAMPLES)
     add_subdirectory(hello_world_test)
     #add_subdirectory(mongoose)
     
-    #add_subdirectory(whiteboard)
+    add_subdirectory(whiteboard)
     add_subdirectory(echo_service)
     
     add_subdirectory(osgi-in-action/chapter04-correct-lookup)

Modified: celix/trunk/examples/deploy.cmake
URL: http://svn.apache.org/viewvc/celix/trunk/examples/deploy.cmake?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/deploy.cmake (original)
+++ celix/trunk/examples/deploy.cmake Fri Dec 19 08:18:09 2014
@@ -20,7 +20,7 @@ if (EXAMPLES)
 	deploy(chapter04-correct-listener BUNDLES shell shell_tui log_service chapter04-correct-listener)
 	
 	deploy("hello_world" BUNDLES shell shell_tui apache_celix_examples_hello_world hello_world_test
log_service)
-	#deploy("wb" BUNDLES tracker publisherA publisherB shell shell_tui log_service log_writer)
-	#deploy("wb_dp" BUNDLES tracker_depman publisherA publisherB shell shell_tui log_service
log_writer)
+	deploy("wb" BUNDLES tracker publisherA publisherB shell shell_tui log_service log_writer)
+	deploy("wb_dp" BUNDLES tracker_depman publisherA publisherB shell shell_tui log_service
log_writer)
 	deploy("echo" BUNDLES echo_server echo_client shell shell_tui)
 endif (EXAMPLES)
\ No newline at end of file

Modified: celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt
URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt (original)
+++ celix/trunk/examples/whiteboard/publisherA/CMakeLists.txt Fri Dec 19 08:18:09 2014
@@ -15,10 +15,11 @@
 # specific language governing permissions and limitations
 # under the License.
 
+SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_publisher_a")
+SET(BUNDLE_VERSION "0.0.1")
+
 bundle(publisherA SOURCES private/src/activator private/src/publisher)
 include_directories("../publisherService/public/include")
 include_directories("../publisherService/private/include")
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
 target_link_libraries(publisherA celix_framework)
-
-package(publisherA FILES ../publisherService/public/include/publisher.h)
\ No newline at end of file

Modified: celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt
URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt (original)
+++ celix/trunk/examples/whiteboard/publisherB/CMakeLists.txt Fri Dec 19 08:18:09 2014
@@ -15,10 +15,11 @@
 # specific language governing permissions and limitations
 # under the License.
 
+SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_publisher_b")
+SET(BUNDLE_VERSION "0.0.1")
+
 bundle(publisherB SOURCES private/src/activator private/src/publisher)
 include_directories("../publisherService/public/include")
 include_directories("../publisherService/private/include")
 target_link_libraries(publisherB celix_framework)
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
-
-package(publisherB FILES ../publisherService/public/include/publisher.h)
\ No newline at end of file

Modified: celix/trunk/examples/whiteboard/tracker/CMakeLists.txt
URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/whiteboard/tracker/CMakeLists.txt (original)
+++ celix/trunk/examples/whiteboard/tracker/CMakeLists.txt Fri Dec 19 08:18:09 2014
@@ -15,6 +15,9 @@
 # specific language governing permissions and limitations
 # under the License.
 
+SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_tracker")
+SET(BUNDLE_VERSION "0.0.1")
+
 bundle(tracker SOURCES private/src/activator)
 include_directories("../publisherService/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")

Modified: celix/trunk/examples/whiteboard/tracker/private/src/activator.c
URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker/private/src/activator.c?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/whiteboard/tracker/private/src/activator.c (original)
+++ celix/trunk/examples/whiteboard/tracker/private/src/activator.c Fri Dec 19 08:18:09 2014
@@ -24,6 +24,8 @@
  *  \copyright	Apache License, Version 2.0
  */
 #include <stdlib.h>
+#include <unistd.h>
+
 #include "celixbool.h"
 
 #include "bundle_activator.h"
@@ -35,11 +37,11 @@ struct data {
 	bundle_context_pt context;
 	service_tracker_pt tracker;
 	array_list_pt publishers;
-	apr_thread_t *sender;
+	pthread_t sender;
 	bool running;
 };
 
-static void *APR_THREAD_FUNC trk_send(apr_thread_t *thd, void *handle) {
+static void *trk_send(void *handle) {
 	struct data * data = (struct data *) handle;
 	while (data->running) {
 		int i;
@@ -47,9 +49,9 @@ static void *APR_THREAD_FUNC trk_send(ap
 			publisher_service_pt pub = arrayList_get(data->publishers, i);
 			pub->invoke(pub->publisher, "test");
 		}
-		apr_sleep(1000000);
+		usleep(1000000);
 	}
-	apr_thread_exit(thd, APR_SUCCESS);
+	pthread_exit(NULL);
 	return NULL;
 }
 
@@ -70,7 +72,6 @@ celix_status_t addedServ(void * handle,
 }
 
 celix_status_t modifiedServ(void * handle, service_reference_pt ref, void * service) {
-	struct data * data = (struct data *) handle;
 	printf("Modified\n");
 	return CELIX_SUCCESS;
 }
@@ -83,10 +84,9 @@ celix_status_t removedServ(void * handle
 }
 
 celix_status_t bundleActivator_create(bundle_context_pt context, void **userData) {
-    apr_pool_t *pool;
-    celix_status_t status = bundleContext_getMemoryPool(context, &pool);
+    celix_status_t status = CELIX_SUCCESS;
     if (status == CELIX_SUCCESS) {
-        *userData = apr_palloc(pool, sizeof(struct data));
+        *userData = calloc(1, sizeof(struct data));
         ((struct data *) (*userData))->publishers = NULL;
         arrayList_create(&((struct data *) (*userData))->publishers);
     } else {
@@ -97,8 +97,6 @@ celix_status_t bundleActivator_create(bu
 
 celix_status_t bundleActivator_start(void * userData, bundle_context_pt context) {
     celix_status_t status = CELIX_SUCCESS;
-    apr_pool_t *pool;
-    status = bundleContext_getMemoryPool(context, &pool);
     if (status == CELIX_SUCCESS) {
         struct data * data = (struct data *) userData;
 		service_tracker_customizer_pt cust = NULL;
@@ -106,15 +104,15 @@ celix_status_t bundleActivator_start(voi
         
 		data->context = context;
 
-        serviceTrackerCustomizer_create(pool, data, addingServ, addedServ, modifiedServ,
removedServ, &cust);
-        serviceTracker_create(pool, context, (char *) PUBLISHER_NAME, cust, &tracker);
+        serviceTrackerCustomizer_create(data, addingServ, addedServ, modifiedServ, removedServ,
&cust);
+        serviceTracker_create(context, (char *) PUBLISHER_NAME, cust, &tracker);
 
         data->tracker = tracker;
 
         serviceTracker_open(tracker);
 
         data->running = true;
-        apr_thread_create(&data->sender, NULL, trk_send, data, pool);
+        pthread_create(&data->sender, NULL, trk_send, data);
     } else {
         status = CELIX_START_ERROR;
     }
@@ -124,12 +122,11 @@ celix_status_t bundleActivator_start(voi
 celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) {
     celix_status_t status = CELIX_SUCCESS;
     struct data * data = (struct data *) userData;
-    apr_status_t stat;
 
 	printf("Stop\n");
     serviceTracker_close(data->tracker);
     data->running = false;
-    apr_thread_join(&stat, data->sender);
+    pthread_join(data->sender, NULL);
 
     return status;
 }

Modified: celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt
URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt (original)
+++ celix/trunk/examples/whiteboard/tracker_depman/CMakeLists.txt Fri Dec 19 08:18:09 2014
@@ -15,6 +15,9 @@
 # specific language governing permissions and limitations
 # under the License.
 
+SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_tracker_dm")
+SET(BUNDLE_VERSION "0.0.1")
+
 bundle(tracker_depman SOURCES
     private/src/dependency_activator
     private/src/tracker
@@ -22,8 +25,9 @@ bundle(tracker_depman SOURCES
     private/include/tracker.h
 )
 include_directories("private/include")
-include_directories("${PROJECT_SOURCE_DIR}/dependency_manager/public/include")
+include_directories("${PROJECT_SOURCE_DIR}/dependency_manager_2/public/include")
+include_directories("${PROJECT_SOURCE_DIR}/dependency_manager_2/private/include")
 include_directories("../publisherService/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
 include_directories("${PROJECT_SOURCE_DIR}/log_service/public/include")
-target_link_libraries(tracker_depman celix_framework dependency_manager)
+target_link_libraries(tracker_depman celix_framework -Wl,-all_load dependency_manager2)

Modified: celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h
URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h (original)
+++ celix/trunk/examples/whiteboard/tracker_depman/private/include/tracker.h Fri Dec 19 08:18:09
2014
@@ -27,25 +27,30 @@
 #ifndef TRACKER_H_
 #define TRACKER_H_
 
-#include "service_component.h"
+#include "dm_component.h"
 #include "log_service.h"
 
 struct data {
-	service_pt service;
+	dm_component_pt service;
 	bundle_context_pt context;
 	array_list_pt publishers;
-	apr_thread_t *sender;
+	pthread_t sender;
 	bool running;
 	log_service_pt logger;
 };
 
-void tracker_addedServ(void * handle, service_reference_pt ref, void * service);
-void tracker_modifiedServ(void * handle, service_reference_pt ref, void * service);
-void tracker_removedServ(void * handle, service_reference_pt ref, void * service);
-
-void tracker_addLog(void * handle, service_reference_pt ref, void * service);
-void tracker_modifiedLog(void * handle, service_reference_pt ref, void * service);
-void tracker_removeLog(void * handle, service_reference_pt ref, void * service);
+celix_status_t tracker_addedServ(void * handle, service_reference_pt ref, void * service);
+celix_status_t tracker_modifiedServ(void * handle, service_reference_pt ref, void * service);
+celix_status_t tracker_removedServ(void * handle, service_reference_pt ref, void * service);
+
+celix_status_t tracker_addLog(void * handle, service_reference_pt ref, void * service);
+celix_status_t tracker_modifiedLog(void * handle, service_reference_pt ref, void * service);
+celix_status_t tracker_removeLog(void * handle, service_reference_pt ref, void * service);
+
+celix_status_t service_init(void * userData);
+celix_status_t service_start(void * userData);
+celix_status_t service_stop(void * userData);
+celix_status_t service_destroy(void * userData);
 
 
 #endif /* TRACKER_H_ */

Modified: celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c
URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c (original)
+++ celix/trunk/examples/whiteboard/tracker_depman/private/src/dependency_activator.c Fri
Dec 19 08:18:09 2014
@@ -27,14 +27,17 @@
 #include <stdio.h>
 #include "celixbool.h"
 
-#include "dependency_activator_base.h"
-#include "service_component_private.h"
+#include "dm_activator_base.h"
+#include "dm_service_dependency.h"
+#include "dm_service_dependency_impl.h"
+#include "dm_component_impl.h"
 #include "publisher.h"
 #include "tracker.h"
 #include "log_service.h"
 #include "bundle_context.h"
 
-void * dm_create(bundle_context_pt context) {
+celix_status_t dm_create(bundle_context_pt context, void **userData) {
+	printf("Create\n");
 	struct data * data = malloc(sizeof(*data));
 	data->publishers = NULL;
 	arrayList_create(&data->publishers);
@@ -43,42 +46,47 @@ void * dm_create(bundle_context_pt conte
 	data->sender = 0;
 	data->service = NULL;
 	data->logger = NULL;
-	return data;
+	*userData = data;
+	return CELIX_SUCCESS;
 }
 
-void dm_init(void * userData, bundle_context_pt context, dependency_manager_pt manager) {
+celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency_manager_pt
manager) {
+	printf("Init\n");
 	struct data * data = (struct data *) userData;
-	service_pt service = NULL;
-	service_dependency_pt dep = NULL;
-	service_dependency_pt dep2 = NULL;
+	dm_component_pt service = NULL;
+	dm_service_dependency_pt dep = NULL;
+	dm_service_dependency_pt dep2 = NULL;
 
 	data->context = context;
 
-	service = dependencyActivatorBase_createService(manager);
-	serviceComponent_setImplementation(service, data);
+	component_create(context, manager, &service);
+	component_setImplementation(service, data);
+	component_setCallbacks(service, service_init, service_start, service_stop, service_destroy);
 
-	dep = dependencyActivatorBase_createServiceDependency(manager);
+	serviceDependency_create(&dep);
 	serviceDependency_setRequired(dep, false);
 	serviceDependency_setService(dep, PUBLISHER_NAME, "(|(id=A)(id=B))");
-	serviceDependency_setCallbacks(dep, tracker_addedServ, tracker_modifiedServ, tracker_removedServ);
-	serviceComponent_addServiceDependency(service, dep);
+	serviceDependency_setCallbacks(dep, tracker_addedServ, tracker_modifiedServ, tracker_removedServ,
NULL);
+	component_addServiceDependency(service, dep, NULL);
 
-	dep2 = dependencyActivatorBase_createServiceDependency(manager);
+	serviceDependency_create(&dep2);
     serviceDependency_setRequired(dep2, false);
     serviceDependency_setService(dep2, (char *) OSGI_LOGSERVICE_NAME, NULL);
-    serviceDependency_setCallbacks(dep2, tracker_addLog, tracker_modifiedLog, tracker_removeLog);
-    serviceComponent_addServiceDependency(service, dep2);
+    serviceDependency_setCallbacks(dep2, tracker_addLog, tracker_modifiedLog, tracker_removeLog,
NULL);
+    component_addServiceDependency(service, dep2, NULL);
 
 	data->service = service;
 	dependencyManager_add(manager, service);
+	return CELIX_SUCCESS;
 }
 
-void dm_destroy(void * userData, bundle_context_pt context, dependency_manager_pt manager)
{
+celix_status_t dm_destroy(void * userData, bundle_context_pt context, dm_dependency_manager_pt
manager) {
 	struct data * data = (struct data *) userData;
 	dependencyManager_remove(manager, data->service);
 	arrayList_destroy(data->publishers);
 	data->publishers = NULL;
 	free(data);
 	data = NULL;
+	return CELIX_SUCCESS;
 }
 

Modified: celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c
URL: http://svn.apache.org/viewvc/celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c?rev=1646648&r1=1646647&r2=1646648&view=diff
==============================================================================
--- celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c (original)
+++ celix/trunk/examples/whiteboard/tracker_depman/private/src/tracker.c Fri Dec 19 08:18:09
2014
@@ -25,16 +25,18 @@
  */
 #include <stdlib.h>
 #include <stdio.h>
+#include <unistd.h>
+
 #include "celixbool.h"
 
-#include "service.h"
 #include "publisher.h"
 #include "tracker.h"
 #include "log_service.h"
 
-static void *APR_THREAD_FUNC dp_send(apr_thread_t *thd, void *handle) {
+static void *dp_send(void *handle) {
 	struct data * data = (struct data *) handle;
 	while (data->running) {
+		printf("Running\n");
 		int i;
 		for (i = 0; i < arrayList_size(data->publishers); i++) {
 			publisher_service_pt pub = (publisher_service_pt) arrayList_get(data->publishers, i);
@@ -43,69 +45,74 @@ static void *APR_THREAD_FUNC dp_send(apr
 				data->logger->log(data->logger->logger, OSGI_LOGSERVICE_INFO, "Sending message
to publisher");
 			}
 		}
-		apr_sleep(1000000);
+		usleep(1000000);
 	}
-	apr_thread_exit(thd, APR_SUCCESS);
+	pthread_exit(NULL);
 	return NULL;
 }
 
-void service_init(void * userData) {
-
+celix_status_t service_init(void * userData) {
+	return CELIX_SUCCESS;
 }
 
-void service_start(void * userData) {
+celix_status_t service_start(void * userData) {
 	struct data * data = (struct data *) userData;
-	apr_pool_t *pool = NULL;
 
 	data->running = true;
-	bundleContext_getMemoryPool(data->context, &pool);
-	apr_thread_create(&data->sender, NULL, dp_send, data, pool);
+	pthread_create(&data->sender, NULL, dp_send, data);
+	return CELIX_SUCCESS;
 }
 
-void service_stop(void * userData) {
-	apr_status_t stat;
+celix_status_t service_stop(void * userData) {
 	struct data * data = (struct data *) userData;
 	data->running = false;
-	apr_thread_join(&stat, data->sender);
+	pthread_join(data->sender, NULL);
+	return CELIX_SUCCESS;
 }
 
-void service_destroy(void * userData) {
-
+celix_status_t service_destroy(void * userData) {
+	return CELIX_SUCCESS;
 }
 
-void tracker_addedServ(void * handle, service_reference_pt ref, void * service) {
+celix_status_t tracker_addedServ(void * handle, service_reference_pt ref, void * service)
{
 	struct data * data = (struct data *) handle;
 	arrayList_add(data->publishers, service);
-	printf("Service Added\n");
+	printf("Service Added %p\n", service);
+	return CELIX_SUCCESS;
 }
 
-void tracker_modifiedServ(void * handle, service_reference_pt ref, void * service) {
+celix_status_t tracker_modifiedServ(void * handle, service_reference_pt ref, void * service)
{
 	struct data * data = (struct data *) handle;
 	printf("Service Changed\n");
+	return CELIX_SUCCESS;
 }
 
-void tracker_removedServ(void * handle, service_reference_pt ref, void * service) {
+celix_status_t tracker_removedServ(void * handle, service_reference_pt ref, void * service)
{
 	struct data * data = (struct data *) handle;
 	arrayList_removeElement(data->publishers, service);
 	printf("Service Removed\n");
+	return CELIX_SUCCESS;
 }
 
-void tracker_addLog(void *handle, service_reference_pt ref, void *service) {
+celix_status_t tracker_addLog(void *handle, service_reference_pt ref, void *service) {
     struct data * data = (struct data *) handle;
     printf("Add log\n");
     data->logger = service;
     ((log_service_pt) service)->log(((log_service_pt) service)->logger, OSGI_LOGSERVICE_DEBUG,
"test");
+    return CELIX_SUCCESS;
 }
 
-void tracker_modifiedLog(void *handle, service_reference_pt ref, void *service) {
+celix_status_t tracker_modifiedLog(void *handle, service_reference_pt ref, void *service)
{
     struct data * data = (struct data *) handle;
     printf("Modify log\n");
     data->logger = service;
     ((log_service_pt) service)->log(((log_service_pt) service)->logger, OSGI_LOGSERVICE_DEBUG,
"test");
+    return CELIX_SUCCESS;
 }
 
-void tracker_removeLog(void *handle, service_reference_pt ref, void *service) {
+celix_status_t tracker_removeLog(void *handle, service_reference_pt ref, void *service) {
     struct data * data = (struct data *) handle;
     data->logger = NULL;
     printf("Remove log\n");
+    return CELIX_SUCCESS;
 }



Mime
View raw message