This is an automated email from the ASF dual-hosted git repository.

pnoltes pushed a commit to branch feature/use_async_api_for_rsa
in repository https://gitbox.apache.org/repos/asf/celix.git


The following commit(s) were added to refs/heads/feature/use_async_api_for_rsa 
by this push:
     new 80daccb  Add RSA send fn as ctor argument to import registration
80daccb is described below

commit 80daccb502703b762e35b50c3ba224433d50c164
Author: Pepijn Noltes <[email protected]>
AuthorDate: Sat May 22 14:13:08 2021 +0200

    Add RSA send fn as ctor argument to import registration
---
 .../src/import_registration_dfi.c                  | 33 ++++++++--------------
 .../src/import_registration_dfi.h                  | 14 +++++----
 .../src/remote_service_admin_dfi.c                 | 12 ++++----
 3 files changed, 27 insertions(+), 32 deletions(-)

diff --git 
a/bundles/remote_services/remote_service_admin_dfi/src/import_registration_dfi.c
 
b/bundles/remote_services/remote_service_admin_dfi/src/import_registration_dfi.c
index 351415a..70221c2 100644
--- 
a/bundles/remote_services/remote_service_admin_dfi/src/import_registration_dfi.c
+++ 
b/bundles/remote_services/remote_service_admin_dfi/src/import_registration_dfi.c
@@ -34,7 +34,6 @@ struct import_registration {
     const char *classObject; //NOTE owned by endpoint
     version_pt version;
 
-    celix_thread_mutex_t mutex; //protects send & sendhandle
     send_func_type send;
     void *sendHandle;
 
@@ -67,17 +66,26 @@ static const char* 
importRegistration_getServiceName(import_registration_t *reg)
 static void* importRegistration_getService(void *handle, const celix_bundle_t 
*requestingBundle, const celix_properties_t *svcProperties);
 void importRegistration_ungetService(void *handle, const celix_bundle_t 
*requestingBundle, const celix_properties_t *svcProperties);
 
-celix_status_t importRegistration_create(celix_bundle_context_t *context, 
endpoint_description_t *endpoint, const char *classObject, const char* 
serviceVersion, FILE *logFile, import_registration_t **out) {
+celix_status_t importRegistration_create(
+        celix_bundle_context_t *context,
+        endpoint_description_t *endpoint,
+        const char *classObject,
+        const char* serviceVersion,
+        send_func_type sendFn,
+        void* sendFnHandle,
+        FILE *logFile,
+        import_registration_t **out) {
     celix_status_t status = CELIX_SUCCESS;
     import_registration_t *reg = calloc(1, sizeof(*reg));
     reg->context = context;
     reg->endpoint = endpoint;
     reg->classObject = classObject;
+    reg->send = sendFn;
+    reg->sendHandle = sendFnHandle;
     reg->proxies = hashMap_create(NULL, NULL, NULL, NULL);
 
     remoteInterceptorsHandler_create(context, &reg->interceptorsHandler);
 
-    celixThreadMutex_create(&reg->mutex, NULL);
     celixThreadMutex_create(&reg->proxiesMutex, NULL);
     status = 
version_createVersionFromString((char*)serviceVersion,&(reg->version));
 
@@ -98,18 +106,6 @@ celix_status_t 
importRegistration_create(celix_bundle_context_t *context, endpoi
     return status;
 }
 
-
-celix_status_t importRegistration_setSendFn(import_registration_t *reg,
-                                            send_func_type send,
-                                            void *handle) {
-    celixThreadMutex_lock(&reg->mutex);
-    reg->send = send;
-    reg->sendHandle = handle;
-    celixThreadMutex_unlock(&reg->mutex);
-
-    return CELIX_SUCCESS;
-}
-
 static void importRegistration_clearProxies(import_registration_t *import) {
     if (import != NULL) {
         pthread_mutex_lock(&import->proxiesMutex);
@@ -136,7 +132,6 @@ static void importRegistration_destroyCallback(void* data) {
 
     remoteInterceptorsHandler_destroy(import->interceptorsHandler);
 
-    pthread_mutex_destroy(&import->mutex);
     pthread_mutex_destroy(&import->proxiesMutex);
 
     if (import->version != NULL) {
@@ -339,11 +334,7 @@ static void importRegistration_proxyFunc(void *userData, 
void *args[], void *ret
         celix_properties_t *metadata = NULL;
         bool cont = 
remoteInterceptorHandler_invokePreProxyCall(import->interceptorsHandler, 
import->endpoint->properties, entry->name, &metadata);
         if (cont) {
-            celixThreadMutex_lock(&import->mutex);
-            if (import->send != NULL) {
-                import->send(import->sendHandle, import->endpoint, 
invokeRequest, metadata, &reply, &rc);
-            }
-            celixThreadMutex_unlock(&import->mutex);
+            import->send(import->sendHandle, import->endpoint, invokeRequest, 
metadata, &reply, &rc);
             //printf("request sended. got reply '%s' with status %i\n", reply, 
rc);
 
             if (rc == 0 && dynFunction_hasReturn(entry->dynFunc)) {
diff --git 
a/bundles/remote_services/remote_service_admin_dfi/src/import_registration_dfi.h
 
b/bundles/remote_services/remote_service_admin_dfi/src/import_registration_dfi.h
index 9c4951e..75d40bb 100644
--- 
a/bundles/remote_services/remote_service_admin_dfi/src/import_registration_dfi.h
+++ 
b/bundles/remote_services/remote_service_admin_dfi/src/import_registration_dfi.h
@@ -27,13 +27,17 @@
 
 typedef void (*send_func_type)(void *handle, endpoint_description_t 
*endpointDescription, char *request, celix_properties_t *metadata, char 
**reply, int* replyStatus);
 
-celix_status_t importRegistration_create(celix_bundle_context_t *context, 
endpoint_description_t *description, const char *classObject, const char* 
serviceVersion, FILE *logFile,
-                                         import_registration_t **import);
+celix_status_t importRegistration_create(
+        celix_bundle_context_t *context,
+        endpoint_description_t *description,
+        const char *classObject,
+        const char* serviceVersion,
+        send_func_type sendFn,
+        void* sendFnHandle,
+        FILE *logFile,
+        import_registration_t **import);
 void importRegistration_destroy(import_registration_t *import);
 
-celix_status_t importRegistration_setSendFn(import_registration_t *reg,
-                                            send_func_type,
-                                            void *handle);
 celix_status_t importRegistration_start(import_registration_t *import);
 
 #endif //CELIX_IMPORT_REGISTRATION_DFI_H
diff --git 
a/bundles/remote_services/remote_service_admin_dfi/src/remote_service_admin_dfi.c
 
b/bundles/remote_services/remote_service_admin_dfi/src/remote_service_admin_dfi.c
index 432d79d..cbfc9a0 100644
--- 
a/bundles/remote_services/remote_service_admin_dfi/src/remote_service_admin_dfi.c
+++ 
b/bundles/remote_services/remote_service_admin_dfi/src/remote_service_admin_dfi.c
@@ -288,10 +288,11 @@ celix_status_t 
remoteServiceAdmin_create(celix_bundle_context_t *context, remote
 }
 
 
-celix_status_t remoteServiceAdmin_destroy(remote_service_admin_t **admin)
-{
+celix_status_t remoteServiceAdmin_destroy(remote_service_admin_t **admin) {
     celix_status_t status = CELIX_SUCCESS;
 
+    celix_bundleContext_waitForEvents((*admin)->context);
+
     if ( (*admin)->logFile != NULL && (*admin)->logFile != stdout) {
         fclose((*admin)->logFile);
     }
@@ -837,10 +838,9 @@ celix_status_t 
remoteServiceAdmin_importService(remote_service_admin_t *admin, e
 
         if (objectClass != NULL) {
             status = importRegistration_create(admin->context, 
endpointDescription, objectClass, serviceVersion,
-                                               admin->logFile, &import);
-        }
-        if (status == CELIX_SUCCESS && import != NULL) {
-            importRegistration_setSendFn(import, (send_func_type) 
remoteServiceAdmin_send, admin);
+                                               (send_func_type 
)remoteServiceAdmin_send, admin,
+                                               admin->logFile,
+                                               &import);
         }
 
         if (status == CELIX_SUCCESS && import != NULL) {

Reply via email to