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/10/15 09:56:46 UTC
celix git commit: CELIX-237: Fixed an issue in service_regisration,
the ungetService for a service factory was not correctly called
(wrong handle).
Repository: celix
Updated Branches:
refs/heads/develop 2fe04c0f4 -> aa1797ab9
CELIX-237: Fixed an issue in service_regisration, the ungetService for a service factory was not correctly called (wrong handle).
Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/aa1797ab
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/aa1797ab
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/aa1797ab
Branch: refs/heads/develop
Commit: aa1797ab90090ea556d4e367c390e5430cefea6c
Parents: 2fe04c0
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Thu Oct 15 09:56:00 2015 +0200
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Thu Oct 15 09:56:00 2015 +0200
----------------------------------------------------------------------
framework/private/src/service_registration.c | 2 +-
.../rsa/private/src/import_registration_dfi.c | 16 ++++++----------
2 files changed, 7 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/celix/blob/aa1797ab/framework/private/src/service_registration.c
----------------------------------------------------------------------
diff --git a/framework/private/src/service_registration.c b/framework/private/src/service_registration.c
index 82d0ee9..1817784 100644
--- a/framework/private/src/service_registration.c
+++ b/framework/private/src/service_registration.c
@@ -163,7 +163,7 @@ celix_status_t serviceRegistration_getService(service_registration_pt registrati
celix_status_t serviceRegistration_ungetService(service_registration_pt registration, bundle_pt bundle, void **service) {
if (registration->isServiceFactory) {
service_factory_pt factory = registration->serviceFactory;
- factory->ungetService(registration->serviceFactory, bundle, registration, service);
+ factory->ungetService(factory->factory, bundle, registration, service);
}
return CELIX_SUCCESS;
}
http://git-wip-us.apache.org/repos/asf/celix/blob/aa1797ab/remote_services/remote_service_admin_dfi/rsa/private/src/import_registration_dfi.c
----------------------------------------------------------------------
diff --git a/remote_services/remote_service_admin_dfi/rsa/private/src/import_registration_dfi.c b/remote_services/remote_service_admin_dfi/rsa/private/src/import_registration_dfi.c
index 8616f0c..cb40f0b 100644
--- a/remote_services/remote_service_admin_dfi/rsa/private/src/import_registration_dfi.c
+++ b/remote_services/remote_service_admin_dfi/rsa/private/src/import_registration_dfi.c
@@ -13,7 +13,6 @@ struct import_registration {
const char *classObject; //NOTE owned by endpoint
celix_thread_mutex_t mutex; //protects send & sendhandle
-
send_func_type send;
void *sendHandle;
@@ -27,7 +26,7 @@ struct import_registration {
struct service_proxy {
dyn_interface_type *intf;
void *service;
- int count;
+ size_t count;
};
static celix_status_t importRegistration_createProxy(import_registration_pt import, bundle_pt bundle,
@@ -128,12 +127,13 @@ celix_status_t importRegistration_start(import_registration_pt import) {
celix_status_t importRegistration_stop(import_registration_pt import) {
celix_status_t status = CELIX_SUCCESS;
- importRegistration_clearProxies(import);
-
if (import->factoryReg != NULL) {
serviceRegistration_unregister(import->factoryReg);
+ import->factoryReg = NULL;
}
+ importRegistration_clearProxies(import);
+
return status;
}
@@ -289,10 +289,6 @@ static void importRegistration_proxyFunc(void *userData, void *args[], void *ret
celix_status_t importRegistration_ungetService(import_registration_pt import, bundle_pt bundle, service_registration_pt registration, void **out) {
celix_status_t status = CELIX_SUCCESS;
- return status;
-
- /* TODO, FIXME ungetService can happen after importRegistration destroy leading to segfaults
-
assert(import != NULL);
assert(import->proxies != NULL);
@@ -307,14 +303,14 @@ celix_status_t importRegistration_ungetService(import_registration_pt import, bu
}
if (proxy->count == 0) {
+ hashMap_remove(import->proxies, bundle);
importRegistration_destroyProxy(proxy);
}
}
- pthread_mutex_lock(&import->proxiesMutex);
+ pthread_mutex_unlock(&import->proxiesMutex);
return status;
- */
}
static void importRegistration_destroyProxy(struct service_proxy *proxy) {