You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by ej...@apache.org on 2016/08/23 14:02:24 UTC
[2/2] celix git commit: [CELIX-256] made sure events are given to the
right event handlers
[CELIX-256] made sure events are given to the right event handlers
Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/e3fd7f1b
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/e3fd7f1b
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/e3fd7f1b
Branch: refs/heads/feature/event_admin
Commit: e3fd7f1b25e7ebbd860e252ef9dba849de924cc4
Parents: 05d7192
Author: Erik Jansman <ej...@apache.org>
Authored: Tue Aug 23 16:01:31 2016 +0200
Committer: Erik Jansman <ej...@apache.org>
Committed: Tue Aug 23 16:01:31 2016 +0200
----------------------------------------------------------------------
.../event_admin/private/src/event_admin_impl.c | 32 +++++++++++++++++---
1 file changed, 28 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/celix/blob/e3fd7f1b/event_admin/event_admin/private/src/event_admin_impl.c
----------------------------------------------------------------------
diff --git a/event_admin/event_admin/private/src/event_admin_impl.c b/event_admin/event_admin/private/src/event_admin_impl.c
index a7204e1..40cbaa1 100644
--- a/event_admin/event_admin/private/src/event_admin_impl.c
+++ b/event_admin/event_admin/private/src/event_admin_impl.c
@@ -82,7 +82,17 @@ celix_status_t eventAdmin_postEvent(event_admin_pt event_admin, event_pt event)
bool added = false;
while (event_admin->eventAdminRunning && added == false) {
if (celixThreadMutex_tryLock(event_admin->eventListLock) == 0) {
- linkedList_addLast(event_admin->eventList, event);
+ //linkedList_addLast(event_admin->eventList, event);
+ array_list_pt event_handlers;
+ array_list_pt event_and_handlers;
+ const char *topic;
+ eventAdmin_getTopic(&event, &topic);
+ arrayList_create(&event_and_handlers);
+ arrayList_create(&event_handlers);
+ eventAdmin_findHandlersByTopic(event_admin, topic, event_handlers);
+ arrayList_addIndex(event_and_handlers, 0, event);
+ arrayList_addIndex(event_and_handlers, 1, event_handlers);
+ linkedList_addLast(event_admin->eventList, event_and_handlers);
celixThreadMutex_unlock(event_admin->eventListLock);
added = true;
}
@@ -94,6 +104,9 @@ void *eventProcessor(void *handle) {
celix_status_t status = CELIX_SUCCESS;
event_admin_pt *eventAdminPt = handle;
event_pt event = NULL;
+ array_list_pt event_and_handlers;
+
+ arrayList_create(&event_and_handlers);
int waitcounter = 1;
while ((*eventAdminPt)->eventAdminRunning) {
if (celixThreadMutex_tryLock((*eventAdminPt)->eventListLock) == 0) {
@@ -104,7 +117,7 @@ void *eventProcessor(void *handle) {
waitcounter = 1;
}
} else {
- event = linkedList_removeFirst((*eventAdminPt)->eventList);
+ event_and_handlers = linkedList_removeFirst((*eventAdminPt)->eventList);
waitcounter = 1;
}
@@ -116,8 +129,19 @@ void *eventProcessor(void *handle) {
waitcounter = 1;
}
}
- if (event != NULL) {
- status = processEvent((*eventAdminPt), event);
+ if (arrayList_isEmpty(event_and_handlers) == false) {
+ event = arrayList_get(event_and_handlers, 0);
+ array_list_pt event_handlers;
+ arrayList_create(&event_handlers);
+ event_handlers = arrayList_get(event_and_handlers, 1);
+ 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);
+ if (event_handler_service != NULL) {
+ event_handler_service->handle_event(&event_handler_service->event_handler, event);
+ }
+ }
const char *topic;
eventAdmin_getTopic(&event, &topic);