http://git-wip-us.apache.org/repos/asf/celix/blob/7efe4331/pubsub/pubsub_common/public/src/dyn_msg_utils.c
----------------------------------------------------------------------
diff --git a/pubsub/pubsub_common/public/src/dyn_msg_utils.c 
b/pubsub/pubsub_common/public/src/dyn_msg_utils.c
deleted file mode 100644
index 1c6bbcd..0000000
--- a/pubsub/pubsub_common/public/src/dyn_msg_utils.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- *Licensed to the Apache Software Foundation (ASF) under one
- *or more contributor license agreements.  See the NOTICE file
- *distributed with this work for additional information
- *regarding copyright ownership.  The ASF licenses this file
- *to you under the Apache License, Version 2.0 (the
- *"License"); you may not use this file except in compliance
- *with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *Unless required by applicable law or agreed to in writing,
- *software distributed under the License is distributed on an
- *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- *specific language governing permissions and limitations
- *under the License.
- */
-/*
- * dyn_msg_utils.c
- *
- *  \date       Nov 11, 2015
- *  \author            <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
- *  \copyright Apache License, Version 2.0
- */
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <dirent.h>
-
-#include "utils.h"
-#include "dyn_message.h"
-
-#include "dyn_msg_utils.h"
-
-#define SYSTEM_BUNDLE_ARCHIVE_PATH             "CELIX_FRAMEWORK_EXTENDER_PATH"
-
-static char * getMsgDescriptionDir(bundle_pt bundle);
-static void addMsgDescriptorsFromBundle(const char *root, bundle_pt bundle, 
hash_map_pt msgTypesMap);
-
-
-unsigned int uintHash(const void * uintNum) {
-       return *((unsigned int*)uintNum);
-}
-
-int uintEquals(const void * uintNum, const void * toCompare) {
-       return ( (*((unsigned int*)uintNum)) == (*((unsigned int*)toCompare)) );
-}
-
-void fillMsgTypesMap(hash_map_pt msgTypesMap,bundle_pt bundle){
-
-       char *root = NULL;
-       char *metaInfPath = NULL;
-
-       root = getMsgDescriptionDir(bundle);
-
-       if(root != NULL){
-               asprintf(&metaInfPath, "%s/META-INF/descriptors/messages", 
root);
-
-               addMsgDescriptorsFromBundle(root, bundle, msgTypesMap);
-               addMsgDescriptorsFromBundle(metaInfPath, bundle, msgTypesMap);
-
-               free(metaInfPath);
-               free(root);
-       }
-}
-
-void emptyMsgTypesMap(hash_map_pt msgTypesMap)
-{
-       hash_map_iterator_pt iter = hashMapIterator_create(msgTypesMap);
-
-       while(hashMapIterator_hasNext(iter)){
-               hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
-               dynMessage_destroy( ((dyn_message_type *) 
hashMapEntry_getValue(entry)) );
-       }
-       hashMap_clear(msgTypesMap, true, false);
-       hashMapIterator_destroy(iter);
-}
-
-static char * getMsgDescriptionDir(bundle_pt bundle)
-{
-       char *root = NULL;
-
-       bool isSystemBundle = false;
-       bundle_isSystemBundle(bundle, &isSystemBundle);
-
-       if(isSystemBundle == true) {
-               bundle_context_pt context;
-               bundle_getContext(bundle, &context);
-
-               const char *prop = NULL;
-
-               bundleContext_getProperty(context, SYSTEM_BUNDLE_ARCHIVE_PATH, 
&prop);
-
-               if(prop != NULL) {
-                       root = strdup(prop);
-               } else {
-                       root = getcwd(NULL, 0);
-               }
-       } else {
-               bundle_getEntry(bundle, ".", &root);
-       }
-
-       return root;
-}
-
-
-static void addMsgDescriptorsFromBundle(const char *root, bundle_pt bundle, 
hash_map_pt msgTypesMap)
-{
-       char path[128];
-       struct dirent *entry = NULL;
-       DIR *dir = opendir(root);
-
-       if(dir) {
-               entry = readdir(dir);
-       }
-
-       while (entry != NULL) {
-
-               if (strstr(entry->d_name, ".descriptor") != NULL) {
-
-                       printf("DMU: Parsing entry '%s'\n", entry->d_name);
-
-                       memset(path,0,128);
-                       snprintf(path, 128, "%s/%s", root, entry->d_name);
-                       FILE *stream = fopen(path,"r");
-
-                       if (stream != NULL){
-                               dyn_message_type* msgType = NULL;
-
-                               int rc = dynMessage_parse(stream, &msgType);
-                               if (rc == 0 && msgType!=NULL) {
-
-                                       char* msgName = NULL;
-                                       dynMessage_getName(msgType,&msgName);
-
-                                       if(msgName!=NULL){
-                                               unsigned int* msgId = 
malloc(sizeof(unsigned int));
-                                               *msgId = 
utils_stringHash(msgName);
-                                               
hashMap_put(msgTypesMap,msgId,msgType);
-                                       }
-
-                               }
-                               else{
-                                       printf("DMU: cannot parse message from 
descriptor %s\n.",path);
-                               }
-                               fclose(stream);
-                       }else{
-                               printf("DMU: cannot open descriptor file 
%s\n.",path);
-                       }
-
-               }
-               entry = readdir(dir);
-       }
-
-       if(dir) {
-               closedir(dir);
-       }
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/7efe4331/pubsub/pubsub_serializer_json/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/pubsub/pubsub_serializer_json/CMakeLists.txt 
b/pubsub/pubsub_serializer_json/CMakeLists.txt
index 61b1cd9..a5798a4 100644
--- a/pubsub/pubsub_serializer_json/CMakeLists.txt
+++ b/pubsub/pubsub_serializer_json/CMakeLists.txt
@@ -32,7 +32,6 @@ 
add_bundle(org.apache.celix.pubsub_serializer.PubSubSerializerJson
     SOURCES
        private/src/ps_activator.c
        private/src/pubsub_serializer_impl.c
-       ${PROJECT_SOURCE_DIR}/pubsub/pubsub_common/public/src/dyn_msg_utils.c
        ${PROJECT_SOURCE_DIR}/pubsub/pubsub_common/public/src/log_helper.c
        ${PROJECT_SOURCE_DIR}/pubsub/pubsub_common/public/src/pubsub_utils.c
 )

http://git-wip-us.apache.org/repos/asf/celix/blob/7efe4331/pubsub/pubsub_serializer_json/private/include/pubsub_serializer_impl.h
----------------------------------------------------------------------
diff --git 
a/pubsub/pubsub_serializer_json/private/include/pubsub_serializer_impl.h 
b/pubsub/pubsub_serializer_json/private/include/pubsub_serializer_impl.h
index f026300..5299808 100644
--- a/pubsub/pubsub_serializer_json/private/include/pubsub_serializer_impl.h
+++ b/pubsub/pubsub_serializer_json/private/include/pubsub_serializer_impl.h
@@ -34,32 +34,25 @@
 
 #include "pubsub_serializer.h"
 
-struct _pubsub_message_type {  /* _dyn_message_type */
-       struct namvals_head header;
-       struct namvals_head annotations;
-       struct types_head types;
-       dyn_type *msgType;
-       version_pt msgVersion;
-};
-
-struct pubsub_serializer {
+typedef struct pubsub_serializer {
        bundle_context_pt bundle_context;
        log_helper_pt loghelper;
-};
-
-celix_status_t pubsubSerializer_create(bundle_context_pt context, 
pubsub_serializer_pt *serializer);
-celix_status_t pubsubSerializer_destroy(pubsub_serializer_pt serializer);
+} pubsub_serializer_t;
 
-/* Start of serializer specific functions */
-celix_status_t pubsubSerializer_serialize(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType, const void *input, void **output, int *outputLen);
-celix_status_t pubsubSerializer_deserialize(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType, const void *input, void **output);
+typedef struct pubsub_msg_serializer_impl {
+    pubsub_msg_serializer_t msgSerializer;
+    dyn_message_type* dynMsg;
+} pubsub_msg_serializer_impl_t;
 
-void pubsubSerializer_fillMsgTypesMap(pubsub_serializer_pt serializer, 
hash_map_pt msgTypesMap,bundle_pt bundle);
-void pubsubSerializer_emptyMsgTypesMap(pubsub_serializer_pt serializer, 
hash_map_pt msgTypesMap);
+celix_status_t pubsubSerializer_create(bundle_context_pt context, 
pubsub_serializer_t* *serializer);
+celix_status_t pubsubSerializer_destroy(pubsub_serializer_t* serializer);
 
-version_pt pubsubSerializer_getVersion(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType);
-char* pubsubSerializer_getName(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType);
-void pubsubSerializer_freeMsg(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType, void *msg);
+celix_status_t pubsubSerializer_createSerializerMap(pubsub_serializer_t* 
serializer, bundle_pt bundle, pubsub_msg_serializer_map_t** out);
+celix_status_t pubsubSerializer_destroySerializerMap(pubsub_serializer_t*, 
pubsub_msg_serializer_map_t* map);
 
+/* Start of serializer specific functions */
+celix_status_t pubsubMsgSerializer_serialize(pubsub_msg_serializer_impl_t* 
impl, const void* msg, char** out, size_t *outLen);
+celix_status_t pubsubMsgSerializer_deserialize(pubsub_msg_serializer_impl_t* 
impl, const char* input, size_t inputLen, void **out);
+void pubsubMsgSerializer_freeMsg(pubsub_msg_serializer_impl_t* impl, void 
*msg);
 
 #endif /* PUBSUB_SERIALIZER_IMPL_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/7efe4331/pubsub/pubsub_serializer_json/private/src/ps_activator.c
----------------------------------------------------------------------
diff --git a/pubsub/pubsub_serializer_json/private/src/ps_activator.c 
b/pubsub/pubsub_serializer_json/private/src/ps_activator.c
index b83c26b..e0e23d4 100644
--- a/pubsub/pubsub_serializer_json/private/src/ps_activator.c
+++ b/pubsub/pubsub_serializer_json/private/src/ps_activator.c
@@ -32,8 +32,8 @@
 #include "pubsub_serializer_impl.h"
 
 struct activator {
-       pubsub_serializer_pt serializer;
-       pubsub_serializer_service_pt serializerService;
+       pubsub_serializer_t* serializer;
+       pubsub_serializer_service_t* serializerService;
        service_registration_pt registration;
 };
 
@@ -56,24 +56,16 @@ celix_status_t bundleActivator_create(bundle_context_pt 
context, void **userData
 celix_status_t bundleActivator_start(void * userData, bundle_context_pt 
context) {
        celix_status_t status = CELIX_SUCCESS;
        struct activator *activator = userData;
-       pubsub_serializer_service_pt pubsubSerializerSvc = calloc(1, 
sizeof(*pubsubSerializerSvc));
+       pubsub_serializer_service_t* pubsubSerializerSvc = calloc(1, 
sizeof(*pubsubSerializerSvc));
 
        if (!pubsubSerializerSvc) {
                status = CELIX_ENOMEM;
        }
        else{
-               pubsubSerializerSvc->serializer = activator->serializer;
-
-               pubsubSerializerSvc->serialize = pubsubSerializer_serialize;
-               pubsubSerializerSvc->deserialize = pubsubSerializer_deserialize;
-
-               pubsubSerializerSvc->fillMsgTypesMap = 
pubsubSerializer_fillMsgTypesMap;
-               pubsubSerializerSvc->emptyMsgTypesMap = 
pubsubSerializer_emptyMsgTypesMap;
-
-               pubsubSerializerSvc->getVersion = pubsubSerializer_getVersion;
-               pubsubSerializerSvc->getName = pubsubSerializer_getName;
-               pubsubSerializerSvc->freeMsg = pubsubSerializer_freeMsg;
+               pubsubSerializerSvc->handle = activator->serializer;
 
+               pubsubSerializerSvc->createSerializerMap = 
(void*)pubsubSerializer_createSerializerMap;
+               pubsubSerializerSvc->destroySerializerMap = 
(void*)pubsubSerializer_destroySerializerMap;
                activator->serializerService = pubsubSerializerSvc;
 
                status = bundleContext_registerService(context, 
PUBSUB_SERIALIZER_SERVICE, pubsubSerializerSvc, NULL, &activator->registration);

http://git-wip-us.apache.org/repos/asf/celix/blob/7efe4331/pubsub/pubsub_serializer_json/private/src/pubsub_serializer_impl.c
----------------------------------------------------------------------
diff --git a/pubsub/pubsub_serializer_json/private/src/pubsub_serializer_impl.c 
b/pubsub/pubsub_serializer_json/private/src/pubsub_serializer_impl.c
index 60d5c98..2dd8258 100644
--- a/pubsub/pubsub_serializer_json/private/src/pubsub_serializer_impl.c
+++ b/pubsub/pubsub_serializer_json/private/src/pubsub_serializer_impl.c
@@ -26,30 +26,28 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
 #include <string.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <inttypes.h>
 
-#include "constants.h"
 #include "utils.h"
 #include "hash_map.h"
-#include "array_list.h"
 #include "bundle_context.h"
-#include "bundle.h"
-#include "service_reference.h"
-#include "service_registration.h"
+
 #include "log_helper.h"
-#include "log_service.h"
-#include "service_factory.h"
 
 #include "json_serializer.h"
-#include "dyn_msg_utils.h"
 
 #include "pubsub_serializer_impl.h"
 
-celix_status_t pubsubSerializer_create(bundle_context_pt context, 
pubsub_serializer_pt *serializer) {
+#define SYSTEM_BUNDLE_ARCHIVE_PATH             "CELIX_FRAMEWORK_EXTENDER_PATH"
+
+static char* pubsubSerializer_getMsgDescriptionDir(bundle_pt bundle);
+static void pubsubSerializer_addMsgSerializerFromBundle(const char *root, 
bundle_pt bundle, hash_map_pt msgTypesMap);
+static void pubsubSerializer_fillMsgSerializerMap(hash_map_pt 
msgTypesMap,bundle_pt bundle);
+
+celix_status_t pubsubSerializer_create(bundle_context_pt context, 
pubsub_serializer_t** serializer) {
        celix_status_t status = CELIX_SUCCESS;
 
        *serializer = calloc(1, sizeof(**serializer));
@@ -70,7 +68,7 @@ celix_status_t pubsubSerializer_create(bundle_context_pt 
context, pubsub_seriali
        return status;
 }
 
-celix_status_t pubsubSerializer_destroy(pubsub_serializer_pt serializer) {
+celix_status_t pubsubSerializer_destroy(pubsub_serializer_t* serializer) {
        celix_status_t status = CELIX_SUCCESS;
 
        logHelper_stop(serializer->loghelper);
@@ -81,63 +79,197 @@ celix_status_t 
pubsubSerializer_destroy(pubsub_serializer_pt serializer) {
        return status;
 }
 
-celix_status_t pubsubSerializer_serialize(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType, const void *input, void **output, int *outputLen){
-       celix_status_t status = CELIX_SUCCESS;
-
-       dyn_type *type = NULL;
-       dynMessage_getMessageType((dyn_message_type *) msgType, &type);
+celix_status_t pubsubSerializer_createSerializerMap(pubsub_serializer_t* 
serializer, bundle_pt bundle, pubsub_msg_serializer_map_t** out) {
+    celix_status_t status = CELIX_SUCCESS;
+    pubsub_msg_serializer_map_t* map = calloc(1, sizeof(*map));
+    if (status == CELIX_SUCCESS) {
+        map->bundle = bundle;
+        map->serializers = hashMap_create(NULL, NULL, NULL, NULL);
+        pubsubSerializer_fillMsgSerializerMap(map->serializers, bundle);
+    } else {
+        logHelper_log(serializer->loghelper, OSGI_LOGSERVICE_ERROR, "Cannot 
allocate memory for msg map");
+        status = CELIX_ENOMEM;
+    }
 
-       char *jsonOutput = NULL;
-       int rc = jsonSerializer_serialize(type, (void *) input, &jsonOutput);
-       if (rc != 0){
-               status = CELIX_BUNDLE_EXCEPTION;
-       }
+    if (status == CELIX_SUCCESS) {
+        *out = map;
+    }
+    return status;
+}
 
-       *output = (void *) jsonOutput;
-       *outputLen = strlen(jsonOutput) + 1;
+celix_status_t pubsubSerializer_destroySerializerMap(pubsub_serializer_t* 
serializer, pubsub_msg_serializer_map_t* map) {
+    celix_status_t status = CELIX_SUCCESS;
+    if (map == NULL) {
+        return status;
+    }
 
-       return status;
+    hash_map_iterator_t iter = hashMapIterator_construct(map->serializers);
+    while (hashMapIterator_hasNext(&iter)) {
+        pubsub_msg_serializer_t* msgSer = hashMapIterator_nextValue(&iter);
+        pubsub_msg_serializer_impl_t* impl = msgSer->handle;
+        dynMessage_destroy(impl->dynMsg); //note msgSer->name and 
msgSer->version owned by dynType
+        free(impl); //also contains the service struct.
+    }
+    hashMap_destroy(map->serializers, false, false);
+    free(map);
+    return status;
 }
 
-celix_status_t pubsubSerializer_deserialize(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType, const void *input, void **output){
-       celix_status_t status = CELIX_SUCCESS;
 
-       dyn_type *type = NULL;
-       dynMessage_getMessageType((dyn_message_type *) msgType, &type);
+celix_status_t pubsubMsgSerializer_serialize(pubsub_msg_serializer_impl_t* 
impl, const void* msg, char** out, size_t *outLen) {
+    celix_status_t status = CELIX_SUCCESS;
 
-       void *textOutput = NULL;
-       int rc = jsonSerializer_deserialize(type, (const char *) input, 
&textOutput);
+    char *jsonOutput = NULL;
+    dyn_type* dynType = NULL;
+    dynMessage_getMessageType(impl->dynMsg, &dynType);
+       int rc = jsonSerializer_serialize(dynType, msg, &jsonOutput);
        if (rc != 0){
                status = CELIX_BUNDLE_EXCEPTION;
        }
-
-       *output = textOutput;
+    if (status == CELIX_SUCCESS) {
+        *out = jsonOutput;
+        *outLen = strlen(jsonOutput) + 1;
+    }
 
        return status;
 }
 
-void pubsubSerializer_fillMsgTypesMap(pubsub_serializer_pt serializer, 
hash_map_pt msgTypesMap, bundle_pt bundle){
-       fillMsgTypesMap(msgTypesMap, bundle);
+celix_status_t pubsubMsgSerializer_deserialize(pubsub_msg_serializer_impl_t* 
impl, const char* input, size_t inputLen, void **out) {
+    celix_status_t status = CELIX_SUCCESS;
+    void *msg = NULL;
+    dyn_type* dynType = NULL;
+    dynMessage_getMessageType(impl->dynMsg, &dynType);
+    int rc = jsonSerializer_deserialize(dynType, input, &msg);
+    if (rc != 0) {
+        status = CELIX_BUNDLE_EXCEPTION;
+    }
+    if (status == CELIX_SUCCESS) {
+        *out = msg;
+    }
+       return status;
 }
 
-void pubsubSerializer_emptyMsgTypesMap(pubsub_serializer_pt serializer, 
hash_map_pt msgTypesMap){
-       emptyMsgTypesMap(msgTypesMap);
+void pubsubMsgSerializer_freeMsg(pubsub_msg_serializer_impl_t* impl, void 
*msg) {
+    dyn_type* dynType = NULL;
+    dynMessage_getMessageType(impl->dynMsg, &dynType);
+    if (dynType != NULL) {
+        dynType_free(dynType, msg);
+    }
 }
 
-version_pt pubsubSerializer_getVersion(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType){
-       version_pt msgVersion = NULL;
-       dynMessage_getVersion((dyn_message_type *) msgType, &msgVersion);
-       return msgVersion;
+
+static void pubsubSerializer_fillMsgSerializerMap(hash_map_pt msgSerializers, 
bundle_pt bundle) {
+    char* root = NULL;
+    char* metaInfPath = NULL;
+
+    root = pubsubSerializer_getMsgDescriptionDir(bundle);
+
+    if(root != NULL){
+        asprintf(&metaInfPath, "%s/META-INF/descriptors/messages", root);
+
+        pubsubSerializer_addMsgSerializerFromBundle(root, bundle, 
msgSerializers);
+        pubsubSerializer_addMsgSerializerFromBundle(metaInfPath, bundle, 
msgSerializers);
+
+        free(metaInfPath);
+        free(root);
+    }
 }
 
-char* pubsubSerializer_getName(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType){
-       char *name = NULL;
-       dynMessage_getName((dyn_message_type *) msgType, &name);
-       return name;
+static char* pubsubSerializer_getMsgDescriptionDir(bundle_pt bundle)
+{
+    char *root = NULL;
+
+    bool isSystemBundle = false;
+    bundle_isSystemBundle(bundle, &isSystemBundle);
+
+    if(isSystemBundle == true) {
+        bundle_context_pt context;
+        bundle_getContext(bundle, &context);
+
+        const char *prop = NULL;
+
+        bundleContext_getProperty(context, SYSTEM_BUNDLE_ARCHIVE_PATH, &prop);
+
+        if(prop != NULL) {
+            root = strdup(prop);
+        } else {
+            root = getcwd(NULL, 0);
+        }
+    } else {
+        bundle_getEntry(bundle, ".", &root);
+    }
+
+    return root;
 }
 
-void pubsubSerializer_freeMsg(pubsub_serializer_pt serializer, 
pubsub_message_type *msgType, void *msg){
-       dyn_type *type = NULL;
-       dynMessage_getMessageType((dyn_message_type *) msgType, &type);
-       dynType_free(type, msg);
+
+static void pubsubSerializer_addMsgSerializerFromBundle(const char *root, 
bundle_pt bundle, hash_map_pt msgSerializers)
+{
+    char path[128];
+    struct dirent *entry = NULL;
+    DIR *dir = opendir(root);
+
+    if(dir) {
+        entry = readdir(dir);
+    }
+
+    while (entry != NULL) {
+
+        if (strstr(entry->d_name, ".descriptor") != NULL) {
+
+            printf("DMU: Parsing entry '%s'\n", entry->d_name);
+
+            memset(path,0,128);
+            snprintf(path, 128, "%s/%s", root, entry->d_name);
+            FILE *stream = fopen(path,"r");
+
+            if (stream != NULL){
+                dyn_message_type* msgType = NULL;
+
+                int rc = dynMessage_parse(stream, &msgType);
+                if (rc == 0 && msgType != NULL) {
+
+                    char* msgName = NULL;
+                    dynMessage_getName(msgType,&msgName);
+
+                    version_pt msgVersion = NULL;
+                    dynMessage_getVersion(msgType, &msgVersion);
+
+                    unsigned int msgId = utils_stringHash(msgName);
+
+                    pubsub_msg_serializer_impl_t* impl = calloc(1, 
sizeof(*impl));
+                    impl->dynMsg = msgType;
+                    impl->msgSerializer.handle = impl;
+                    impl->msgSerializer.msgId = msgId;
+                    impl->msgSerializer.msgName = msgName;
+                    impl->msgSerializer.msgVersion = msgVersion;
+                    impl->msgSerializer.serialize = (void*) 
pubsubMsgSerializer_serialize;
+                    impl->msgSerializer.deserialize = (void*) 
pubsubMsgSerializer_deserialize;
+                    impl->msgSerializer.freeMsg = (void*) 
pubsubMsgSerializer_freeMsg;
+
+                    bool clash = hashMap_containsKey(msgSerializers, 
(void*)(uintptr_t)msgId);
+                    if (clash) {
+                        printf("Cannot add msg %s. clash in msg id %d!!\n", 
msgName, msgId);
+                    } else if ( msgName != NULL && msgVersion != NULL && msgId 
!= 0) {
+                        hashMap_put(msgSerializers, (void*)(uintptr_t)msgId, 
&impl->msgSerializer);
+                    } else {
+                        printf("Error adding creating msg serializer\n");
+                    }
+
+                }
+                else{
+                    printf("DMU: cannot parse message from descriptor 
%s\n.",path);
+                }
+                fclose(stream);
+            }else{
+                printf("DMU: cannot open descriptor file %s\n.",path);
+            }
+
+        }
+        entry = readdir(dir);
+    }
+
+    if(dir) {
+        closedir(dir);
+    }
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/7efe4331/pubsub/pubsub_topology_manager/private/src/pubsub_topology_manager.c
----------------------------------------------------------------------
diff --git 
a/pubsub/pubsub_topology_manager/private/src/pubsub_topology_manager.c 
b/pubsub/pubsub_topology_manager/private/src/pubsub_topology_manager.c
index 3826a25..36ea422 100644
--- a/pubsub/pubsub_topology_manager/private/src/pubsub_topology_manager.c
+++ b/pubsub/pubsub_topology_manager/private/src/pubsub_topology_manager.c
@@ -328,7 +328,7 @@ celix_status_t 
pubsub_topologyManager_pubsubSerializerAdded(void* handle, servic
        celix_status_t status = CELIX_SUCCESS;
 
        pubsub_topology_manager_pt manager = handle;
-       pubsub_serializer_service_pt new_serializer = 
(pubsub_serializer_service_pt) service;
+       pubsub_serializer_service_t* new_serializer = 
(pubsub_serializer_service_t*) service;
 
        celixThreadMutex_lock(&manager->serializerListLock);
 
@@ -360,7 +360,7 @@ celix_status_t 
pubsub_topologyManager_pubsubSerializerRemoved(void * handle, ser
        celix_status_t status = CELIX_SUCCESS;
 
        pubsub_topology_manager_pt manager = handle;
-       pubsub_serializer_service_pt new_serializer = 
(pubsub_serializer_service_pt) service;
+       pubsub_serializer_service_t* new_serializer = 
(pubsub_serializer_service_t*) service;
 
        celixThreadMutex_lock(&manager->serializerListLock);
 
@@ -377,7 +377,7 @@ celix_status_t 
pubsub_topologyManager_pubsubSerializerRemoved(void * handle, ser
 
        if (arrayList_size(manager->serializerList) > 0){
                //there is another serializer available, change the admin so it 
is using another serializer
-               pubsub_serializer_service_pt replacing_serializer = 
(pubsub_serializer_service_pt) arrayList_get(manager->serializerList,0);
+               pubsub_serializer_service_t* replacing_serializer = 
(pubsub_serializer_service_t*) arrayList_get(manager->serializerList,0);
 
                for(j=0; j<arrayList_size(manager->psaList); j++){
                        pubsub_admin_service_pt psa = (pubsub_admin_service_pt) 
arrayList_get(manager->psaList,j);

http://git-wip-us.apache.org/repos/asf/celix/blob/7efe4331/pubsub/test/msg_descriptors/msg.descriptor
----------------------------------------------------------------------
diff --git a/pubsub/test/msg_descriptors/msg.descriptor 
b/pubsub/test/msg_descriptors/msg.descriptor
index 808644c..03b15ba 100644
--- a/pubsub/test/msg_descriptors/msg.descriptor
+++ b/pubsub/test/msg_descriptors/msg.descriptor
@@ -5,4 +5,4 @@ version=1.0.0
 :annotations
 :types
 :message
-{n seqnR}
\ No newline at end of file
+{n seqnR}

http://git-wip-us.apache.org/repos/asf/celix/blob/7efe4331/pubsub/test/test/tst_activator.cpp
----------------------------------------------------------------------
diff --git a/pubsub/test/test/tst_activator.cpp 
b/pubsub/test/test/tst_activator.cpp
index 6d957a0..266f73e 100644
--- a/pubsub/test/test/tst_activator.cpp
+++ b/pubsub/test/test/tst_activator.cpp
@@ -145,13 +145,14 @@ TEST_GROUP(PUBSUB_INT_GROUP)
         //check if message are returned
         msg_t initMsg;
         initMsg.seqNr = 0;
+        int count = 0;
         for (int i = 0; i < TRIES; ++i) {
             pthread_mutex_lock(&g_act.mutex);
             g_act.pubSvc->send(g_act.pubSvc->handle, g_act.msgId, &initMsg);
             pthread_mutex_unlock(&g_act.mutex);
             usleep(TIMEOUT);
             pthread_mutex_lock(&g_act.mutex);
-            int count = g_act.count;
+            count = g_act.count;
             pthread_mutex_unlock(&g_act.mutex);
             if (count > 0) {
                 break;
@@ -159,6 +160,7 @@ TEST_GROUP(PUBSUB_INT_GROUP)
                 printf("No return message received, waiting for a while\n");
             }
         }
+        CHECK(count > 0);
        }
 
        void teardown() {
@@ -167,7 +169,10 @@ TEST_GROUP(PUBSUB_INT_GROUP)
 };
 
 TEST(PUBSUB_INT_GROUP, sendRecvTest) {
-    g_act.count = 0;
+    pthread_mutex_lock(&g_act.mutex);
+    g_act.count = 0; //reset counter
+    pthread_mutex_unlock(&g_act.mutex);
+
     constexpr int COUNT = 50;
     msg_t msg;
     for (int i = 0; i < COUNT; ++i) {

Reply via email to