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:34:33 UTC

celix git commit: CELIX-237: Fixed an issue with handling import registrations

Repository: celix
Updated Branches:
  refs/heads/develop 46144818a -> 2fe04c0f4


CELIX-237: Fixed an issue with handling import registrations


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

Branch: refs/heads/develop
Commit: 2fe04c0f4c0b284bfb0c2251098878e53083f259
Parents: 4614481
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Thu Oct 15 09:34:07 2015 +0200
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Thu Oct 15 09:34:07 2015 +0200

----------------------------------------------------------------------
 .../rsa/private/src/remote_service_admin_dfi.c  | 62 ++++++++++----------
 1 file changed, 31 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/2fe04c0f/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c
----------------------------------------------------------------------
diff --git a/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c b/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c
index 4bd8c58..db48634 100644
--- a/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c
+++ b/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c
@@ -50,13 +50,13 @@
 #define MAX_NUMBER_OF_RESTARTS 	5
 
 
-#define LOG_ERROR(admin, msg, ...) \
+#define RSA_LOG_ERROR(admin, msg, ...) \
     logHelper_log((admin)->loghelper, OSGI_LOGSERVICE_ERROR, (msg),  ##__VA_ARGS__)
 
-#define LOG_WARNING(admin, msg, ...) \
+#define RSA_LOG_WARNING(admin, msg, ...) \
     logHelper_log((admin)->loghelper, OSGI_LOGSERVICE_ERROR, (msg),  ##__VA_ARGS__)
 
-#define LOG_DEBUG(admin, msg, ...) \
+#define RSA_LOG_DEBUG(admin, msg, ...) \
     logHelper_log((admin)->loghelper, OSGI_LOGSERVICE_ERROR, (msg),  ##__VA_ARGS__)
 
 struct remote_service_admin {
@@ -67,7 +67,7 @@ struct remote_service_admin {
     hash_map_pt exportedServices;
 
     celix_thread_mutex_t importedServicesLock;
-    hash_map_pt importedServices;
+    array_list_pt importedServices;
 
     char *port;
     char *ip;
@@ -128,7 +128,7 @@ celix_status_t remoteServiceAdmin_create(bundle_context_pt context, remote_servi
         char *detectedIp = NULL;
         (*admin)->context = context;
         (*admin)->exportedServices = hashMap_create(NULL, NULL, NULL, NULL);
-        (*admin)->importedServices = hashMap_create(NULL, NULL, NULL, NULL);
+         arrayList_create(&(*admin)->importedServices);
 
         celixThreadMutex_create(&(*admin)->exportedServicesLock, NULL);
         celixThreadMutex_create(&(*admin)->importedServicesLock, NULL);
@@ -251,20 +251,14 @@ celix_status_t remoteServiceAdmin_stop(remote_service_admin_pt admin) {
     celixThreadMutex_unlock(&admin->exportedServicesLock);
 
     celixThreadMutex_lock(&admin->importedServicesLock);
-
-    iter = hashMapIterator_create(admin->importedServices);
-    while (hashMapIterator_hasNext(iter))
-    {
-
-        hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
-        import_registration_pt import = hashMapEntry_getValue(entry);
-
+    int i;
+    int size = arrayList_size(admin->importedServices);
+    for (i = 0; i < size ; i += 1) {
+        import_registration_pt import = arrayList_get(admin->importedServices, i);
         if (import != NULL) {
             importRegistration_stop(import);
         }
     }
-
-    hashMapIterator_destroy(iter);
     celixThreadMutex_unlock(&admin->importedServicesLock);
 
     if (admin->ctx != NULL) {
@@ -274,7 +268,7 @@ celix_status_t remoteServiceAdmin_stop(remote_service_admin_pt admin) {
     }
 
     hashMap_destroy(admin->exportedServices, false, false);
-    hashMap_destroy(admin->importedServices, false, false);
+    arrayList_destroy(admin->importedServices);
 
     logHelper_stop(admin->loghelper);
     logHelper_destroy(&admin->loghelper);
@@ -344,16 +338,13 @@ static int remoteServiceAdmin_callback(struct mg_connection *conn) {
                 char *response = NULL;
                 int responceLength = 0;
                 int rc = exportRegistration_call(export, data, -1, &response, &responceLength);
-                //TODO check rc
+                if (rc != CELIX_SUCCESS) {
+                    RSA_LOG_ERROR(rsa, "Error trying to invoke remove service, got error %i\n", rc);
+                }
 
-                if (response != NULL) {
+                if (rc == CELIX_SUCCESS && response != NULL) {
                     mg_write(conn, data_response_headers, strlen(data_response_headers));
-//              mg_write(conn, no_content_response_headers, strlen(no_content_response_headers));
-                    //printf("writing response '%s'\n", response);
                     mg_write(conn, response, strlen(response));
-//              mg_send_data(conn, response, strlen(response));
-//              mg_write_data(conn, response, strlen(response));
-
                     free(response);
                 } else {
                     mg_write(conn, no_content_response_headers, strlen(no_content_response_headers));
@@ -363,7 +354,7 @@ static int remoteServiceAdmin_callback(struct mg_connection *conn) {
                 free(data);
             } else {
                 result = 0;
-                //TODO log warning
+                RSA_LOG_WARNING(rsa, "NO export registration found for service id %i", serviceId);
             }
 
             celixThreadMutex_unlock(&rsa->exportedServicesLock);
@@ -446,7 +437,7 @@ celix_status_t remoteServiceAdmin_removeExportedService(remote_service_admin_pt
     celix_status_t status = CELIX_SUCCESS;
     logHelper_log(admin->loghelper, OSGI_LOGSERVICE_INFO, "RSA_DFI: Removing exported service");
 
-    service_reference_pt  ref = NULL;
+    export_reference_pt  ref = NULL;
     status = exportRegistration_getExportReference(registration, &ref);
 
     if (status == CELIX_SUCCESS) {
@@ -456,7 +447,7 @@ celix_status_t remoteServiceAdmin_removeExportedService(remote_service_admin_pt
         hashMap_remove(admin->exportedServices, ref);
         celixThreadMutex_unlock(&admin->exportedServicesLock);
     } else {
-        LOG_ERROR(admin, "Cannot find reference for registration");
+        RSA_LOG_ERROR(admin, "Cannot find reference for registration");
     }
 
 
@@ -600,7 +591,7 @@ celix_status_t remoteServiceAdmin_importService(remote_service_admin_pt admin, e
         status = importRegistration_create(admin->context, endpointDescription, objectClass, &import);
     }
     if (status == CELIX_SUCCESS) {
-        importRegistration_setSendFn(import, remoteServiceAdmin_send, admin);
+        importRegistration_setSendFn(import, (send_func_type) remoteServiceAdmin_send, admin);
     }
 
     if (status == CELIX_SUCCESS) {
@@ -608,7 +599,7 @@ celix_status_t remoteServiceAdmin_importService(remote_service_admin_pt admin, e
     }
 
     celixThreadMutex_lock(&admin->importedServicesLock);
-    hashMap_put(admin->importedServices, import, import);
+    arrayList_add(admin->importedServices, import);
     celixThreadMutex_unlock(&admin->importedServicesLock);
 
     if (status == CELIX_SUCCESS) {
@@ -624,9 +615,18 @@ celix_status_t remoteServiceAdmin_removeImportedService(remote_service_admin_pt
     logHelper_log(admin->loghelper, OSGI_LOGSERVICE_INFO, "RSA_DFI: Removing imported service");
 
     celixThreadMutex_lock(&admin->importedServicesLock);
-    importRegistration_close(registration);
-    //importRegistration_destroy(registration); TODO enable & debug -> segfault
-    hashMap_remove(admin->importedServices, registration);
+    int i;
+    int size = arrayList_size(admin->importedServices);
+    import_registration_pt  current  = NULL;
+    for (i = 0; i < size; i += 1) {
+        current = arrayList_get(admin->importedServices, i);
+        if (current == registration) {
+            arrayList_remove(admin->importedServices, i);
+            importRegistration_close(current);
+            //TODO, FIXME -> segfault. importRegistration_destroy(current);
+            break;
+        }
+    }
     celixThreadMutex_unlock(&admin->importedServicesLock);
 
     return status;