CELIX-375: Adapted TM locks for recursive behavior

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

Branch: refs/heads/release/celix-2.0.0
Commit: 5521c0c8a5af01169fe5b283405068e8d5ff43c8
Parents: d02d393
Author: gricciardi <griccia...@apache.org>
Authored: Mon Sep 26 14:06:38 2016 +0200
Committer: gricciardi <griccia...@apache.org>
Committed: Mon Sep 26 14:06:38 2016 +0200

----------------------------------------------------------------------
 .../topology_manager/private/src/topology_manager.c  | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/5521c0c8/remote_services/topology_manager/private/src/topology_manager.c
----------------------------------------------------------------------
diff --git a/remote_services/topology_manager/private/src/topology_manager.c 
b/remote_services/topology_manager/private/src/topology_manager.c
index 09f069d..6472b01 100644
--- a/remote_services/topology_manager/private/src/topology_manager.c
+++ b/remote_services/topology_manager/private/src/topology_manager.c
@@ -49,6 +49,7 @@ struct topology_manager {
        bundle_context_pt context;
 
        celix_thread_mutex_t rsaListLock;
+       celix_thread_mutexattr_t rsaListLockAttr;
        array_list_pt rsaList;
 
        celix_thread_mutex_t listenerListLock;
@@ -58,6 +59,7 @@ struct topology_manager {
        hash_map_pt exportedServices;
 
        celix_thread_mutex_t importedServicesLock;
+       celix_thread_mutexattr_t importedServicesLockAttr;
        hash_map_pt importedServices;
 
        scope_pt scope;
@@ -84,9 +86,16 @@ celix_status_t topologyManager_create(bundle_context_pt 
context, log_helper_pt l
 
        arrayList_create(&(*manager)->rsaList);
 
-       celixThreadMutex_create(&(*manager)->rsaListLock, NULL);
+
+       celixThreadMutexAttr_create(&(*manager)->rsaListLockAttr);
+       celixThreadMutexAttr_settype(&(*manager)->rsaListLockAttr, 
CELIX_THREAD_MUTEX_RECURSIVE);
+       celixThreadMutex_create(&(*manager)->rsaListLock, 
&(*manager)->rsaListLockAttr);
+
+       celixThreadMutexAttr_create(&(*manager)->importedServicesLockAttr);
+       celixThreadMutexAttr_settype(&(*manager)->importedServicesLockAttr, 
CELIX_THREAD_MUTEX_RECURSIVE);
+       celixThreadMutex_create(&(*manager)->importedServicesLock, 
&(*manager)->importedServicesLockAttr);
+
        celixThreadMutex_create(&(*manager)->exportedServicesLock, NULL);
-       celixThreadMutex_create(&(*manager)->importedServicesLock, NULL);
        celixThreadMutex_create(&(*manager)->listenerListLock, NULL);
 
        (*manager)->listenerList = hashMap_create(serviceReference_hashCode, 
NULL, serviceReference_equals2, NULL);
@@ -119,6 +128,7 @@ celix_status_t topologyManager_destroy(topology_manager_pt 
manager) {
 
        celixThreadMutex_unlock(&manager->rsaListLock);
        celixThreadMutex_destroy(&manager->rsaListLock);
+       celixThreadMutexAttr_destroy(&manager->rsaListLockAttr);
 
        celixThreadMutex_lock(&manager->exportedServicesLock);
 
@@ -133,6 +143,7 @@ celix_status_t topologyManager_destroy(topology_manager_pt 
manager) {
 
        celixThreadMutex_unlock(&manager->importedServicesLock);
        celixThreadMutex_destroy(&manager->importedServicesLock);
+       celixThreadMutexAttr_destroy(&manager->importedServicesLockAttr);
 
        scope_scopeDestroy(manager->scope);
        free(manager);

Reply via email to