From c360b1a2dc697e0227de54c219471e50860c0adb Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 17 Nov 2017 10:49:59 +0100 Subject: Revert "RWLOCK(9): Add reader/writer lock implementation" This was accidentally committed. This reverts commit 97a98f6cd767b3a68279890488c7b451788f84f4. --- testsuite/rwlock01/test_main.c | 308 +++++------------------------------------ 1 file changed, 33 insertions(+), 275 deletions(-) (limited to 'testsuite') diff --git a/testsuite/rwlock01/test_main.c b/testsuite/rwlock01/test_main.c index 8f00f3e7..a0ae91b6 100644 --- a/testsuite/rwlock01/test_main.c +++ b/testsuite/rwlock01/test_main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -67,11 +67,8 @@ typedef struct { struct rwlock rw; bool done; int rv; - bool done2; - int rv2; int timo; rtems_id worker_task; - rtems_id worker2_task; } test_context; static test_context test_instance; @@ -86,8 +83,9 @@ set_self_prio(rtems_task_priority prio) } static void -worker(test_context *ctx, int *rv, bool *done) +worker_task(rtems_task_argument arg) { + test_context *ctx = (test_context *) arg; struct rwlock *rw = &ctx->rw; while (true) { @@ -104,52 +102,36 @@ worker(test_context *ctx, int *rv, bool *done) if ((events & EVENT_RLOCK) != 0) { rw_rlock(rw); - *done = true; + ctx->done = true; } if ((events & EVENT_WLOCK) != 0) { rw_wlock(rw); - *done = true; + ctx->done = true; } if ((events & EVENT_TRY_RLOCK) != 0) { - *rv = rw_try_rlock(rw); - *done = true; + ctx->rv = rw_try_rlock(rw); + ctx->done = true; } if ((events & EVENT_TRY_WLOCK) != 0) { - *rv = rw_try_wlock(rw); - *done = true; + ctx->rv = rw_try_wlock(rw); + ctx->done = true; } if ((events & EVENT_UNLOCK) != 0) { rw_unlock(rw); - *done = true; + ctx->done = true; } if ((events & EVENT_SLEEP) != 0) { - *rv = rw_sleep(ctx, rw, 0, "worker", ctx->timo); - *done = true; + ctx->rv = rw_sleep(ctx, rw, 0, "worker", ctx->timo); + ctx->done = true; } } } -static void -worker_task(rtems_task_argument arg) -{ - test_context *ctx = (test_context *) arg; - - worker(ctx, &ctx->rv, &ctx->done); -} - -static void -worker2_task(rtems_task_argument arg) -{ - test_context *ctx = (test_context *) arg; - - worker(ctx, &ctx->rv2, &ctx->done2); -} - static void send_events(test_context *ctx, rtems_event_set events) { @@ -159,22 +141,13 @@ send_events(test_context *ctx, rtems_event_set events) assert(sc == RTEMS_SUCCESSFUL); } -static void -send_events2(test_context *ctx, rtems_event_set events) -{ - rtems_status_code sc; - - sc = rtems_event_send(ctx->worker2_task, events); - assert(sc == RTEMS_SUCCESSFUL); -} - static void start_worker(test_context *ctx) { rtems_status_code sc; sc = rtems_task_create( - rtems_build_name('W', 'R', 'K', '1'), + rtems_build_name('W', 'O', 'R', 'K'), PRIO_WORKER, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, @@ -189,23 +162,6 @@ start_worker(test_context *ctx) (rtems_task_argument) ctx ); assert(sc == RTEMS_SUCCESSFUL); - - sc = rtems_task_create( - rtems_build_name('W', 'R', 'K', '2'), - PRIO_WORKER, - RTEMS_MINIMUM_STACK_SIZE, - RTEMS_DEFAULT_MODES, - RTEMS_FLOATING_POINT, - &ctx->worker2_task - ); - assert(sc == RTEMS_SUCCESSFUL); - - sc = rtems_task_start( - ctx->worker2_task, - worker2_task, - (rtems_task_argument) ctx - ); - assert(sc == RTEMS_SUCCESSFUL); } static void @@ -215,9 +171,6 @@ delete_worker(test_context *ctx) sc = rtems_task_delete(ctx->worker_task); assert(sc == RTEMS_SUCCESSFUL); - - sc = rtems_task_delete(ctx->worker2_task); - assert(sc == RTEMS_SUCCESSFUL); } static void @@ -233,17 +186,13 @@ test_rw_non_recursive(test_context *ctx) assert(rw_initialized(rw)); rw_rlock(rw); - assert(!rw_wowned(rw)); + /* FIXME: We use a mutex implementation */ + assert(rw_wowned(rw)); rw_runlock(rw); rw_rlock(rw); rw_unlock(rw); - rw_rlock(rw); - rw_rlock(rw); - rw_runlock(rw); - rw_runlock(rw); - rw_rlock(rw); ok = rw_try_upgrade(rw); assert(ok != 0); @@ -261,7 +210,8 @@ test_rw_non_recursive(test_context *ctx) assert(ok != 0); assert(rw_wowned(rw)); rw_downgrade(rw); - assert(!rw_wowned(rw)); + /* FIXME: We use a mutex implementation */ + assert(rw_wowned(rw)); rw_runlock(rw); rw_rlock(rw); @@ -269,7 +219,8 @@ test_rw_non_recursive(test_context *ctx) assert(ok != 0); assert(rw_wowned(rw)); rw_downgrade(rw); - assert(!rw_wowned(rw)); + /* FIXME: We use a mutex implementation */ + assert(rw_wowned(rw)); rw_unlock(rw); rw_wlock(rw); @@ -301,6 +252,11 @@ test_rw_recursive(test_context *ctx) rw_init_flags(rw, "test", RW_RECURSE); assert(rw_initialized(rw)); + rw_rlock(rw); + rw_rlock(rw); + rw_runlock(rw); + rw_runlock(rw); + rw_wlock(rw); rw_wlock(rw); rw_wunlock(rw); @@ -319,15 +275,13 @@ test_rw_try_rlock(test_context *ctx) rw_init(rw, "test"); rw_rlock(rw); + /* FIXME: We use a mutex implementation */ ctx->done = false; - ctx->rv = 0; + ctx->rv = 1; send_events(ctx, EVENT_TRY_RLOCK); assert(ctx->done); - assert(ctx->rv == 1); + assert(ctx->rv == 0); rw_unlock(rw); - ctx->done = false; - send_events(ctx, EVENT_UNLOCK); - assert(ctx->done); rw_wlock(rw); ctx->done = false; @@ -378,9 +332,10 @@ test_rw_rlock(test_context *ctx) rw_init(rw, "test"); rw_rlock(rw); + /* FIXME: We use a mutex implementation */ ctx->done = false; send_events(ctx, EVENT_RLOCK); - assert(ctx->done); + assert(!ctx->done); rw_unlock(rw); assert(ctx->done); ctx->done = false; @@ -432,202 +387,6 @@ test_rw_wlock(test_context *ctx) rw_destroy(rw); } -static void -test_rw_rlock_phase_fair(test_context *ctx) -{ - struct rwlock *rw = &ctx->rw; - - puts("test rw rlock phase fair"); - - rw_init(rw, "test"); - - rw_rlock(rw); - - ctx->done = false; - send_events(ctx, EVENT_WLOCK); - assert(!ctx->done); - - ctx->done2 = false; - send_events2(ctx, EVENT_RLOCK); - assert(!ctx->done2); - - rw_unlock(rw); - assert(ctx->done); - assert(!ctx->done2); - - ctx->done = false; - send_events(ctx, EVENT_UNLOCK); - assert(ctx->done); - assert(ctx->done2); - - ctx->done2 = false; - send_events2(ctx, EVENT_UNLOCK); - assert(ctx->done2); - - rw_destroy(rw); -} - -static void -test_rw_wlock_phase_fair(test_context *ctx) -{ - struct rwlock *rw = &ctx->rw; - - puts("test rw wlock phase fair"); - - rw_init(rw, "test"); - - rw_wlock(rw); - - ctx->done = false; - send_events(ctx, EVENT_WLOCK); - assert(!ctx->done); - - ctx->done2 = false; - send_events2(ctx, EVENT_RLOCK); - assert(!ctx->done2); - - rw_unlock(rw); - assert(!ctx->done); - assert(ctx->done2); - - ctx->done2 = false; - send_events2(ctx, EVENT_UNLOCK); - assert(ctx->done2); - assert(ctx->done); - - ctx->done = false; - send_events(ctx, EVENT_UNLOCK); - assert(ctx->done); - - rw_destroy(rw); -} - -static void -test_rw_try_upgrade(test_context *ctx) -{ - struct rwlock *rw = &ctx->rw; - int ok; - - puts("test rw try upgrade"); - - rw_init(rw, "test"); - - rw_rlock(rw); - - ctx->done = false; - send_events(ctx, EVENT_WLOCK); - assert(!ctx->done); - - assert(!rw_wowned(rw)); - ok = rw_try_upgrade(rw); - assert(ok != 0); - assert(rw_wowned(rw)); - assert(!ctx->done); - - rw_unlock(rw); - assert(!rw_wowned(rw)); - assert(ctx->done); - - ctx->done = false; - send_events(ctx, EVENT_UNLOCK); - assert(ctx->done); - - rw_rlock(rw); - - ctx->done = false; - send_events(ctx, EVENT_WLOCK); - assert(!ctx->done); - - ctx->done2 = false; - send_events2(ctx, EVENT_RLOCK); - assert(!ctx->done2); - - assert(!rw_wowned(rw)); - ok = rw_try_upgrade(rw); - assert(ok != 0); - assert(rw_wowned(rw)); - assert(!ctx->done); - assert(!ctx->done2); - - rw_unlock(rw); - assert(!rw_wowned(rw)); - assert(!ctx->done); - assert(ctx->done2); - - ctx->done2 = false; - send_events2(ctx, EVENT_UNLOCK); - assert(ctx->done2); - assert(ctx->done); - - ctx->done = false; - send_events(ctx, EVENT_UNLOCK); - assert(ctx->done); - - rw_rlock(rw); - - ctx->done = false; - send_events(ctx, EVENT_RLOCK); - assert(ctx->done); - - assert(!rw_wowned(rw)); - ok = rw_try_upgrade(rw); - assert(ok == 0); - assert(!rw_wowned(rw)); - - ctx->done = false; - send_events(ctx, EVENT_UNLOCK); - assert(ctx->done); - - assert(!rw_wowned(rw)); - ok = rw_try_upgrade(rw); - assert(ok != 0); - assert(rw_wowned(rw)); - - rw_unlock(rw); - assert(!rw_wowned(rw)); - - rw_destroy(rw); -} - -static void -test_rw_downgrade(test_context *ctx) -{ - struct rwlock *rw = &ctx->rw; - - puts("test rw downgrade"); - - rw_init(rw, "test"); - - rw_wlock(rw); - assert(rw_wowned(rw)); - - rw_downgrade(rw); - assert(!rw_wowned(rw)); - - rw_unlock(rw); - assert(!rw_wowned(rw)); - - rw_wlock(rw); - assert(rw_wowned(rw)); - - ctx->done = false; - send_events(ctx, EVENT_RLOCK); - assert(!ctx->done); - - rw_downgrade(rw); - assert(!rw_wowned(rw)); - assert(ctx->done); - - rw_unlock(rw); - assert(!rw_wowned(rw)); - - ctx->done = false; - send_events(ctx, EVENT_UNLOCK); - assert(ctx->done); - - rw_destroy(rw); -} - static void test_rw_sleep_with_rlock(test_context *ctx) { @@ -648,8 +407,11 @@ test_rw_sleep_with_rlock(test_context *ctx) rw_rlock(rw); wakeup(ctx); - assert(ctx->done); + /* FIXME: We use a mutex implementation */ + assert(!ctx->done); rw_unlock(rw); + /* FIXME: We use a mutex implementation */ + assert(ctx->done); ctx->done = false; send_events(ctx, EVENT_UNLOCK); @@ -749,10 +511,6 @@ test_main(void) test_rw_try_wlock(ctx); test_rw_rlock(ctx); test_rw_wlock(ctx); - test_rw_rlock_phase_fair(ctx); - test_rw_wlock_phase_fair(ctx); - test_rw_try_upgrade(ctx); - test_rw_downgrade(ctx); assert(rtems_resource_snapshot_check(&snapshot_1)); -- cgit v1.2.3