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, ®->interceptorsHandler);
- celixThreadMutex_create(®->mutex, NULL);
celixThreadMutex_create(®->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(®->mutex);
- reg->send = send;
- reg->sendHandle = handle;
- celixThreadMutex_unlock(®->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) {