Author: abroekhuis
Date: Sun Jul 27 05:59:19 2014
New Revision: 1613753

URL: http://svn.apache.org/r1613753
Log:
CELIX-131: Applied patch

Modified:
    celix/trunk/event_admin/deploy.cmake
    celix/trunk/event_admin/event_admin/private/src/event_admin_impl.c
    celix/trunk/event_admin/event_handler/private/src/event_handler_activator.c
    celix/trunk/event_admin/event_handler/private/src/event_handler_impl.c
    
celix/trunk/event_admin/event_publisher/private/include/event_publisher_impl.h
    
celix/trunk/event_admin/event_publisher/private/src/event_publisher_activator.c
    celix/trunk/event_admin/event_publisher/private/src/event_publisher_impl.c

Modified: celix/trunk/event_admin/deploy.cmake
URL: 
http://svn.apache.org/viewvc/celix/trunk/event_admin/deploy.cmake?rev=1613753&r1=1613752&r2=1613753&view=diff
==============================================================================
--- celix/trunk/event_admin/deploy.cmake (original)
+++ celix/trunk/event_admin/deploy.cmake Sun Jul 27 05:59:19 2014
@@ -17,7 +17,7 @@
 is_enabled(EVENT_ADMIN)
 if(EVENT_ADMIN)
        deploy("event_admin" BUNDLES event_admin shell shell_tui log_service 
log_writer)
-       deploy("event_publisher_example" BUNDLES event_publisher shell 
shell_tui log_service log_writer)
-       deploy("event_handler_example" BUNDLES event_handler shell shell_tui 
log_service log_writer)
+    deploy("event_publisher_example" BUNDLES event_admin event_publisher shell 
shell_tui log_service log_writer)
+       deploy("event_handler_example" BUNDLES event_admin event_handler shell 
shell_tui log_service log_writer)
        deploy("event_admin_example" BUNDLES event_admin event_publisher 
event_handler shell shell_tui log_service log_writer)
-endif(EVENT_ADMIN)
\ No newline at end of file
+endif(EVENT_ADMIN)

Modified: celix/trunk/event_admin/event_admin/private/src/event_admin_impl.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/event_admin/event_admin/private/src/event_admin_impl.c?rev=1613753&r1=1613752&r2=1613753&view=diff
==============================================================================
--- celix/trunk/event_admin/event_admin/private/src/event_admin_impl.c 
(original)
+++ celix/trunk/event_admin/event_admin/private/src/event_admin_impl.c Sun Jul 
27 05:59:19 2014
@@ -23,6 +23,7 @@
  *  \author            <a href="mailto:[email protected]";>Apache 
Celix Project Team</a>
  *  \copyright Apache License, Version 2.0
  */
+#include <stdlib.h>
 
 #include "event_admin.h"
 #include "event_admin_impl.h"
@@ -34,180 +35,180 @@
 celix_status_t eventAdmin_create(apr_pool_t *pool, bundle_context_pt context, 
event_admin_pt *event_admin){
        celix_status_t status = CELIX_SUCCESS;
        *event_admin = apr_palloc(pool, sizeof(**event_admin));
-       if(!*event_admin){
-                               status = CELIX_ENOMEM;
-               }else {
-
-                       (*event_admin)->pool = pool;
-                       printf("pool evenadmin create: 
%p\n",(*event_admin)->pool);
-                       (*event_admin)->channels = 
hashMap_create(utils_stringHash, utils_stringHash, utils_stringEquals, 
utils_stringEquals);
-                       (*event_admin)->context =context;
-                       printf("event admin pointer: %p\n",(*event_admin));
-                       status = 
arrayList_create(&(*event_admin)->event_handlers);
-               }
+       if (!*event_admin) {
+        status = CELIX_ENOMEM;
+    } else {
+        (*event_admin)->pool = pool;
+        (*event_admin)->channels = hashMap_create(utils_stringHash, 
utils_stringHash, utils_stringEquals, utils_stringEquals);
+        (*event_admin)->context =context;
+        status = arrayList_create(&(*event_admin)->event_handlers);
+    }
        return status;
 }
 
 celix_status_t eventAdmin_getEventHandlersByChannel(bundle_context_pt context, 
const char * serviceName, array_list_pt *eventHandlers) {
-       celix_status_t status = CELIX_SUCCESS;
-       status = bundleContext_getServiceReferences(context, serviceName,NULL, 
eventHandlers);
+       celix_status_t status = bundleContext_getServiceReferences(context, 
serviceName, NULL, eventHandlers);
        return status;
 }
 
-celix_status_t eventAdmin_postEvent(event_admin_pt event_admin, event_pt 
event){
+celix_status_t eventAdmin_postEvent(event_admin_pt event_admin, event_pt 
event) {
        celix_status_t status = CELIX_SUCCESS;
-       array_list_pt event_handlers = NULL;
+
        char *topic;
-               eventAdmin_getTopic(&event,&topic);
-       eventAdmin_lockHandlersList(event_admin,topic);
-       printf("post called\n");
-       eventAdmin_releaseHandersList(event_admin,topic);
+    eventAdmin_getTopic(&event, &topic);
+
+       array_list_pt event_handlers;
+       arrayList_create(&event_handlers);
+       eventAdmin_lockHandlersList(event_admin, topic);
+       eventAdmin_findHandlersByTopic(event_admin->channels, topic, 
event_handlers);
+    // TODO make this async!
+       array_list_iterator_pt handlers_iterator = 
arrayListIterator_create(event_handlers);
+       while (arrayListIterator_hasNext(handlers_iterator)) {
+               event_handler_service_pt event_handler_service = 
(event_handler_service_pt) arrayListIterator_next(handlers_iterator);
+               printf("handler found (POST EVENT) for %s\n", topic);
+               
event_handler_service->handle_event(&event_handler_service->event_handler, 
event);
+       }
+       eventAdmin_releaseHandersList(event_admin, topic);
        return status;
 }
 
-celix_status_t eventAdmin_sendEvent(event_admin_pt event_admin, event_pt 
event){
+celix_status_t eventAdmin_sendEvent(event_admin_pt event_admin, event_pt 
event) {
        celix_status_t status = CELIX_SUCCESS;
-       printf("send called\n");
+
        char *topic;
-       eventAdmin_getTopic(&event,&topic);
+       eventAdmin_getTopic(&event, &topic);
 
        array_list_pt event_handlers;
        arrayList_create(&event_handlers);
-       eventAdmin_lockHandlersList(event_admin,topic);
-       
eventAdmin_findHandlersByTopic(event_admin->channels,topic,event_handlers);
-       array_list_iterator_pt handlers_itterator = 
arrayListIterator_create(event_handlers);
-       while(arrayListIterator_hasNext(handlers_itterator)){
-               void *handler = arrayListIterator_next(handlers_itterator);
-               event_handler_service_pt event_handler_service = 
(event_handler_service_pt) handler;
-               
event_handler_service->handle_event(&event_handler_service->event_handler,event);
-               printf("handler found \n");
+       eventAdmin_lockHandlersList(event_admin, topic);
+       eventAdmin_findHandlersByTopic(event_admin->channels, topic, 
event_handlers);
+       array_list_iterator_pt handlers_iterator = 
arrayListIterator_create(event_handlers);
+       while (arrayListIterator_hasNext(handlers_iterator)) {
+               event_handler_service_pt event_handler_service = 
(event_handler_service_pt) arrayListIterator_next(handlers_iterator);
+               printf("handler found (SEND EVENT) for %s\n", topic);
+               
event_handler_service->handle_event(&event_handler_service->event_handler, 
event);
        }
-       eventAdmin_releaseHandersList(event_admin,topic);
+       eventAdmin_releaseHandersList(event_admin, topic);
        return status;
 }
 
-
-
-celix_status_t eventAdmin_findHandlersByTopic(hash_map_pt channels, char 
*topic , array_list_pt event_handlers){
+celix_status_t eventAdmin_findHandlersByTopic(hash_map_pt channels, char 
*topic, array_list_pt event_handlers) {
        celix_status_t status = CELIX_SUCCESS;
-       channel_t channel;
-       char channel_name[strlen(topic)+1];
-       strcpy(channel_name,topic);
-       printf("Finding channel: %s\n",channel_name);
-       //check if the channel exists
-       if(hashMap_containsKey(channels,channel_name)==1) {
-               printf("found channel \n");
-               channel = hashMap_get(channels,channel_name);
-               if(channel != NULL && channel->eventHandlers != NULL && 
hashMap_size(channel->eventHandlers)> 0 ){
-                       //itterate throught the handlers and add them to the 
array list for result.
-                       hash_map_iterator_pt hashmap_itterator =  
hashMapIterator_create(channel->eventHandlers);
-                       while(hashMapIterator_hasNext(hashmap_itterator)){
-                               printf("add handler \n");
-                               event_handler_service_pt event_handler_service 
= NULL;
-                               event_handler_service = 
(event_handler_service_pt) hashMapIterator_nextValue(hashmap_itterator);
-                               
arrayList_add(event_handlers,event_handler_service);
+    channel_t channel = hashMap_get(channels, topic);
+       if (channel != NULL) {
+               printf("found channel: %s\n", topic);
+               if (channel->eventHandlers != NULL && 
!hashMap_isEmpty(channel->eventHandlers)) {
+                       // iterate throught the handlers and add them to the 
array list for result.
+                       hash_map_iterator_pt hashmap_iterator =  
hashMapIterator_create(channel->eventHandlers);
+                       while (hashMapIterator_hasNext(hashmap_iterator)) {
+                               arrayList_add(event_handlers, 
(event_handler_service_pt) hashMapIterator_nextValue(hashmap_iterator));
                        }
                }
-       }else {
-               printf("no channel\n");
+       } else {
+               printf("no such channel: %s\n", topic);
        }
        return status;
 }
 
 celix_status_t eventAdmin_createEventChannels(event_admin_pt *event_admin, 
char *topic, event_handler_service_pt event_handler_service){
        celix_status_t status = CELIX_SUCCESS;
-       char channel_name[strlen(topic)+1];
-       strcpy(channel_name,topic);
-       printf("Creating channel: %s\n");
-       //char complete_channel_name[strlen(topic)+1];
-       channel_t channel;
-       apr_pool_t *subPool= NULL;
-       apr_pool_create(&subPool,(*event_admin)->pool);
-       if(hashMap_containsKey((*event_admin)->channels,channel_name)==1) {
-               channel = hashMap_get((*event_admin)->channels,channel_name);
-               
//hashMap_put(channel->eventHandlers,&event_handler_service,event_handler_service);
-       }else {
+    channel_t channel = hashMap_get((*event_admin)->channels, topic);
+       if (channel == NULL) {
                //create channel
+        printf("Creating channel: %s\n", topic);
+
+        apr_pool_t *subPool = NULL;
+        apr_pool_create(&subPool, (*event_admin)->pool);
+
                channel = apr_palloc(subPool, sizeof(*channel));
-               if(!channel){
-                       status = CELIX_ENOMEM;
-               }else {
+               if (!channel) {
+            status = CELIX_ENOMEM;
+        } else {
+            char *channel_name = strdup(topic);
                        channel->topic = channel_name;
                        channel->eventHandlers = 
hashMap_create(NULL,NULL,NULL,NULL);
                        channel->channelLock = NULL;
-                       
apr_thread_mutex_create(&channel->channelLock,APR_THREAD_MUTEX_NESTED, subPool);
-                       
hashMap_put((*event_admin)->channels,channel_name,channel);
+            apr_thread_mutex_create(&channel->channelLock, 
APR_THREAD_MUTEX_NESTED, subPool);
+                       hashMap_put((*event_admin)->channels, channel_name, 
channel);
                }
-               
hashMap_put(channel->eventHandlers,&event_handler_service,event_handler_service);
-       }
-
+    }
+    if (channel) {
+        hashMap_put(channel->eventHandlers, &event_handler_service, 
event_handler_service);
+    }
        return status;
 
        /*apr_pool_t *subPool= NULL;
-       apr_pool_create(&subPool,(*event_admin)->pool);
-       char delims[] = "/";
-       char *result = NULL;
-       result = strtok( topic, delims );
-       if(result != NULL){
-               strcpy(complete_channel_name, result);
-       }
-       while( result != NULL  && status == CELIX_SUCCESS) {
-           channel_t channel;
-           //check if the channel exists
-           
if(hashMap_containsKey((*event_admin)->channels,complete_channel_name)==1) {
-               channel = 
hashMap_get((*event_admin)->channels,complete_channel_name);
-               
//hashMap_put(channel->eventHandlers,&event_handler_service,event_handler_service);
-           }else {
-               //create channel
-               channel = apr_palloc(subPool, sizeof(*channel));
-               if(!channel){
-                       status = CELIX_ENOMEM;
-               }else {
-                       channel->topic = complete_channel_name;
-                               channel->eventHandlers = 
hashMap_create(NULL,NULL,NULL,NULL);
-                               channel->channelLock = NULL;
-                               
apr_thread_mutex_create(&channel->channelLock,APR_THREAD_MUTEX_NESTED, subPool);
-               }
-           }
-           result = strtok( NULL, delims );
-           if(result != NULL && status == CELIX_SUCCESS){
-               strcat(complete_channel_name, "/");
-               strcat(complete_channel_name, result);
-           }else if(status == CELIX_SUCCESS) {
-               
hashMap_put(channel->eventHandlers,&event_handler_service,event_handler_service);
-           }
-       }*/
+     apr_pool_create(&subPool,(*event_admin)->pool);
+     char delims[] = "/";
+     char *result = NULL;
+     result = strtok( topic, delims );
+     if(result != NULL){
+     strcpy(complete_channel_name, result);
+     }
+     while( result != NULL  && status == CELIX_SUCCESS) {
+     channel_t channel;
+     //check if the channel exists
+     
if(hashMap_containsKey((*event_admin)->channels,complete_channel_name)==1) {
+     channel = hashMap_get((*event_admin)->channels,complete_channel_name);
+     
//hashMap_put(channel->eventHandlers,&event_handler_service,event_handler_service);
+     }else {
+     //create channel
+     channel = apr_palloc(subPool, sizeof(*channel));
+     if(!channel){
+     status = CELIX_ENOMEM;
+     }else {
+     channel->topic = complete_channel_name;
+     channel->eventHandlers = hashMap_create(NULL,NULL,NULL,NULL);
+     channel->channelLock = NULL;
+     apr_thread_mutex_create(&channel->channelLock,APR_THREAD_MUTEX_NESTED, 
subPool);
+     }
+     }
+     result = strtok( NULL, delims );
+     if(result != NULL && status == CELIX_SUCCESS){
+     strcat(complete_channel_name, "/");
+     strcat(complete_channel_name, result);
+     }else if(status == CELIX_SUCCESS) {
+     
hashMap_put(channel->eventHandlers,&event_handler_service,event_handler_service);
+     }
+     }*/
 
 }
 
-celix_status_t eventAdmin_lockHandlersList(event_admin_pt event_admin, char 
*topic ){
-       celix_status_t status = CELIX_SUCCESS;
-       char *channel_name;
-       printf("lock: %s\n",topic);
-
-       printf("LOCK!\n");
+celix_status_t eventAdmin_lockHandlersList(event_admin_pt event_admin, char 
*topic) {
+       celix_status_t status = CELIX_SUCCESS;
+    channel_t channel = hashMap_get(event_admin->channels, topic);
+       if (channel != NULL) {
+        // TODO verify this will never deadlock...
+        apr_status_t status;
+        do {
+            status = apr_thread_mutex_trylock(channel->channelLock);
+        } while (status != 0 && !APR_STATUS_IS_EBUSY(status));
+        printf("LOCK: %s!\n", topic);
+    }
        return status;
 }
-celix_status_t eventAdmin_releaseHandersList(event_admin_pt event_admin, char 
*topic ){
-       celix_status_t status = CELIX_SUCCESS;
-       char *channel_name;
-       printf("release: %s\n",topic);
 
-       printf("UNLOCK\n");
+celix_status_t eventAdmin_releaseHandersList(event_admin_pt event_admin, char 
*topic) {
+       celix_status_t status = CELIX_SUCCESS;
+    channel_t channel = hashMap_get(event_admin->channels, topic);
+       if (channel != NULL) {
+        // TODO check the result value...
+        apr_status_t status = apr_thread_mutex_unlock(channel->channelLock);
+        printf("UNLOCK: %s!\n", topic);
+    }
        return status;
 }
 
 celix_status_t eventAdmin_addingService(void * handle, service_reference_pt 
ref, void **service) {
-
        celix_status_t status = CELIX_SUCCESS;
        event_admin_pt  event_admin = handle;
        status = bundleContext_getService(event_admin->context, ref, service);
-       return CELIX_SUCCESS;
+       return status;
 }
 
 celix_status_t eventAdmin_addedService(void * handle, service_reference_pt 
ref, void * service) {
        celix_status_t status = CELIX_SUCCESS;
-       event_admin_pt  event_admin = handle;
+       event_admin_pt event_admin = handle;
        event_handler_service_pt event_handler_service = NULL;
        event_handler_service = (event_handler_service_pt) service;
        service_registration_pt registration = NULL;
@@ -215,9 +216,9 @@ celix_status_t eventAdmin_addedService(v
        properties_pt props = NULL;
        serviceRegistration_getProperties(registration, &props);
        char *topic = properties_get(props, (char*)EVENT_TOPIC);
-       printf("Original TOPIC: %s\n,",topic);
+       printf("Original TOPIC: %s\n", topic);
        
eventAdmin_createEventChannels(&event_admin,topic,event_handler_service);
-       return CELIX_SUCCESS;
+       return status;
 }
 
 celix_status_t eventAdmin_modifiedService(void * handle, service_reference_pt 
ref, void * service) {

Modified: 
celix/trunk/event_admin/event_handler/private/src/event_handler_activator.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/event_admin/event_handler/private/src/event_handler_activator.c?rev=1613753&r1=1613752&r2=1613753&view=diff
==============================================================================
--- celix/trunk/event_admin/event_handler/private/src/event_handler_activator.c 
(original)
+++ celix/trunk/event_admin/event_handler/private/src/event_handler_activator.c 
Sun Jul 27 05:59:19 2014
@@ -17,11 +17,11 @@
  *under the License.
  */
 /*
- * activator.c
+ * event_handler_activator.c
  *
- *  Created on: Jul 9, 2013
- *  \author            <a href="mailto:[email protected]";>Apache 
Celix Project Team</a>
- *  \copyright Apache License, Version 2.0
+ * Created on: Jul 9, 2013
+ * \author     <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
+ * \copyright  Apache License, Version 2.0
  */
 #include <stdlib.h>
 
@@ -42,23 +42,26 @@ celix_status_t bundleActivator_create(bu
        apr_pool_t *pool = NULL;
        apr_pool_t *parentPool;
        struct activator *activator;
+
        status = bundleContext_getMemoryPool(context, &parentPool);
-       if( status == CELIX_SUCCESS ) {
-               if(apr_pool_create(&pool,parentPool) != APR_SUCCESS) {
+       if (status == CELIX_SUCCESS) {
+               if (apr_pool_create(&pool,parentPool) != APR_SUCCESS) {
                        status = CELIX_BUNDLE_EXCEPTION;
-               }else {
-                       activator = apr_palloc(pool,sizeof(*activator));
+               } else {
+                       activator = apr_palloc(pool, sizeof(*activator));
                        activator->pool = pool;
                        activator->registration = NULL;
                        *userData = activator;
+
                        event_handler_pt event_handler = NULL;
                        event_handler_service_pt event_handler_service = NULL;
-                       status = 
eventHandlerCreate(activator->pool,context,&event_handler);
-                       if(status == CELIX_SUCCESS){
-                               event_handler_service = 
apr_palloc(activator->pool,sizeof(event_handler_service));
-                               if(!event_handler_service){
+
+                       status = eventHandlerCreate(activator->pool, context, 
&event_handler);
+                       if (status == CELIX_SUCCESS) {
+                               event_handler_service = 
apr_palloc(activator->pool, sizeof(event_handler_service));
+                               if (!event_handler_service) {
                                        status = CELIX_ENOMEM;
-                               }else {
+                               } else {
                                        event_handler_service->event_handler = 
event_handler;
                                        event_handler_service->handle_event = 
eventHandlerHandleEvent;
                                }
@@ -73,20 +76,21 @@ celix_status_t bundleActivator_create(bu
 celix_status_t bundleActivator_start(void * userData, bundle_context_pt 
context) {
        celix_status_t status = CELIX_SUCCESS;
        struct activator *activator = userData;
+
        properties_pt properties = NULL;
        properties = properties_create();
        properties_set(properties,(char*)EVENT_HANDLER_SERVICE,(char 
*)EVENT_HANDLER_NAME);
        properties_set(properties,(char*)EVENT_TOPIC, (char*) 
"log/error/eventpublishers/event");
+
        event_handler_service_pt event_handler_service = 
activator->event_handler_service;
        bundleContext_registerService(context, (char *) EVENT_HANDLER_SERVICE, 
event_handler_service, properties, &activator->registration);
        apr_pool_t *pool;
        status = bundleContext_getMemoryPool(context, &pool);
-       if(status == CELIX_SUCCESS) {
+       if (status == CELIX_SUCCESS) {
                service_tracker_customizer_pt customizer = NULL;
                service_tracker_pt tracker = NULL;
-               
serviceTrackerCustomizer_create(activator->event_handler_service->event_handler,
  eventHandlerAddingService, eventHandlerAddedService, 
eventHandlerModifiedService, eventHandlerRemovedService, &customizer);
-               serviceTracker_create(context, (char *) EVENT_ADMIN_NAME, 
customizer,
-                                                                       
&tracker);
+               
serviceTrackerCustomizer_create(activator->event_handler_service->event_handler,
 eventHandlerAddingService, eventHandlerAddedService, 
eventHandlerModifiedService, eventHandlerRemovedService, &customizer);
+               serviceTracker_create(context, (char *) EVENT_ADMIN_NAME, 
customizer, &tracker);
                activator->eventAdminTracker = tracker;
                serviceTracker_open(tracker);
                properties_pt properties = NULL;
@@ -97,13 +101,11 @@ celix_status_t bundleActivator_start(voi
 
 celix_status_t bundleActivator_stop(void * userData, bundle_context_pt 
context) {
        celix_status_t status = CELIX_SUCCESS;
-
        return status;
 }
 
 
 celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt 
context) {
        celix_status_t status = CELIX_SUCCESS;
-
        return status;
 }

Modified: celix/trunk/event_admin/event_handler/private/src/event_handler_impl.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/event_admin/event_handler/private/src/event_handler_impl.c?rev=1613753&r1=1613752&r2=1613753&view=diff
==============================================================================
--- celix/trunk/event_admin/event_handler/private/src/event_handler_impl.c 
(original)
+++ celix/trunk/event_admin/event_handler/private/src/event_handler_impl.c Sun 
Jul 27 05:59:19 2014
@@ -31,67 +31,65 @@ struct event_handler {
        bundle_context_pt context;
 };
 
-celix_status_t eventHandlerCreate(apr_pool_t *pool, bundle_context_pt context, 
 event_handler_pt *event_handler){
+celix_status_t eventHandlerCreate(apr_pool_t *pool, bundle_context_pt context, 
event_handler_pt *event_handler){
        celix_status_t status = CELIX_SUCCESS;
        *event_handler = apr_palloc(pool, sizeof(**event_handler));
-       if(!*event_handler){
-                       status = CELIX_ENOMEM;
-       }else {
-                       (*event_handler)->pool = pool;
-                       (*event_handler)->event_admin_service = NULL;
-                       (*event_handler)->context = context;
+       if (!*event_handler) {
+        status = CELIX_ENOMEM;
+       } else {
+        (*event_handler)->pool = pool;
+        (*event_handler)->event_admin_service = NULL;
+        (*event_handler)->context = context;
        }
        return status;
 }
 
 celix_status_t eventHandlerHandleEvent(event_handler_pt *event_handler, 
event_pt event) {
        celix_status_t status = CELIX_SUCCESS;
-       printf("handle event called in first handler\n");
-       if(event != NULL){
+       if (event != NULL) {
                char *topic = NULL;
-               status = 
(*event_handler)->event_admin_service->getTopic(&event,&topic);
-               printf("topic of event: %s\n",topic);
+               status = 
(*event_handler)->event_admin_service->getTopic(&event, &topic);
+               printf("[SUB] topic of event: %s\n", topic);
+
                array_list_pt propertyNames;
                arrayList_create(&propertyNames);
-               status = 
(*event_handler)->event_admin_service->getPropertyNames(&event,&propertyNames);
+               status = 
(*event_handler)->event_admin_service->getPropertyNames(&event, &propertyNames);
+
                array_list_iterator_pt propertyIter = 
arrayListIterator_create(propertyNames);
-               while(arrayListIterator_hasNext(propertyIter)){
+               while (arrayListIterator_hasNext(propertyIter)) {
                        char *key = arrayListIterator_next(propertyIter);
                        char *value = NULL;
                        
(*event_handler)->event_admin_service->getProperty(&event,key,&value);
-                       //getProperty(&event,key,&value);
-                       printf("Key: %s value: %s\n",key,value);
+
+                       printf("[SUB] Key: %s value: %s\n",key,value);
                }
        }
        return status;
 }
 
 
-celix_status_t  eventHandlerAddingService(void * handle, service_reference_pt 
ref, void **service) {
+celix_status_t eventHandlerAddingService(void * handle, service_reference_pt 
ref, void **service) {
        celix_status_t status = CELIX_SUCCESS;
-       printf("event handler adding service \n");
        event_handler_pt event_handler = handle;
        status = bundleContext_getService(event_handler->context, ref, service);
        return status;
 }
 
-celix_status_t  eventHandlerAddedService(void * handle, service_reference_pt 
ref, void * service) {
-       printf("Event handler Added service \n");
-       event_handler_pt  data =  handle;
-       event_admin_service_pt event_admin_service = NULL;
-       event_admin_service = (event_admin_service_pt ) service;
-       data->event_admin_service = event_admin_service;
+celix_status_t eventHandlerAddedService(void * handle, service_reference_pt 
ref, void * service) {
+       printf("[SUB] Event admin added...\n");
+       event_handler_pt data = handle;
+       data->event_admin_service = (event_admin_service_pt) service;
        return CELIX_SUCCESS;
 }
 
-celix_status_t  eventHandlerModifiedService(void * handle, 
service_reference_pt ref, void * service) {
-       struct data * data = (struct data *) handle;
-       printf("Event admin Modified\n");
+celix_status_t eventHandlerModifiedService(void * handle, service_reference_pt 
ref, void * service) {
+       printf("[SUB] Event admin modified...\n");
        return CELIX_SUCCESS;
 }
 
-celix_status_t  eventHandlerRemovedService(void * handle, service_reference_pt 
ref, void * service) {
-       struct data * data = (struct data *) handle;
-       printf("Event admin Removed %p\n", service);
+celix_status_t eventHandlerRemovedService(void * handle, service_reference_pt 
ref, void * service) {
+       printf("[SUB] Event admin removed...\n");
+       event_handler_pt data = handle;
+       data->event_admin_service = NULL;
        return CELIX_SUCCESS;
 }

Modified: 
celix/trunk/event_admin/event_publisher/private/include/event_publisher_impl.h
URL: 
http://svn.apache.org/viewvc/celix/trunk/event_admin/event_publisher/private/include/event_publisher_impl.h?rev=1613753&r1=1613752&r2=1613753&view=diff
==============================================================================
--- 
celix/trunk/event_admin/event_publisher/private/include/event_publisher_impl.h 
(original)
+++ 
celix/trunk/event_admin/event_publisher/private/include/event_publisher_impl.h 
Sun Jul 27 05:59:19 2014
@@ -39,6 +39,8 @@
 #include "event_constants.h"
 #include <apr.h>
 #include <apr_pools.h>
+#include <apr_thread_proc.h>
+
 typedef struct event_publisher *event_publisher_pt;
 struct event_publisher {
        apr_pool_t *pool;

Modified: 
celix/trunk/event_admin/event_publisher/private/src/event_publisher_activator.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/event_admin/event_publisher/private/src/event_publisher_activator.c?rev=1613753&r1=1613752&r2=1613753&view=diff
==============================================================================
--- 
celix/trunk/event_admin/event_publisher/private/src/event_publisher_activator.c 
(original)
+++ 
celix/trunk/event_admin/event_publisher/private/src/event_publisher_activator.c 
Sun Jul 27 05:59:19 2014
@@ -24,6 +24,7 @@
  *  \copyright Apache License, Version 2.0
  */
 #include <stdlib.h>
+#include <apr_thread_proc.h>
 
 
 #include "event_publisher_impl.h"
@@ -70,9 +71,8 @@ celix_status_t bundleActivator_start(voi
                service_tracker_customizer_pt cust = NULL;
                service_tracker_pt tracker = NULL;
                data->context = context;
-               serviceTrackerCustomizer_create(pool, data->event_publisher,  
eventPublisherAddingService, eventPublisherAddedService, 
eventPublisherModifiedService, eventPublisherRemovedService, &cust);
-               serviceTracker_create(pool, context, (char *) EVENT_ADMIN_NAME, 
cust,
-                                                       &tracker);
+               serviceTrackerCustomizer_create(data->event_publisher, 
eventPublisherAddingService, eventPublisherAddedService, 
eventPublisherModifiedService, eventPublisherRemovedService, &cust);
+               serviceTracker_create(context, (char *) EVENT_ADMIN_NAME, cust, 
&tracker);
                data->tracker = tracker;
 
                serviceTracker_open(tracker);

Modified: 
celix/trunk/event_admin/event_publisher/private/src/event_publisher_impl.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/event_admin/event_publisher/private/src/event_publisher_impl.c?rev=1613753&r1=1613752&r2=1613753&view=diff
==============================================================================
--- celix/trunk/event_admin/event_publisher/private/src/event_publisher_impl.c 
(original)
+++ celix/trunk/event_admin/event_publisher/private/src/event_publisher_impl.c 
Sun Jul 27 05:59:19 2014
@@ -17,40 +17,38 @@
  *under the License.
  */
 /*
- * event_admin_impl.c
+ * event_publisher_impl.c
  *
- *  Created on: Jul 24, 2013
-  *  \author           <a href="mailto:[email protected]";>Apache 
Celix Project Team</a>
- *  \copyright Apache License, Version 2.0
+ * Created on: Jul 24, 2013
+ * \author     <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
+ * \copyright  Apache License, Version 2.0
  */
 
 #include "event_publisher_impl.h"
 
-celix_status_t eventPublisherCreate(apr_pool_t *pool, bundle_context_pt 
context, event_publisher_pt *event_publisher){
-        celix_status_t status = CELIX_SUCCESS;
-        *event_publisher = apr_palloc(pool, sizeof(**event_publisher));
-
-        if(!*event_publisher){
-                status = CELIX_ENOMEM;
-        }else {
-               (*event_publisher)->event_admin_service = NULL;
-               (*event_publisher)->pool = NULL;
-               (*event_publisher)->eventAdminAdded = false;
-               (*event_publisher)->running = false;
-               (*event_publisher)->pool = pool;
-               (*event_publisher)->context = context;
-        }
-        return status;
+celix_status_t eventPublisherCreate(apr_pool_t *pool, bundle_context_pt 
context, event_publisher_pt *event_publisher) {
+    celix_status_t status = CELIX_SUCCESS;
+    *event_publisher = apr_palloc(pool, sizeof(**event_publisher));
+    if (!*event_publisher) {
+        status = CELIX_ENOMEM;
+    } else {
+        (*event_publisher)->event_admin_service = NULL;
+        (*event_publisher)->pool = NULL;
+        (*event_publisher)->eventAdminAdded = false;
+        (*event_publisher)->running = false;
+        (*event_publisher)->pool = pool;
+        (*event_publisher)->context = context;
+    }
+    return status;
 }
 
-celix_status_t eventPublisherStart(event_publisher_pt *event_publisher){
+celix_status_t eventPublisherStart(event_publisher_pt *event_publisher) {
        (*event_publisher)->running = true;
        apr_thread_create(&(*event_publisher)->sender, NULL, 
eventPublisherSendEventThread, event_publisher, (*event_publisher)->pool);
-
        return CELIX_SUCCESS;
 }
 
-celix_status_t eventPublisherStop(event_publisher_pt *event_publisher){
+celix_status_t eventPublisherStop(event_publisher_pt *event_publisher) {
        (*event_publisher)->running = false;
        apr_status_t status;
        apr_thread_join(&status,(*event_publisher)->sender);
@@ -58,72 +56,51 @@ celix_status_t eventPublisherStop(event_
 }
 
 static void *APR_THREAD_FUNC eventPublisherSendEventThread(apr_thread_t *thd, 
void *handle) {
-//celix_status_t trk_send(apr_thread_t *thd, void *handle) { //this function 
decleration is for debuggin purposes only.
-       /*event_publisher_pt client =  handle;
+    event_publisher_pt *client = (event_publisher_pt *) handle;
 
-       while (client->running && client->eventAdminAdded) {
-               apr_sleep(1000000);
-               event_admin_service_pt event_admin_service = 
client->event_admin_service ;
-               event_admin_pt event_admin =   event_admin_service->eventAdmin;
-               if (event_admin_service != NULL) {
-                       event_pt event;
-                       properties_pt props = properties_create();
-                       properties_set(props,"This is a key","this is a value");
-
-                       
createEvent("log/error/eventpublishers/event/testChannel",props,client->pool,&event);
-                       event_admin_service->postEvent(event_admin,event);
-                       event_admin_service->sendEvent(event_admin,event);
-               }
-
-       }*/
-        event_publisher_pt *client = (event_publisher_pt *) handle;
-
-               while ((*client)->running && (*client)->eventAdminAdded) {
-                               apr_sleep(1000000);
-                               event_admin_service_pt *event_admin_service = 
&(*client)->event_admin_service ;
-                               printf("event admin service pointer in 
publisher : %p\n",event_admin_service);
-                               event_admin_pt event_admin =   
(*event_admin_service)->eventAdmin;
-                               if (event_admin_service != NULL) {
-
-                                               event_pt event;
-                                               properties_pt props = 
properties_create();
-                                               properties_set(props,"This is a 
key","this is a value");
-                                               
(*event_admin_service)->createEvent(event_admin,"log/error/eventpublishers/event/testChannel",props,&event);
-                                               
(*event_admin_service)->postEvent(event_admin,event);
-                                               
(*event_admin_service)->sendEvent(event_admin,event);
-                               }
+    while ((*client)->running && (*client)->eventAdminAdded) {
+        apr_sleep(1000000); // 1 sec.
 
-               }
+        event_admin_service_pt *event_admin_service = 
&(*client)->event_admin_service;
+        event_admin_pt event_admin = (*event_admin_service)->eventAdmin;
+        if (event_admin_service != NULL) {
+            event_pt event;
+            properties_pt props = properties_create();
+            properties_set(props, "This is a key", "this is a value");
+            (*event_admin_service)->createEvent(event_admin, 
"log/error/eventpublishers/event", props, &event);
+            (*event_admin_service)->postEvent(event_admin, event);
+            (*event_admin_service)->sendEvent(event_admin, event);
+        }
+    }
        apr_thread_exit(thd, APR_SUCCESS);
        return NULL;
 }
 
-celix_status_t  eventPublisherAddingService(void * handle, 
service_reference_pt ref, void **service) {
+celix_status_t eventPublisherAddingService(void * handle, service_reference_pt 
ref, void **service) {
        celix_status_t status = CELIX_SUCCESS;
        event_publisher_pt event_publisher = handle;
        status = bundleContext_getService(event_publisher->context, ref, 
service);
        return status;
 }
 
-celix_status_t  eventPublisherAddedService(void * handle, service_reference_pt 
ref, void * service) {
-
-        event_publisher_pt  data =  handle;
-        event_admin_service_pt event_admin_service = NULL;
-        event_admin_service = (event_admin_service_pt ) service;
-        data->event_admin_service = event_admin_service;
-        data->eventAdminAdded = true;
+celix_status_t eventPublisherAddedService(void * handle, service_reference_pt 
ref, void * service) {
+    printf("[PUB] Event admin added...\n");
+    event_publisher_pt data = handle;
+    data->event_admin_service = (event_admin_service_pt) service;
+    data->eventAdminAdded = true;
        return CELIX_SUCCESS;
 }
 
-celix_status_t  eventPublisherModifiedService(void * handle, 
service_reference_pt ref, void * service) {
-       struct data * data = (struct data *) handle;
-       printf("Event admin Modified\n");
+celix_status_t eventPublisherModifiedService(void * handle, 
service_reference_pt ref, void * service) {
+       printf("[PUB] Event admin modified...\n");
        return CELIX_SUCCESS;
 }
 
-celix_status_t  eventPublisherRemovedService(void * handle, 
service_reference_pt ref, void * service) {
-       struct data * data = (struct data *) handle;
-       printf("Event admin Removed %p\n", service);
+celix_status_t eventPublisherRemovedService(void * handle, 
service_reference_pt ref, void * service) {
+       printf("[PUB] Event admin removed...\n");
+    event_publisher_pt data = handle;
+    data->event_admin_service = NULL;
+    data->eventAdminAdded = false;
        return CELIX_SUCCESS;
 }
 


Reply via email to