GLAST / LAT > DAQ and FSW > FSW > Doxygen Index> PBS / dev > pbs / rhel5-32
#include <PBS/FFS.ih>
#include <PBS/L.ih>
#include <PBS/RW.ih>
#include <PBS/PL.h>
#include <PBI/Inline.h>
#include <PBI/Attribute.h>
#include <PBI/PTR.h>
Defines | |
#define | PL__EXP_PROTO INLINE_USR_EXP_PROTO |
Export Prototype spec. | |
#define | PL__LCL_PROTO INLINE_USR_LCL_PROTO |
Internal Prototype spec. | |
#define | PL__EXP_FNC INLINE_USR_EXP_FNC |
Export Function declaration. | |
#define | PL__LCL_FNC INLINE_USR_LCL_FNC |
Internal Function declaration. | |
Functions | |
PL__EXP_PROTO PL_que * | PL__que_get (PL_ctl *pl, int que_id) ATTR_UNUSED_OK |
Locates a pointer to the que specified by que_id. | |
PL__EXP_PROTO PL_node * | PL__insert (PL_que *que, PL_node *node) ATTR_UNUSED_OK |
Adds a node to the tail of a PL managed que. | |
PL__EXP_PROTO PL_node * | PL__jam (PL_que *que, PL_node *node) ATTR_UNUSED_OK |
Adds a node to the head of a PL managed que. | |
PL__EXP_PROTO PL_node * | PL__remove (PL_ctl *pl, volatile const PL_list *wait_list, int *que_id) ATTR_UNUSED_OK |
Removes a node from the head of the highest priority non-empty que. If all eligible queues are empty, then PL__remove returns NULL immediately without blocking. | |
PL__EXP_PROTO PL_node * | PL__removeW (PL_ctl *pl, volatile const PL_list *wait_list, int *que_id) ATTR_UNUSED_OK |
Removes a node from the head of the highest priority non-empty que. If all eligible queues are empty, then PL__removeW waits indefinitely. | |
PL__EXP_PROTO PL_node * | PL__removeW_toc (PL_ctl *pl, volatile const PL_list *wait_list, int *que_id, const TOC *toc) ATTR_UNUSED_OK |
Removes a node from the head of the highest priority non-empty que. If all eligible queues are empty, then PL__removeW_toc waits the specified until the timeout expires. | |
PL__EXP_PROTO PL_list | PL__get (PL_ctl *pl) ATTR_UNUSED_OK |
Returns a list of the currently active ques. | |
PL__EXP_PROTO PL_list | PL__getW (PL_ctl *pl, volatile const PL_list *list) ATTR_UNUSED_OK |
Returns a list of the currently active ques which, at the time of the call, is guaranteed to include at least one member of the wait list. The routine blocks indefinitely until this condition is met. | |
PL__EXP_PROTO PL_list | PL__getW_toc (PL_ctl *pl, volatile const PL_list *list, const TOC *toc) ATTR_UNUSED_OK |
Returns a list of the currently active ques which, at the time of the call, is guaranteed to include at least one member of the wait list. The routine blocks until this condition is met or the timeout expires. | |
PL__LCL_FNC PL_node * | pl__remove (PL_ctl *pl, volatile const PL_list *wait_list, int *que_id) |
Bare bones, non-interlocked removal routine. This is for internal use only. | |
PL__EXP_FNC PL_list | PL__wake (PL_ctl *pl, PL_list wait_list) |
Issues a wake up call to the PL ques if any of ques in the wait list is currently active. | |
PL__LCL_FNC PL_list | pl__test_or (PL_ctl *pl, volatile const PL_list *list) |
Tests whether the current active list of ques contains any member of the specified list. |
CVS $Id: PL.ih,v 1.6 2011/03/24 23:05:42 apw Exp $
Internally, the interlocking of the queues may or may not be private to each queue. This is a platform implementation decision depending on the cost of interlock mechanism. However, the blocking mechanism is always shared among all the queues. This, in fact, is the distinguishing feature.
Returns a list of the currently active ques.
pl | A previously initialized PL control structure. |
References _PL_ctl::mactive.
Returns a list of the currently active ques which, at the time of the call, is guaranteed to include at least one member of the wait list. The routine blocks indefinitely until this condition is met.
pl | A previously initialized PL control structure. | |
wait_list | A pointer to the list of the ques to wait on. The wait is treated as an OR. |
References pl__test_or(), _PL_ctl::rw, and RW_getW().
PL__EXP_FNC PL_list PL__getW_toc | ( | PL_ctl * | pl, | |
volatile const PL_list * | wait_list, | |||
const TOC * | toc | |||
) |
Returns a list of the currently active ques which, at the time of the call, is guaranteed to include at least one member of the wait list. The routine blocks until this condition is met or the timeout expires.
pl | A previously initialized PL control structure. | |
wait_list | A pointer to the list of the ques to wait on. The wait is treated as an OR. | |
toc | The timeout control structure. |
References pl__test_or(), _PL_ctl::rw, RW_getW_toc(), and TOC_IS_NOWAIT.
Adds a node to the tail of a PL managed que.
que | A PL managed que. | |
node | The node to add to que |
References _PL_que::head, _PL_que::id, L__insert(), _PL_ctl::mactive, _PL_que::pl, PL_ADD, _PL_ctl::rw, RW__lock(), RW__unlock(), and RW__wake().
Adds a node to the head of a PL managed que.
que | A PL managed que. | |
node | The node to add to que |
References _PL_que::head, _PL_que::id, L__jam(), _PL_ctl::mactive, _PL_que::pl, PL_ADD, _PL_ctl::rw, RW__lock(), RW__unlock(), and RW__wake().
Locates a pointer to the que specified by que_id.
pl | The priority list | |
que_id | The id of the que to locate |
References _PL_ctl::ques.
Referenced by FORK_que_get().
Bare bones, non-interlocked removal routine. This is for internal use only.
pl | The priority list | |
wait_list | Pointer to The list of ques to wait on. | |
que_id | Returned with the id of the que the node was removed from |
References _PL_que::head, L__remove(), L_IS_EMPTY, _PL_ctl::mactive, PL_ELIMINATE, PL_FIND, and _PL_ctl::ques.
Referenced by PL__remove().
Removes a node from the head of the highest priority non-empty que. If all eligible queues are empty, then PL__remove returns NULL immediately without blocking.
pl | A previously initialized PL control structure. | |
wait_list | A pointer to the list of the ques to wait on. The wait is treated as an OR. | |
que_id | Returned with the id of the que the node was removed from. |
References pl__remove(), _PL_ctl::rw, RW__lock(), and RW__unlock().
Referenced by PL__removeW(), and PL__removeW_toc().
Removes a node from the head of the highest priority non-empty que. If all eligible queues are empty, then PL__removeW waits indefinitely.
pl | A previously initialized PL control structure. | |
wait_list | A pointer to the list of the ques to wait on. The wait is treated as an OR. as an OR. | |
que_id | Returned with the id of the que the node was removed from. |
If there is an error, the routine returns NULL as its node. There are only two reasons NULL will be returned:
1. Internal error 2. The list of eligible ques does not include any configured ques.
References PL__remove(), _PL_ctl::rw, and RW_getW().
PL__EXP_FNC PL_node * PL__removeW_toc | ( | PL_ctl * | pl, | |
volatile const PL_list * | wait_list, | |||
int * | que_id, | |||
const TOC * | toc | |||
) |
Removes a node from the head of the highest priority non-empty que. If all eligible queues are empty, then PL__removeW_toc waits the specified until the timeout expires.
pl | A previously initialized PL control structure. | |
wait_list | A pointer to the list of the ques to wait on. The wait is treated as an OR. | |
toc | The TimeOut control structure. This may be specified as TOC_NOWAIT or TOC_FOREVER. | |
que_id | Returned with the id of the que the node was removed from |
If there is an error, the routine returns NULL as its node. There are only three reasons NULL will be returned:
References PL__remove(), _PL_ctl::rw, RW_getW_toc(), and TOC_IS_NOWAIT.
Tests whether the current active list of ques contains any member of the specified list.
pl | The PL control structure | |
list | A pointer to the list of the ques to test. |
References _PL_ctl::mactive.
Referenced by PL__getW(), and PL__getW_toc().
Issues a wake up call to the PL ques if any of ques in the wait list is currently active.
pl | A previously initialized PL control structure. | |
wakeup_list | The list of ques to issue the wakeup call on |
pl | A previously initialized PL control structure. | |
wakeup_list | The list of ques to issue the wakeup call on |
References _PL_ctl::mactive, _PL_ctl::rw, RW__lock(), RW__unlock(), and RW__wake().
Referenced by FORK_enable().