MentOS  0.8.0
The Mentoring Operating System
Classes | Macros | Typedefs | Functions
wait.h File Reference

Go to the source code of this file.

Classes

struct  wait_queue_head_t
 Head of the waiting queue. More...
 
struct  wait_queue_entry_t
 Entry of the waiting queue. More...
 

Macros

#define WNOHANG   0x00000001
 Return immediately if no child is there to be waited for.
 
#define WUNTRACED   0x00000002
 Return for children that are stopped, and whose status has not been reported.
 
#define WIFSIGNALED(status)   (!WIFSTOPPED(status) && !WIFEXITED(status))
 returns true if the child process exited because of a signal that was not caught.
 
#define WIFSTOPPED(status)   (((status)&0xff) == 0x7f)
 returns true if the child process that caused the return is currently stopped; this is only possible if the call was done using WUNTRACED().
 
#define WEXITSTATUS(status)   (((status)&0xff00) >> 8)
 evaluates to the least significant eight bits of the return code of the child that terminated, which may have been set as the argument to a call to exit() or as the argument for a return statement in the main program. This macro can only be evaluated if WIFEXITED() returned nonzero.
 
#define WTERMSIG(status)   ((status)&0x7f)
 returns the number of the signal that caused the child process to terminate. This macro can only be evaluated if WIFSIGNALED() returned nonzero.
 
#define WIFEXITED(status)   (WTERMSIG(status) == 0)
 Is nonzero if the child exited normally.
 
#define WSTOPSIG(status)   (WEXITSTATUS(status))
 returns the number of the signal that caused the child to stop. This macro can only be evaluated if WIFSTOPPED() returned nonzero.
 
#define TASK_RUNNING   0x00
 The process is either: 1) running on CPU or 2) waiting in a run queue.
 
#define TASK_INTERRUPTIBLE   (1 << 0)
 The process is sleeping, waiting for some event to occur.
 
#define TASK_UNINTERRUPTIBLE   (1 << 1)
 Similar to TASK_INTERRUPTIBLE, but it doesn't process signals.
 
#define TASK_STOPPED   (1 << 2)
 Stopped, it's not running, and not able to run.
 
#define TASK_TRACED   (1 << 3)
 Is being monitored by other processes such as debuggers.
 
#define EXIT_ZOMBIE   (1 << 4)
 The process has terminated.
 
#define EXIT_DEAD   (1 << 5)
 The final state.
 
#define WQ_FLAG_EXCLUSIVE   0x01
 When an entry has this flag is added to the end of the wait queue. Entries without that flag are, instead, added to the beginning.
 

Typedefs

typedef struct wait_queue_head_t wait_queue_head_t
 Head of the waiting queue.
 
typedef struct wait_queue_entry_t wait_queue_entry_t
 Entry of the waiting queue.
 

Functions

wait_queue_entry_twait_queue_entry_alloc (void)
 Allocates the memory for a wait_queue_entry. More...
 
void wait_queue_entry_dealloc (wait_queue_entry_t *wait_queue_entry)
 Frees the memory of a wait_queue_entry. More...
 
void init_waitqueue_entry (wait_queue_entry_t *wq, struct task_struct *task)
 Initialize the waiting queue entry. More...
 
void add_wait_queue (wait_queue_head_t *head, wait_queue_entry_t *wq)
 Adds the element to the waiting queue. More...
 
void remove_wait_queue (wait_queue_head_t *head, wait_queue_entry_t *wq)
 Removes the element from the waiting queue. More...
 
int default_wake_function (wait_queue_entry_t *wait, unsigned mode, int sync)
 The default wake function, a wrapper for try_to_wake_up. More...
 
wait_queue_entry_tsleep_on (wait_queue_head_t *wq)
 Sets the state of the current process to TASK_UNINTERRUPTIBLE and inserts it into the specified wait queue. More...
 

Detailed Description

Function Documentation

◆ add_wait_queue()

void add_wait_queue ( wait_queue_head_t head,
wait_queue_entry_t wq 
)

Adds the element to the waiting queue.

Parameters
headThe head of the waiting queue.
wqThe entry we insert inside the waiting queue.

◆ default_wake_function()

int default_wake_function ( wait_queue_entry_t wait,
unsigned  mode,
int  sync 
)

The default wake function, a wrapper for try_to_wake_up.

Parameters
waitThe pointer to the wait queue.
modeThe type of wait (TASK_INTERRUPTIBLE or TASK_UNINTERRUPTIBLE).
syncSpecifies if the wakeup should be synchronous.
Returns
1 on success, 0 on failure.

◆ init_waitqueue_entry()

void init_waitqueue_entry ( wait_queue_entry_t wq,
struct task_struct task 
)

Initialize the waiting queue entry.

Parameters
wqThe entry we initialize.
taskThe task associated with the entry.

◆ remove_wait_queue()

void remove_wait_queue ( wait_queue_head_t head,
wait_queue_entry_t wq 
)

Removes the element from the waiting queue.

Parameters
headThe head of the waiting queue.
wqThe entry we remove from the waiting queue.

◆ sleep_on()

Sets the state of the current process to TASK_UNINTERRUPTIBLE and inserts it into the specified wait queue.

Parameters
wqWaitqueue where to sleep.
Returns
Pointer to the entry inside the wq representing the sleeping process.

◆ wait_queue_entry_alloc()

wait_queue_entry_t* wait_queue_entry_alloc ( void  )

Allocates the memory for a wait_queue_entry.

Returns
a pointer to the allocated wait_queue_entry.

◆ wait_queue_entry_dealloc()

void wait_queue_entry_dealloc ( wait_queue_entry_t wait_queue_entry)

Frees the memory of a wait_queue_entry.

Parameters
wait_queue_entrypointer to the wait_queue_entry.