summaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-11-17 10:49:59 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-11-17 10:49:59 +0100
commitc360b1a2dc697e0227de54c219471e50860c0adb (patch)
treefa5895a65e2864e554f5ee1c8f9e188b64936eef /testsuite
parentRevert "SX(9): Implement with reader/writer lock" (diff)
downloadrtems-libbsd-c360b1a2dc697e0227de54c219471e50860c0adb.tar.bz2
Revert "RWLOCK(9): Add reader/writer lock implementation"
This was accidentally committed. This reverts commit 97a98f6cd767b3a68279890488c7b451788f84f4.
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/rwlock01/test_main.c308
1 files changed, 33 insertions, 275 deletions
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,53 +102,37 @@ 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)
{
rtems_status_code sc;
@@ -160,21 +142,12 @@ send_events(test_context *ctx, rtems_event_set events)
}
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,18 +186,14 @@ 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);
assert(rw_wowned(rw));
@@ -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;
@@ -433,202 +388,6 @@ test_rw_wlock(test_context *ctx)
}
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)
{
struct rwlock *rw = &ctx->rw;
@@ -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));