CELIX-317: Simplify dm_example. Phase3 now uses suspend strategy and so all locking code is removed (cleaner example).
Project: http://git-wip-us.apache.org/repos/asf/celix/repo Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/51cd8f42 Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/51cd8f42 Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/51cd8f42 Branch: refs/heads/develop Commit: 51cd8f4261ded8c1e52b393be017ce8eb22fb87e Parents: 695b70d Author: Pepijn Noltes <pepijnnol...@gmail.com> Authored: Thu Dec 3 20:54:25 2015 +0100 Committer: Pepijn Noltes <pepijnnol...@gmail.com> Committed: Thu Dec 3 20:54:25 2015 +0100 ---------------------------------------------------------------------- .../phase3/private/include/phase3_cmp.h | 2 +- .../phase3/private/src/phase3_activator.c | 7 +--- .../dm_example/phase3/private/src/phase3_cmp.c | 43 +------------------- 3 files changed, 5 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/celix/blob/51cd8f42/examples/dm_example/phase3/private/include/phase3_cmp.h ---------------------------------------------------------------------- diff --git a/examples/dm_example/phase3/private/include/phase3_cmp.h b/examples/dm_example/phase3/private/include/phase3_cmp.h index 3e4f087..64c4137 100644 --- a/examples/dm_example/phase3/private/include/phase3_cmp.h +++ b/examples/dm_example/phase3/private/include/phase3_cmp.h @@ -31,7 +31,7 @@ typedef struct phase3_cmp_struct phase3_cmp_t; -phase3_cmp_t *phase3_create(bool lockStrategy); +phase3_cmp_t *phase3_create(); int phase3_init(phase3_cmp_t *cmp); int phase3_start(phase3_cmp_t *cmp); int phase3_stop(phase3_cmp_t *cmp); http://git-wip-us.apache.org/repos/asf/celix/blob/51cd8f42/examples/dm_example/phase3/private/src/phase3_activator.c ---------------------------------------------------------------------- diff --git a/examples/dm_example/phase3/private/src/phase3_activator.c b/examples/dm_example/phase3/private/src/phase3_activator.c index bc6a4f7..94f1433 100644 --- a/examples/dm_example/phase3/private/src/phase3_activator.c +++ b/examples/dm_example/phase3/private/src/phase3_activator.c @@ -47,10 +47,7 @@ celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency struct phase3_activator_struct *act = (struct phase3_activator_struct *)userData; - dm_service_dependency_strategy_t strategy = DM_SERVICE_DEPENDENCY_STRATEGY_SUSPEND; - bool lockStrategy = (strategy==DM_SERVICE_DEPENDENCY_STRATEGY_LOCKING); - - act->phase3Cmp = phase3_create(lockStrategy); + act->phase3Cmp = phase3_create(); if (act->phase3Cmp != NULL) { dm_component_pt cmp; @@ -61,7 +58,7 @@ celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency dm_service_dependency_pt dep; serviceDependency_create(&dep); serviceDependency_setService(dep, PHASE2_NAME, NULL); - serviceDependency_setStrategy(dep, strategy); + serviceDependency_setStrategy(dep, DM_SERVICE_DEPENDENCY_STRATEGY_SUSPEND); serviceDependency_setCallbacksSafe(dep, phase3_cmp_t *, phase2_t *, NULL, phase3_addPhase2, NULL, phase3_removePhase2, NULL); serviceDependency_setRequired(dep, true); component_addServiceDependency(cmp, dep); http://git-wip-us.apache.org/repos/asf/celix/blob/51cd8f42/examples/dm_example/phase3/private/src/phase3_cmp.c ---------------------------------------------------------------------- diff --git a/examples/dm_example/phase3/private/src/phase3_cmp.c b/examples/dm_example/phase3/private/src/phase3_cmp.c index a38d77d..db01ad3 100644 --- a/examples/dm_example/phase3/private/src/phase3_cmp.c +++ b/examples/dm_example/phase3/private/src/phase3_cmp.c @@ -38,21 +38,17 @@ struct phase3_cmp_struct { celix_thread_t thread; bool running; double currentValue; - celix_thread_mutex_t mutex; array_list_pt phase2Services; //phase2_t * - bool lockStrategy; }; static void *phase3_thread(void *data); -phase3_cmp_t *phase3_create(bool lockStrategy) { +phase3_cmp_t *phase3_create() { phase3_cmp_t *cmp = calloc(1, sizeof(*cmp)); if (cmp != NULL) { cmp->currentValue = 0.0; cmp->running = false; - celixThreadMutex_create(&cmp->mutex, NULL); arrayList_create(&cmp->phase2Services); - cmp->lockStrategy = lockStrategy; } return cmp; } @@ -83,44 +79,18 @@ int phase3_deinit(phase3_cmp_t *cmp) { } void phase3_destroy(phase3_cmp_t *cmp) { - if(cmp->lockStrategy){ - celixThreadMutex_lock(&cmp->mutex); - } - arrayList_destroy(cmp->phase2Services); - - if(cmp->lockStrategy){ - celixThreadMutex_unlock(&cmp->mutex); - } - - celixThreadMutex_destroy(&cmp->mutex); free(cmp); printf("destroy phase3\n"); } int phase3_addPhase2(phase3_cmp_t *cmp, phase2_t *phase2) { - if(cmp->lockStrategy){ - celixThreadMutex_lock(&cmp->mutex); - } - arrayList_add(cmp->phase2Services, phase2); - - if(cmp->lockStrategy){ - celixThreadMutex_unlock(&cmp->mutex); - } return 0; } int phase3_removePhase2(phase3_cmp_t *cmp, phase2_t *phase2) { - if(cmp->lockStrategy){ - celixThreadMutex_lock(&cmp->mutex); - } - arrayList_removeElement(cmp->phase2Services, phase2); - - if(cmp->lockStrategy){ - celixThreadMutex_unlock(&cmp->mutex); - } return 0; } @@ -132,24 +102,15 @@ static void *phase3_thread(void *data) { double value; while (cmp->running) { - if(cmp->lockStrategy){ - celixThreadMutex_lock(&cmp->mutex); - } - size = arrayList_size(cmp->phase2Services); for (i = 0; i < size; i += 1) { phase2_t *serv = arrayList_get(cmp->phase2Services, i); serv->getData(serv->handle, &value); printf("PHASE3: Data from %p is %f\n", serv, value); } - - if(cmp->lockStrategy){ - celixThreadMutex_unlock(&cmp->mutex); - } - usleep(SLEEPTIME); } celixThread_exit(NULL); return NULL; -} \ No newline at end of file +}