diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-12-10 10:59:02 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-02-12 09:08:41 +0100 |
commit | 4eab96bbb421018c17f984c1c3a4220abe16c788 (patch) | |
tree | 0fbdf020e809c9b54891b6130ab7358ba214d603 | |
parent | 8ff1af16551eedd7e98af6c65a91bb62b9403991 (diff) |
score: Add _Freechain_Pop()
Update #3835.
-rw-r--r-- | cpukit/include/rtems/score/freechain.h | 12 | ||||
-rw-r--r-- | testsuites/sptests/spfreechain01/init.c | 4 |
2 files changed, 16 insertions, 0 deletions
diff --git a/cpukit/include/rtems/score/freechain.h b/cpukit/include/rtems/score/freechain.h index bbae0b65bb..e656f64f8e 100644 --- a/cpukit/include/rtems/score/freechain.h +++ b/cpukit/include/rtems/score/freechain.h @@ -92,6 +92,18 @@ RTEMS_INLINE_ROUTINE bool _Freechain_Is_empty( } /** + * @brief Pop an item from the freechain. + * + * The freechain must not be empty. + * + * @param freechain The freechain control. + */ +RTEMS_INLINE_ROUTINE void *_Freechain_Pop( Freechain_Control *freechain ) +{ + return _Chain_Get_first_unprotected( &freechain->Free ); +} + +/** * @brief Gets a node from the freechain. * * @param[in, out] freechain The freechain control. diff --git a/testsuites/sptests/spfreechain01/init.c b/testsuites/sptests/spfreechain01/init.c index 370bfb41eb..72cd7920c5 100644 --- a/testsuites/sptests/spfreechain01/init.c +++ b/testsuites/sptests/spfreechain01/init.c @@ -35,6 +35,10 @@ static rtems_task Init(rtems_task_argument ignored) rtems_test_assert(_Chain_First(&fc.Free) == &node2.Node); rtems_test_assert(_Chain_Last(&fc.Free) == &node2.Node); + node = _Freechain_Pop(&fc); + rtems_test_assert(_Freechain_Is_empty(&fc)); + rtems_test_assert(node == &node2); + _Freechain_Initialize(&fc, NULL, 0, sizeof(test_node)); rtems_test_assert(_Freechain_Is_empty(&fc)); |