From d973c3f25a6ab56e12b9f858b0692ec4297d84c9 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Tue, 23 Nov 2010 20:26:17 +0000 Subject: Fixed bug 3116888. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2425 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- test/testdyn.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) (limited to 'test/testdyn.c') diff --git a/test/testdyn.c b/test/testdyn.c index 69a1c3312..2035224a1 100644 --- a/test/testdyn.c +++ b/test/testdyn.c @@ -190,16 +190,16 @@ ROMCONST struct testcase testdyn2 = { * coverage. */ -static unsigned regscan(void) { - Thread *tp; - unsigned i = 0; +static bool_t regfind(Thread *tp) { + Thread *ftp; + bool_t found = FALSE; - tp = chRegFirstThread(); + ftp = chRegFirstThread(); do { - i++; - tp = chRegNextThread(tp); - } while (tp != NULL); - return i; + found |= ftp == tp; + ftp = chRegNextThread(ftp); + } while (ftp != NULL); + return found; } static void dyn3_setup(void) { @@ -208,15 +208,9 @@ static void dyn3_setup(void) { } static void dyn3_execute(void) { - unsigned n1, n2, n3; Thread *tp; tprio_t prio = chThdGetPriority(); - /* Current number of threads in the system, two times just in case some - external detached thread terminated.*/ - (void)regscan(); - n1 = regscan(); - /* Testing references increase/decrease and final detach.*/ tp = chThdCreateFromHeap(&heap1, WA_SIZE, prio-1, thread, "A"); test_assert(1, tp->p_refs == 1, "wrong initial reference counter"); @@ -226,18 +220,21 @@ static void dyn3_execute(void) { test_assert(3, tp->p_refs == 1, "references decrease failure"); /* Verify the new threads count.*/ - n2 = regscan(); - test_assert(4, n1 == n2 - 1, "unexpected threads count"); + test_assert(4, regfind(tp), "thread missing from registry"); + test_assert(5, regfind(tp), "thread disappeared"); /* Detach and let the thread execute and terminate.*/ chThdRelease(tp); - test_assert(5, tp->p_refs == 0, "detach failure"); + test_assert(6, tp->p_refs == 0, "detach failure"); + test_assert(7, tp->p_state == THD_STATE_READY, "invalid state"); + test_assert(8, regfind(tp), "thread disappeared"); + test_assert(9, regfind(tp), "thread disappeared"); chThdSleepMilliseconds(50); /* The thread just terminates. */ - test_assert(6, tp->p_state == THD_STATE_FINAL, "invalid state"); + test_assert(10, tp->p_state == THD_STATE_FINAL, "invalid state"); /* Clearing the zombie by scanning the registry.*/ - n3 = regscan(); - test_assert(7, n1 == n3, "unexpected threads count"); + test_assert(11, regfind(tp), "thread disappeared"); + test_assert(12, !regfind(tp), "thread still in registry"); } ROMCONST struct testcase testdyn3 = { -- cgit v1.2.3