You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by ab...@apache.org on 2014/09/22 10:18:27 UTC
svn commit: r1626693 - in /celix/trunk: framework/private/src/
remote_services/remote_service_admin/
remote_services/remote_service_admin_http/private/src/
remote_services/topology_manager/private/src/ shell/private/src/
Author: abroekhuis
Date: Mon Sep 22 08:18:26 2014
New Revision: 1626693
URL: http://svn.apache.org/r1626693
Log:
Applied several fixes to improve stability.
Modified:
celix/trunk/framework/private/src/bundle_archive.c
celix/trunk/framework/private/src/service_tracker.c
celix/trunk/remote_services/remote_service_admin/CMakeLists.txt
celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
celix/trunk/remote_services/topology_manager/private/src/activator.c
celix/trunk/remote_services/topology_manager/private/src/topology_manager.c
celix/trunk/shell/private/src/shell.c
Modified: celix/trunk/framework/private/src/bundle_archive.c
URL: http://svn.apache.org/viewvc/celix/trunk/framework/private/src/bundle_archive.c?rev=1626693&r1=1626692&r2=1626693&view=diff
==============================================================================
--- celix/trunk/framework/private/src/bundle_archive.c (original)
+++ celix/trunk/framework/private/src/bundle_archive.c Mon Sep 22 08:18:26 2014
@@ -120,9 +120,14 @@ celix_status_t bundleArchive_create(fram
archive->logger = logger;
time(&archive->lastModified);
- bundleArchive_initialize(archive);
+ status = bundleArchive_initialize(archive);
+ if (status == CELIX_SUCCESS) {
+ status = bundleArchive_revise(archive, location, inputFile);
- bundleArchive_revise(archive, location, inputFile);
+ if (status != CELIX_SUCCESS) {
+ bundleArchive_closeAndDelete(archive);
+ }
+ }
*bundle_archive = archive;
}
@@ -188,7 +193,7 @@ celix_status_t bundleArchive_recreate(ch
} else {
struct dirent *dent;
long idx = 0;
- char *location;
+ char *location = NULL;
while ((dent = readdir(archive->archiveRootDir)) != NULL) {
if (dent->d_type == DT_DIR && (strncmp(dent->d_name, "version", 7) == 0)) {
@@ -198,7 +203,9 @@ celix_status_t bundleArchive_recreate(ch
status = CELIX_DO_IF(status, bundleArchive_getRevisionLocation(archive, 0, &location));
status = CELIX_DO_IF(status, bundleArchive_reviseInternal(archive, true, idx, location, NULL));
- free(location);
+ if (location) {
+ free(location);
+ }
if (status == CELIX_SUCCESS) {
*bundle_archive = archive;
}
Modified: celix/trunk/framework/private/src/service_tracker.c
URL: http://svn.apache.org/viewvc/celix/trunk/framework/private/src/service_tracker.c?rev=1626693&r1=1626692&r2=1626693&view=diff
==============================================================================
--- celix/trunk/framework/private/src/service_tracker.c (original)
+++ celix/trunk/framework/private/src/service_tracker.c Mon Sep 22 08:18:26 2014
@@ -81,6 +81,9 @@ celix_status_t serviceTracker_destroy(se
if (tracker->listener != NULL) {
bundleContext_removeServiceListener(tracker->context, tracker->listener);
}
+ if (tracker->customizer != NULL) {
+ serviceTrackerCustomizer_destroy(tracker->customizer);
+ }
arrayList_destroy(tracker->tracked);
return CELIX_SUCCESS;
@@ -286,10 +289,10 @@ static celix_status_t serviceTracker_ad
if (status == CELIX_SUCCESS) {
if (function != NULL) {
status = function(handle, reference, service);
+ } else {
+ status = bundleContext_getService(tracker->context, reference, service);
}
}
- } else {
- status = bundleContext_getService(tracker->context, reference, service);
}
} else {
status = bundleContext_getService(tracker->context, reference, service);
Modified: celix/trunk/remote_services/remote_service_admin/CMakeLists.txt
URL: http://svn.apache.org/viewvc/celix/trunk/remote_services/remote_service_admin/CMakeLists.txt?rev=1626693&r1=1626692&r2=1626693&view=diff
==============================================================================
--- celix/trunk/remote_services/remote_service_admin/CMakeLists.txt (original)
+++ celix/trunk/remote_services/remote_service_admin/CMakeLists.txt Mon Sep 22 08:18:26 2014
@@ -25,6 +25,7 @@ install (FILES
public/include/remote_endpoint.h
public/include/remote_proxy.h
public/include/remote_service_admin.h
+ public/include/endpoint_description.h
DESTINATION
include/celix/remote_service_admin
COMPONENT
Modified: celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
URL: http://svn.apache.org/viewvc/celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c?rev=1626693&r1=1626692&r2=1626693&view=diff
==============================================================================
--- celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c (original)
+++ celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c Mon Sep 22 08:18:26 2014
@@ -316,8 +316,8 @@ celix_status_t remoteServiceAdmin_remove
remote_service_admin_pt admin = registration->rsa;
array_list_pt registrations = NULL;
+ printf("Remote export %p\n", registration->reference);
registrations = hashMap_remove(admin->exportedServices, registration->reference);
- // Registrations are allocated on the RSA pool, so there is a "leak" here. Removed services still consume memory
return CELIX_SUCCESS;
}
@@ -445,8 +445,10 @@ celix_status_t remoteServiceAdmin_import
// check whether we already have a registration_factory
if (registration_factory == NULL)
{
- importRegistrationFactory_install(admin->pool, endpointDescription->service, admin->context, ®istration_factory);
- hashMap_put(admin->importedServices, endpointDescription->service, registration_factory);
+ status = importRegistrationFactory_install(admin->pool, endpointDescription->service, admin->context, ®istration_factory);
+ if (status == CELIX_SUCCESS) {
+ hashMap_put(admin->importedServices, endpointDescription->service, registration_factory);
+ }
}
// factory available
Modified: celix/trunk/remote_services/topology_manager/private/src/activator.c
URL: http://svn.apache.org/viewvc/celix/trunk/remote_services/topology_manager/private/src/activator.c?rev=1626693&r1=1626692&r2=1626693&view=diff
==============================================================================
--- celix/trunk/remote_services/topology_manager/private/src/activator.c (original)
+++ celix/trunk/remote_services/topology_manager/private/src/activator.c Mon Sep 22 08:18:26 2014
@@ -155,6 +155,23 @@ celix_status_t bundleActivator_start(voi
bundleContext_addServiceListener(context, activator->serviceListener, "(service.exported.interfaces=*)");
serviceTracker_open(activator->remoteServiceAdminTracker);
+ array_list_pt references = NULL;
+ bundleContext_getServiceReferences(context, NULL, "(service.exported.interfaces=*)", &references);
+ int i;
+ for (i = 0; i < arrayList_size(references); i++) {
+ service_reference_pt reference = arrayList_get(references, i);
+
+ service_registration_pt registration = NULL;
+ serviceReference_getServiceRegistration(reference, ®istration);
+ properties_pt props = NULL;
+ serviceRegistration_getProperties(registration, &props);
+ char *serviceId = properties_get(props, (char *)OSGI_FRAMEWORK_SERVICE_ID);
+
+ status = topologyManager_addExportedService(activator->manager, reference, serviceId);
+ }
+
+
+
return status;
}
Modified: celix/trunk/remote_services/topology_manager/private/src/topology_manager.c
URL: http://svn.apache.org/viewvc/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c?rev=1626693&r1=1626692&r2=1626693&view=diff
==============================================================================
--- celix/trunk/remote_services/topology_manager/private/src/topology_manager.c (original)
+++ celix/trunk/remote_services/topology_manager/private/src/topology_manager.c Mon Sep 22 08:18:26 2014
@@ -291,24 +291,31 @@ celix_status_t topologyManager_removeImp
status = celixThreadMutex_lock(&manager->importedServicesLock);
- if (hashMap_containsKey(manager->importedServices, endpoint)) {
- hash_map_pt imports = hashMap_get(manager->importedServices, endpoint);
- hash_map_iterator_pt iter = hashMapIterator_create(imports);
+ hash_map_iterator_pt iter = hashMapIterator_create(manager->importedServices);
+ while (hashMapIterator_hasNext(iter)) {
+ hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
+ endpoint_description_pt ep = hashMapEntry_getKey(entry);
+ hash_map_pt imports = hashMapEntry_getValue(entry);
+
+ if (strcmp(endpoint->id, ep->id) == 0) {
+ hash_map_iterator_pt importsIter = hashMapIterator_create(imports);
+
+ while (hashMapIterator_hasNext(importsIter)) {
+ hash_map_entry_pt entry = hashMapIterator_nextEntry(importsIter);
+
+ remote_service_admin_service_pt rsa = hashMapEntry_getKey(entry);
+ import_registration_pt import = hashMapEntry_getValue(entry);
+
+ status = rsa->importRegistration_close(rsa->admin, import);
+ if (status == CELIX_SUCCESS) {
+ hashMap_remove(imports, rsa);
+ }
+ }
- while (hashMapIterator_hasNext(iter)) {
- hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
-
- remote_service_admin_service_pt rsa = hashMapEntry_getKey(entry);
- import_registration_pt import = hashMapEntry_getValue(entry);
-
- status = rsa->importRegistration_close(rsa->admin, import);
- if (status == CELIX_SUCCESS) {
- hashMap_remove(imports, rsa);
- }
- }
-
- hashMapIterator_destroy(iter);
+ hashMapIterator_destroy(importsIter);
+ }
}
+ hashMapIterator_destroy(iter);
status = celixThreadMutex_unlock(&manager->importedServicesLock);
Modified: celix/trunk/shell/private/src/shell.c
URL: http://svn.apache.org/viewvc/celix/trunk/shell/private/src/shell.c?rev=1626693&r1=1626692&r2=1626693&view=diff
==============================================================================
--- celix/trunk/shell/private/src/shell.c (original)
+++ celix/trunk/shell/private/src/shell.c Mon Sep 22 08:18:26 2014
@@ -236,6 +236,15 @@ celix_status_t bundleActivator_start(voi
listener->serviceChanged = (void *) shell_serviceChanged;
status = bundleContext_addServiceListener(context, listener, "(objectClass=commandService)");
+ array_list_pt references = NULL;
+ status = bundleContext_getServiceReferences(context, "commandService", NULL, &references);
+ if (status == CELIX_SUCCESS) {
+ int i = 0;
+ for (i = 0; i < arrayList_size(references); i++) {
+ shell_addCommand(activator->shell, arrayList_get(references, i));
+ }
+ }
+
if (status == CELIX_SUCCESS) {
activator->psCmd = psCommand_create(context);
shell_createCommandService(activator->pool, activator->psCmd, &activator->psCmdSrv);