summaryrefslogtreecommitdiffstats
path: root/cpukit/libtest
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-02-21 17:26:31 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-02-24 09:22:36 +0100
commit5be6e614811bae3904b5ea9850dfdcfe6e2bcc08 (patch)
tree184ac0555e39bb49fbb4353bcf17ebe77786e9ef /cpukit/libtest
parentrtems: Move rtems_task_priority definition (diff)
downloadrtems-5be6e614811bae3904b5ea9850dfdcfe6e2bcc08.tar.bz2
libtest: Add support to seize/surrender objects
Diffstat (limited to 'cpukit/libtest')
-rw-r--r--cpukit/libtest/t-test-rtems-objs.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/cpukit/libtest/t-test-rtems-objs.c b/cpukit/libtest/t-test-rtems-objs.c
index ad8d153154..6548848c49 100644
--- a/cpukit/libtest/t-test-rtems-objs.c
+++ b/cpukit/libtest/t-test-rtems-objs.c
@@ -410,3 +410,57 @@ T_check_rtems_timers(T_event event, const char *name)
break;
};
}
+
+void *
+T_seize_objects(rtems_status_code (*create)(void *, uint32_t *), void *arg)
+{
+ void *objects;
+
+ objects = NULL;
+
+ while (true) {
+ rtems_status_code sc;
+ rtems_id id;
+
+ id = 0;
+ sc = (*create)(arg, &id);
+
+ if (sc == RTEMS_SUCCESSFUL) {
+ const Objects_Information *info;
+ Objects_Control *obj;
+
+ info = _Objects_Get_information_id(id);
+ T_quiet_assert_not_null(info);
+ obj = _Objects_Get_no_protection(id, info);
+ T_quiet_assert_not_null(obj);
+ obj->Node.next = objects;
+ objects = obj;
+ } else {
+ T_quiet_rsc(sc, RTEMS_TOO_MANY);
+ break;
+ }
+ }
+
+ return objects;
+}
+
+void
+T_surrender_objects(void **objects_p, rtems_status_code (*delete)(uint32_t))
+{
+ void *objects;
+
+ objects = *objects_p;
+ *objects_p = NULL;
+
+ while (objects != NULL) {
+ Objects_Control *obj;
+ rtems_status_code sc;
+
+ obj = objects;
+ objects = _Chain_Next(&obj->Node);
+ _Chain_Set_off_chain(&obj->Node);
+
+ sc = (*delete)(obj->id);
+ T_quiet_rsc_success(sc);
+ }
+}