You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2015/11/03 12:09:54 UTC

[17/21] celix git commit: CELIX-269: Added marco for the callback functions which can be used to prevent warning instead of casting to (void *)

CELIX-269: Added marco for the callback functions which can be used to prevent warning instead of casting to (void *)


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/e302c2d3
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/e302c2d3
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/e302c2d3

Branch: refs/heads/develop
Commit: e302c2d369c66c045b333088be0718b03c04bf15
Parents: 02c5631
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Thu Oct 29 17:35:20 2015 +0100
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Thu Oct 29 17:35:20 2015 +0100

----------------------------------------------------------------------
 .../private/src/dm_shell_list_command.c         |  8 +++----
 .../public/include/dm_component.h               | 17 +++++++++++----
 dependency_manager/public/include/dm_info.h     |  2 +-
 .../public/include/dm_service_dependency.h      | 22 +++++++++++++++-----
 .../phase1/private/include/phase1_cmp.h         |  1 +
 .../phase1/private/src/phase1_activator.c       |  4 ++--
 .../dm_example/phase1/private/src/phase1_cmp.c  |  5 +++++
 .../phase2a/private/include/phase2a_cmp.h       |  1 +
 .../phase2a/private/src/phase2a_activator.c     |  4 ++--
 .../phase2a/private/src/phase2a_cmp.c           |  5 +++++
 .../phase2b/private/include/phase2b_cmp.h       |  1 +
 .../phase2b/private/src/phase2b_activator.c     |  4 ++--
 .../phase2b/private/src/phase2b_cmp.c           |  5 +++++
 .../phase3/private/include/phase3_cmp.h         |  1 +
 .../phase3/private/src/phase3_activator.c       |  4 ++--
 .../dm_example/phase3/private/src/phase3_cmp.c  |  5 +++++
 16 files changed, 67 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/dependency_manager/private/src/dm_shell_list_command.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_shell_list_command.c b/dependency_manager/private/src/dm_shell_list_command.c
index 4d08068..1855664 100644
--- a/dependency_manager/private/src/dm_shell_list_command.c
+++ b/dependency_manager/private/src/dm_shell_list_command.c
@@ -75,8 +75,8 @@ void dmListCommand_execute(command_pt command, char * line, void (*out)(char *),
         int cmpCnt;
         for (cmpCnt = 0; cmpCnt < arrayList_size(info->components); cmpCnt++) {
             dm_component_info_pt compInfo = arrayList_get(info->components, cmpCnt);
-            char *startColors = "";
-            char *endColors = "";
+            const char *startColors = "";
+            const char *endColors = "";
             if (colors) {
                 startColors = compInfo->active ? OK_COLOR : NOK_COLOR;
                 endColors = END_COLOR;
@@ -100,8 +100,8 @@ void dmListCommand_execute(command_pt command, char * line, void (*out)(char *),
             for(depCnt = 0 ;depCnt < arrayList_size(compInfo->dependency_list); depCnt++) {
                 dm_service_dependency_info_pt dependency;
                 dependency = arrayList_get(compInfo->dependency_list, depCnt);
-                char *startColors = "";
-                char *endColors = "";
+                const char *startColors = "";
+                const char *endColors = "";
                 if (colors) {
                     if (dependency->required) {
                         startColors = dependency->available ? OK_COLOR : NOK_COLOR;

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/dependency_manager/public/include/dm_component.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_component.h b/dependency_manager/public/include/dm_component.h
index cf709cd..b558aea 100644
--- a/dependency_manager/public/include/dm_component.h
+++ b/dependency_manager/public/include/dm_component.h
@@ -39,10 +39,10 @@ typedef struct dm_component *dm_component_pt;
 #define DM_COMPONENT_MAX_ID_LENGTH 64
 #define DM_COMPONENT_MAX_NAME_LENGTH 128
 
-typedef celix_status_t (*init_fpt)(void *userData);
-typedef celix_status_t (*start_fpt)(void *userData);
-typedef celix_status_t (*stop_fpt)(void *userData);
-typedef celix_status_t (*deinit_fpt)(void *userData);
+typedef int (*init_fpt)(void *userData);
+typedef int (*start_fpt)(void *userData);
+typedef int (*stop_fpt)(void *userData);
+typedef int (*deinit_fpt)(void *userData);
 
 celix_status_t component_create(bundle_context_pt context, const char *name, dm_component_pt *component);
 celix_status_t component_destroy(dm_component_pt *component);
@@ -58,6 +58,15 @@ celix_status_t component_getInterfaces(dm_component_pt component, array_list_pt
 celix_status_t component_addServiceDependency(dm_component_pt component, dm_service_dependency_pt dep);
 celix_status_t component_removeServiceDependency(dm_component_pt component, dm_service_dependency_pt dependency);
 
+#define component_setCallbacksSafe(dmCmp, type, init, start, stop, deinit) \
+    do {  \
+        int (*tmp_init)(type)   = (init); \
+        int (*tmp_start)(type)  = (start); \
+        int (*tmp_stop)(type)   = (stop); \
+        int (*tmp_deinit)(type) = (deinit); \
+        component_setCallbacks((dmCmp), (init_fpt)tmp_init, (start_fpt)tmp_start, (stop_fpt)tmp_stop, (deinit_fpt)tmp_deinit); \
+    } while(0)
+
 celix_status_t component_setCallbacks(dm_component_pt component, init_fpt init, start_fpt start, stop_fpt stop, deinit_fpt deinit);
 
 /**

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/dependency_manager/public/include/dm_info.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_info.h b/dependency_manager/public/include/dm_info.h
index dd9947c..99bb46a 100644
--- a/dependency_manager/public/include/dm_info.h
+++ b/dependency_manager/public/include/dm_info.h
@@ -57,7 +57,7 @@ struct dm_info_service {
 
     /*Note: dm_caller has the ownership of the result.*/
     celix_status_t (*getInfo)(void *handle, dm_dependency_manager_info_pt *info);
-    void (*destroyInfo)(void *handle, dm_service_dependency_info_pt info);
+    void (*destroyInfo)(void *handle, dm_dependency_manager_info_pt info);
 };
 
 typedef struct dm_info_service * dm_info_service_pt;

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/dependency_manager/public/include/dm_service_dependency.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_service_dependency.h b/dependency_manager/public/include/dm_service_dependency.h
index 337be01..1a98dea 100644
--- a/dependency_manager/public/include/dm_service_dependency.h
+++ b/dependency_manager/public/include/dm_service_dependency.h
@@ -33,11 +33,11 @@
 
 typedef struct dm_service_dependency *dm_service_dependency_pt;
 
-typedef celix_status_t (*service_set_fpt)(void *handle, void *service);
-typedef celix_status_t (*service_add_fpt)(void *handle, void *service);
-typedef celix_status_t (*service_change_fpt)(void *handle, void *service);
-typedef celix_status_t (*service_remove_fpt)(void *handle, void *service);
-typedef celix_status_t (*service_swap_fpt)(void *handle, void *oldService, void *newService);
+typedef int (*service_set_fpt)(void *handle, void *service);
+typedef int (*service_add_fpt)(void *handle, void *service);
+typedef int (*service_change_fpt)(void *handle, void *service);
+typedef int (*service_remove_fpt)(void *handle, void *service);
+typedef int (*service_swap_fpt)(void *handle, void *oldService, void *newService);
 
 typedef celix_status_t (*service_set_with_ref_fpt)(void *handle, service_reference_pt reference, void *service);
 typedef celix_status_t (*service_add_with_ref_fpt)(void *handle, service_reference_pt reference, void *service);
@@ -51,10 +51,22 @@ celix_status_t serviceDependency_destroy(dm_service_dependency_pt *dependency_pt
 celix_status_t serviceDependency_setRequired(dm_service_dependency_pt dependency, bool required);
 celix_status_t serviceDependency_setService(dm_service_dependency_pt dependency, char *serviceName, char *filter);
 celix_status_t serviceDependency_getFilter(dm_service_dependency_pt dependency, char **filter);
+
 celix_status_t serviceDependency_setCallbacks(dm_service_dependency_pt dependency, service_set_fpt set, service_add_fpt add, service_change_fpt change, service_remove_fpt remove, service_swap_fpt swap);
 celix_status_t serviceDependency_setCallbacksWithServiceReference(dm_service_dependency_pt dependency, service_set_with_ref_fpt set, service_add_with_ref_fpt add, service_change_with_ref_fpt change, service_remove_with_ref_fpt remove, service_swap_with_ref_fpt swap);
 celix_status_t serviceDependency_setAutoConfigure(dm_service_dependency_pt dependency, celix_thread_mutex_t *service_lock, void **field);
 
+#define serviceDependency_setCallbacksSafe(dep, cmpType, servType, set, add, change, remove, swap) \
+	do { \
+		int (*tmpSet)(cmpType, servType) = set; \
+		int (*tmpAdd)(cmpType, servType) = add; \
+		int (*tmpChange)(cmpType, servType) = change; \
+		int (*tmpRemove)(cmpType, servType) = remove; \
+		int (*tmpSwap)(cmpType, servType, servType) = swap; \
+		serviceDependency_setCallbacks((dep), (service_set_fpt)tmpSet, (service_add_fpt)tmpAdd, (service_change_fpt)tmpChange, (service_remove_fpt)tmpRemove, (service_swap_fpt)tmpSwap); \
+	} while(0)
+
+
 /**
  * Return a service dependency info. The caller is the owner
  */

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase1/private/include/phase1_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/private/include/phase1_cmp.h b/examples/dm_example/phase1/private/include/phase1_cmp.h
index 55e3f15..5715f6e 100644
--- a/examples/dm_example/phase1/private/include/phase1_cmp.h
+++ b/examples/dm_example/phase1/private/include/phase1_cmp.h
@@ -34,6 +34,7 @@ phase1_cmp_t *phase1_create(void);
 int phase1_init(phase1_cmp_t *cmp);
 int phase1_start(phase1_cmp_t *cmp);
 int phase1_stop(phase1_cmp_t *cmp);
+int phase1_deinit(phase1_cmp_t *cmp);
 void phase1_destroy(phase1_cmp_t *cmp);
 
 int phase1_getData(phase1_cmp_t *cmp, unsigned int *data);

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase1/private/src/phase1_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/private/src/phase1_activator.c b/examples/dm_example/phase1/private/src/phase1_activator.c
index 60ab21d..4d20c97 100644
--- a/examples/dm_example/phase1/private/src/phase1_activator.c
+++ b/examples/dm_example/phase1/private/src/phase1_activator.c
@@ -53,7 +53,7 @@ celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency
 	if (act->phase1Cmp != NULL) {
 
 		act->phase1Serv.handle = act->phase1Cmp;
-		act->phase1Serv.getData = phase1_getData;
+		act->phase1Serv.getData = (void *)phase1_getData;
 
 		properties_pt props = properties_create();
 		properties_set(props, "id", "phase1");
@@ -61,7 +61,7 @@ celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency
 		dm_component_pt cmp;
 		component_create(context, "PHASE1_PROCESSING_COMPONENT", &cmp);
 		component_setImplementation(cmp, act->phase1Cmp);
-		component_setCallbacks(cmp, phase1_init, phase1_start, phase1_stop, phase1_destroy);
+		component_setCallbacksSafe(cmp, phase1_cmp_t *, phase1_init, phase1_start, phase1_stop, phase1_deinit);
 		component_addInterface(cmp, PHASE1_NAME, &act->phase1Serv, props);
 
 		dependencyManager_add(manager, cmp);

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase1/private/src/phase1_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/private/src/phase1_cmp.c b/examples/dm_example/phase1/private/src/phase1_cmp.c
index ba9d46e..e050ba2 100644
--- a/examples/dm_example/phase1/private/src/phase1_cmp.c
+++ b/examples/dm_example/phase1/private/src/phase1_cmp.c
@@ -71,6 +71,11 @@ int phase1_stop(phase1_cmp_t *cmp) {
     return 0;
 }
 
+int phase1_deinit(phase1_cmp_t *cmp) {
+    printf("deinit phase1\n");
+    return 0;
+}
+
 void phase1_destroy(phase1_cmp_t *cmp) {
     free(cmp);
 	printf("destroy phase1\n");

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase2a/private/include/phase2a_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/private/include/phase2a_cmp.h b/examples/dm_example/phase2a/private/include/phase2a_cmp.h
index ecfc0f0..5b8431a 100644
--- a/examples/dm_example/phase2a/private/include/phase2a_cmp.h
+++ b/examples/dm_example/phase2a/private/include/phase2a_cmp.h
@@ -35,6 +35,7 @@ phase2a_cmp_t *phase2a_create(void);
 int phase2a_init(phase2a_cmp_t *cmp);
 int phase2a_start(phase2a_cmp_t *cmp);
 int phase2a_stop(phase2a_cmp_t *cmp);
+int phase2a_deinit(phase2a_cmp_t *cmp);
 void phase2a_destroy(phase2a_cmp_t *cmp);
 
 int phase2a_setPhase1(phase2a_cmp_t *cmp, phase1_t *phase1);

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase2a/private/src/phase2a_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/private/src/phase2a_activator.c b/examples/dm_example/phase2a/private/src/phase2a_activator.c
index 96f32ab..9202a1f 100644
--- a/examples/dm_example/phase2a/private/src/phase2a_activator.c
+++ b/examples/dm_example/phase2a/private/src/phase2a_activator.c
@@ -62,14 +62,14 @@ celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency
 		dm_component_pt cmp;
 		component_create(context, "PHASE2A_PROCESSING_COMPONENT", &cmp);
 		component_setImplementation(cmp, act->phase2aCmp);
-		component_setCallbacks(cmp, (void *)phase2a_init, (void *)phase2a_start, (void *)phase2a_stop, (void *)phase2a_destroy);
+		component_setCallbacksSafe(cmp, phase2a_cmp_t *, phase2a_init, phase2a_start, phase2a_stop, phase2a_deinit);
 		component_addInterface(cmp, PHASE2_NAME, &act->phase2Serv, props);
 
 
 		dm_service_dependency_pt dep;
 		serviceDependency_create(&dep);
 		serviceDependency_setService(dep, PHASE1_NAME, NULL);
-        serviceDependency_setCallbacks(dep, phase2a_setPhase1, NULL, NULL, NULL, NULL);
+        serviceDependency_setCallbacksSafe(dep, phase2a_cmp_t *, phase1_t *, phase2a_setPhase1, NULL, NULL, NULL, NULL);
 		serviceDependency_setRequired(dep, true);
 		component_addServiceDependency(cmp, dep);
 

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase2a/private/src/phase2a_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/private/src/phase2a_cmp.c b/examples/dm_example/phase2a/private/src/phase2a_cmp.c
index 2afa0d2..27c610a 100644
--- a/examples/dm_example/phase2a/private/src/phase2a_cmp.c
+++ b/examples/dm_example/phase2a/private/src/phase2a_cmp.c
@@ -73,6 +73,11 @@ int phase2a_stop(phase2a_cmp_t *cmp) {
     return 0;
 }
 
+int phase2a_deinit(phase2a_cmp_t *cmp) {
+    printf("deinit phase1\n");
+    return 0;
+}
+
 void phase2a_destroy(phase2a_cmp_t *cmp) {
     celixThreadMutex_lock(&cmp->mutex);
     celixThreadMutex_destroy(&cmp->mutex);

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase2b/private/include/phase2b_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/private/include/phase2b_cmp.h b/examples/dm_example/phase2b/private/include/phase2b_cmp.h
index fedcd69..527975b 100644
--- a/examples/dm_example/phase2b/private/include/phase2b_cmp.h
+++ b/examples/dm_example/phase2b/private/include/phase2b_cmp.h
@@ -35,6 +35,7 @@ phase2b_cmp_t *phase2b_create(void);
 int phase2b_init(phase2b_cmp_t *cmp);
 int phase2b_start(phase2b_cmp_t *cmp);
 int phase2b_stop(phase2b_cmp_t *cmp);
+int phase2b_deinit(phase2b_cmp_t *cmp);
 void phase2b_destroy(phase2b_cmp_t *cmp);
 
 int phase2b_setPhase1(phase2b_cmp_t *cmp, phase1_t *phase1);

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase2b/private/src/phase2b_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/private/src/phase2b_activator.c b/examples/dm_example/phase2b/private/src/phase2b_activator.c
index 82bfef1..c715bf5 100644
--- a/examples/dm_example/phase2b/private/src/phase2b_activator.c
+++ b/examples/dm_example/phase2b/private/src/phase2b_activator.c
@@ -62,14 +62,14 @@ celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency
 		dm_component_pt cmp;
 		component_create(context, "PHASE2B_PROCESSING_COMPONENT", &cmp);
 		component_setImplementation(cmp, act->phase2bCmp);
-		component_setCallbacks(cmp, (void *)phase2b_init, (void *)phase2b_start, (void *)phase2b_stop, (void *)phase2b_destroy);
+		component_setCallbacksSafe(cmp, phase2b_cmp_t *, phase2b_init, phase2b_start, phase2b_stop, phase2b_deinit);
 		component_addInterface(cmp, PHASE2_NAME, &act->phase2Serv, props);
 
 
 		dm_service_dependency_pt dep;
 		serviceDependency_create(&dep);
 		serviceDependency_setService(dep, PHASE1_NAME, NULL);
-        serviceDependency_setCallbacks(dep, phase2b_setPhase1, NULL, NULL, NULL, NULL);
+		serviceDependency_setCallbacksSafe(dep, phase2b_cmp_t *, phase1_t *, phase2b_setPhase1, NULL, NULL, NULL, NULL);
 		serviceDependency_setRequired(dep, true);
 		component_addServiceDependency(cmp, dep);
 

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase2b/private/src/phase2b_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/private/src/phase2b_cmp.c b/examples/dm_example/phase2b/private/src/phase2b_cmp.c
index e1487b4..9d6d3d5 100644
--- a/examples/dm_example/phase2b/private/src/phase2b_cmp.c
+++ b/examples/dm_example/phase2b/private/src/phase2b_cmp.c
@@ -73,6 +73,11 @@ int phase2b_stop(phase2b_cmp_t *cmp) {
     return 0;
 }
 
+int phase2b_deinit(phase2b_cmp_t *cmp) {
+    printf("deinit phase1\n");
+    return 0;
+}
+
 void phase2b_destroy(phase2b_cmp_t *cmp) {
     celixThreadMutex_lock(&cmp->mutex);
     celixThreadMutex_destroy(&cmp->mutex);

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase3/private/include/phase3_cmp.h
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/private/include/phase3_cmp.h b/examples/dm_example/phase3/private/include/phase3_cmp.h
index 1b32f04..ec9282d 100644
--- a/examples/dm_example/phase3/private/include/phase3_cmp.h
+++ b/examples/dm_example/phase3/private/include/phase3_cmp.h
@@ -35,6 +35,7 @@ phase3_cmp_t *phase3_create(void);
 int phase3_init(phase3_cmp_t *cmp);
 int phase3_start(phase3_cmp_t *cmp);
 int phase3_stop(phase3_cmp_t *cmp);
+int phase3_deinit(phase3_cmp_t *cmp);
 void phase3_destroy(phase3_cmp_t *cmp);
 
 int phase3_addPhase2(phase3_cmp_t *cmp, phase2_t *phase2);

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase3/private/src/phase3_activator.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/private/src/phase3_activator.c b/examples/dm_example/phase3/private/src/phase3_activator.c
index 2d8f3df..d79b785 100644
--- a/examples/dm_example/phase3/private/src/phase3_activator.c
+++ b/examples/dm_example/phase3/private/src/phase3_activator.c
@@ -56,12 +56,12 @@ celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency
 		dm_component_pt cmp;
 		component_create(context, "PHASE3_PROCESSING_COMPONENT", &cmp);
 		component_setImplementation(cmp, act->phase3Cmp);
-		component_setCallbacks(cmp, (void *)phase3_init, (void *)phase3_start, (void *)phase3_stop, (void *)phase3_destroy);
+		component_setCallbacksSafe(cmp, phase3_cmp_t *, phase3_init, phase3_start, phase3_stop, phase3_deinit);
 
 		dm_service_dependency_pt dep;
 		serviceDependency_create(&dep);
 		serviceDependency_setService(dep, PHASE2_NAME, NULL);
-        serviceDependency_setCallbacks(dep, NULL, (void *)phase3_addPhase2, NULL, (void *)phase3_removePhase2, NULL);
+        serviceDependency_setCallbacksSafe(dep, phase3_cmp_t *, phase2_t *, NULL, phase3_addPhase2, NULL, phase3_removePhase2, NULL);
 		serviceDependency_setRequired(dep, true);
 		component_addServiceDependency(cmp, dep);
 

http://git-wip-us.apache.org/repos/asf/celix/blob/e302c2d3/examples/dm_example/phase3/private/src/phase3_cmp.c
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/private/src/phase3_cmp.c b/examples/dm_example/phase3/private/src/phase3_cmp.c
index 5cd9f53..6f5b99b 100644
--- a/examples/dm_example/phase3/private/src/phase3_cmp.c
+++ b/examples/dm_example/phase3/private/src/phase3_cmp.c
@@ -75,6 +75,11 @@ int phase3_stop(phase3_cmp_t *cmp) {
     return 0;
 }
 
+int phase3_deinit(phase3_cmp_t *cmp) {
+    printf("deinit phase1\n");
+    return 0;
+}
+
 void phase3_destroy(phase3_cmp_t *cmp) {
     celixThreadMutex_lock(&cmp->mutex);
     celixThreadMutex_destroy(&cmp->mutex);