You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by bp...@apache.org on 2015/06/20 16:05:18 UTC
celix git commit: CELIX-240: copy export_registrations to dedicated
list to prevent deadlock during shutdown
Repository: celix
Updated Branches:
refs/heads/develop bdf8e0683 -> cabd41a75
CELIX-240: copy export_registrations to dedicated list to prevent deadlock during shutdown
Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/cabd41a7
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/cabd41a7
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/cabd41a7
Branch: refs/heads/develop
Commit: cabd41a75321afb27b20664250a5fc6cccf9dec6
Parents: bdf8e06
Author: Bjoern Petri <bp...@apache.org>
Authored: Sat Jun 20 16:03:14 2015 +0200
Committer: Bjoern Petri <bp...@apache.org>
Committed: Sat Jun 20 16:03:14 2015 +0200
----------------------------------------------------------------------
.../private/src/remote_service_admin_activator.c | 3 ++-
.../private/src/remote_service_admin_impl.c | 16 +++++++++++++++-
2 files changed, 17 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/celix/blob/cabd41a7/remote_services/remote_service_admin_http/private/src/remote_service_admin_activator.c
----------------------------------------------------------------------
diff --git a/remote_services/remote_service_admin_http/private/src/remote_service_admin_activator.c b/remote_services/remote_service_admin_http/private/src/remote_service_admin_activator.c
index e4125fc..1b4c59c 100644
--- a/remote_services/remote_service_admin_http/private/src/remote_service_admin_activator.c
+++ b/remote_services/remote_service_admin_http/private/src/remote_service_admin_activator.c
@@ -99,10 +99,11 @@ celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context)
celix_status_t status = CELIX_SUCCESS;
struct activator *activator = userData;
- remoteServiceAdmin_stop(activator->admin);
serviceRegistration_unregister(activator->registration);
activator->registration = NULL;
+ remoteServiceAdmin_stop(activator->admin);
+
remoteServiceAdmin_destroy(&activator->admin);
free(activator->adminService);
http://git-wip-us.apache.org/repos/asf/celix/blob/cabd41a7/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
----------------------------------------------------------------------
diff --git a/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c b/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
index 63e5192..319c849 100644
--- a/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
+++ b/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
@@ -207,18 +207,32 @@ celix_status_t remoteServiceAdmin_stop(remote_service_admin_pt admin) {
celixThreadMutex_lock(&admin->exportedServicesLock);
+ array_list_pt exportRegistrationList = NULL;
+
+ arrayList_create(&exportRegistrationList);
+
hash_map_iterator_pt iter = hashMapIterator_create(admin->exportedServices);
while (hashMapIterator_hasNext(iter)) {
array_list_pt exports = hashMapIterator_nextValue(iter);
int i;
+
for (i = 0; i < arrayList_size(exports); i++) {
export_registration_pt export = arrayList_get(exports, i);
- exportRegistration_stopTracking(export);
+ arrayList_add(exportRegistrationList, export);
}
}
hashMapIterator_destroy(iter);
celixThreadMutex_unlock(&admin->exportedServicesLock);
+ int i;
+
+ for (i = 0; i < arrayList_size(exportRegistrationList); i++) {
+ export_registration_pt export = arrayList_get(exportRegistrationList, i);
+ exportRegistration_stopTracking(export);
+ }
+
+ arrayList_destroy(exportRegistrationList);
+
celixThreadMutex_lock(&admin->importedServicesLock);
iter = hashMapIterator_create(admin->importedServices);