[rtems commit] spsyslock01: Fix object compare
Sebastian Huber
sebh at rtems.org
Fri Feb 2 14:20:05 UTC 2018
Module: rtems
Branch: master
Commit: d71d1da5083a211eca91c48b58359e9e8245bdbb
Changeset: http://git.rtems.org/rtems/commit/?id=d71d1da5083a211eca91c48b58359e9e8245bdbb
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Fri Feb 2 08:00:23 2018 +0100
spsyslock01: Fix object compare
Due to structure internal padding the use of memcmp() may lead to
sporadic test failures.
Update #3082.
---
testsuites/sptests/spsyslock01/init.c | 64 ++++++++++++++++++++++++++++++++---
1 file changed, 59 insertions(+), 5 deletions(-)
diff --git a/testsuites/sptests/spsyslock01/init.c b/testsuites/sptests/spsyslock01/init.c
index 1e3d16a..2354667 100644
--- a/testsuites/sptests/spsyslock01/init.c
+++ b/testsuites/sptests/spsyslock01/init.c
@@ -94,6 +94,60 @@ static void get_abs_timeout(struct timespec *to)
}
}
+static bool eq_tq(
+ const struct _Thread_queue_Queue *a,
+ const struct _Thread_queue_Queue *b
+)
+{
+ return a->_Lock._next_ticket == b->_Lock._next_ticket
+ && a->_Lock._now_serving == b->_Lock._now_serving
+ && a->_heads == b->_heads
+ && a->_owner == b->_owner
+ && a->_name == b->_name;
+}
+
+static bool eq_mtx(
+ const struct _Mutex_Control *a,
+ const struct _Mutex_Control *b
+)
+{
+ return eq_tq(&a->_Queue, &b->_Queue);
+}
+
+static bool eq_rec_mtx(
+ const struct _Mutex_recursive_Control *a,
+ const struct _Mutex_recursive_Control *b
+)
+{
+ return eq_mtx(&a->_Mutex, &b->_Mutex)
+ && a->_nest_level == b->_nest_level;
+}
+
+static bool eq_cond(
+ const struct _Condition_Control *a,
+ const struct _Condition_Control *b
+)
+{
+ return eq_tq(&a->_Queue, &b->_Queue);
+}
+
+static bool eq_sem(
+ const struct _Semaphore_Control *a,
+ const struct _Semaphore_Control *b
+)
+{
+ return eq_tq(&a->_Queue, &b->_Queue)
+ && a->_count == b->_count;
+}
+
+static bool eq_futex(
+ const struct _Futex_Control *a,
+ const struct _Futex_Control *b
+)
+{
+ return eq_tq(&a->_Queue, &b->_Queue);
+}
+
static void test_initialization(test_context *ctx)
{
struct _Mutex_Control mtx = _MUTEX_INITIALIZER;
@@ -108,11 +162,11 @@ static void test_initialization(test_context *ctx)
_Semaphore_Initialize(&ctx->sem, 1);
_Futex_Initialize(&ctx->futex);
- rtems_test_assert(memcmp(&mtx, &ctx->mtx, sizeof(mtx)) == 0);
- rtems_test_assert(memcmp(&rec_mtx, &ctx->rec_mtx, sizeof(rec_mtx)) == 0);
- rtems_test_assert(memcmp(&cond, &ctx->cond, sizeof(cond)) == 0);
- rtems_test_assert(memcmp(&sem, &ctx->sem, sizeof(sem)) == 0);
- rtems_test_assert(memcmp(&futex, &ctx->futex, sizeof(futex)) == 0);
+ rtems_test_assert(eq_mtx(&mtx, &ctx->mtx));
+ rtems_test_assert(eq_rec_mtx(&rec_mtx, &ctx->rec_mtx));
+ rtems_test_assert(eq_cond(&cond, &ctx->cond));
+ rtems_test_assert(eq_sem(&sem, &ctx->sem));
+ rtems_test_assert(eq_futex(&futex, &ctx->futex));
_Mutex_Destroy(&mtx);
_Mutex_recursive_Destroy(&rec_mtx);
More information about the vc
mailing list