diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2010-08-24 14:29:55 +0000 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2010-08-24 14:29:55 +0000 |
commit | 69f2a078c876de5eb13c2f2eb440160b849dff15 (patch) | |
tree | 570055f609424cf8574ce9807328d28b7416d0d8 /cpukit/sapi/src/chaingetwait.c | |
parent | 2010-08-24 Ralf Corsépius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-69f2a078c876de5eb13c2f2eb440160b849dff15.tar.bz2 |
2010-08-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
PR 1673/cpukit
* sapi/src/chainappendnotify.c, sapi/src/chaingetnotify.c,
sapi/src/chaingetwait.c, sapi/src/chainprependnotify.c: New files.
* sapi/Makefile.am: Reflect changes above.
* sapi/include/rtems/chain.h: Declare
rtems_chain_append_with_notification(),
rtems_chain_prepend_with_notification(),
rtems_chain_get_with_notification(), and rtems_chain_get_with_wait().
* sapi/inline/rtems/chain.inl: Define
rtems_chain_append_with_empty_check(),
rtems_chain_prepend_with_empty_check(), and
rtems_chain_get_with_empty_check().
Diffstat (limited to 'cpukit/sapi/src/chaingetwait.c')
-rw-r--r-- | cpukit/sapi/src/chaingetwait.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/cpukit/sapi/src/chaingetwait.c b/cpukit/sapi/src/chaingetwait.c new file mode 100644 index 0000000000..38986bc9c1 --- /dev/null +++ b/cpukit/sapi/src/chaingetwait.c @@ -0,0 +1,55 @@ +/** + * @file + * + * @ingroup ClassicChains + * + * @brief rtems_chain_get_with_wait() implementation. + */ + +/* + * Copyright (c) 2010 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/chain.h> + +rtems_status_code rtems_chain_get_with_wait( + rtems_chain_control *chain, + rtems_event_set events, + rtems_interval timeout, + rtems_chain_node **node_ptr +) +{ + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_chain_node *node = NULL; + + while ( + sc == RTEMS_SUCCESSFUL + && (node = rtems_chain_get( chain )) == NULL + ) { + rtems_event_set out; + sc = rtems_event_receive( + events, + RTEMS_EVENT_ALL | RTEMS_WAIT, + timeout, + &out + ); + } + + *node_ptr = node; + + return sc; +} |