blob: 46903fed984815a7fc94753617b451171783bef9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/**
* @file
*
* @brief POSIX Thread API Support
*
* This defines the POSIX thread API extension.
*/
/*
* COPYRIGHT (c) 1989-2014.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#ifndef _RTEMS_POSIX_THREADSUP_H
#define _RTEMS_POSIX_THREADSUP_H
#include <rtems/score/coresem.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/watchdog.h>
#include <pthread.h>
#include <signal.h>
/**
* @defgroup POSIX_THREAD POSIX Thread API Extension
*
* @ingroup POSIXAPI
*
*/
/**@{**/
#ifdef __cplusplus
extern "C" {
#endif
/**
* This defines the POSIX API support structure associated with
* each thread in a system with POSIX configured.
*/
typedef struct {
/** This is the POSIX threads attribute set. */
pthread_attr_t Attributes;
/** This indicates whether the thread is attached or detached. */
int detachstate;
/** This is the set of threads waiting for the thread to exit. */
Thread_queue_Control Join_List;
/** This is the thread's current scheduling policy. */
int schedpolicy;
/** This is the thread's current set of scheduling parameters. */
struct sched_param schedparam;
/**
* This is the high priority to execute at when using the sporadic
* scheduler.
*/
int ss_high_priority;
/**
* This is the timer which controls when the thread executes at
* high and low priority when using the sporadic scheduler.
*/
Watchdog_Control Sporadic_timer;
/** This is the set of signals which are currently blocked. */
sigset_t signals_blocked;
/** This is the set of signals which are currently pending. */
sigset_t signals_pending;
/**
* @brief Signal post-switch action in case signals are pending.
*/
Thread_Action Signal_action;
/*******************************************************************/
/*******************************************************************/
/*************** POSIX Cancelability ***************/
/*******************************************************************/
/*******************************************************************/
/** This is the cancelability state. */
int cancelability_state;
/** This is the cancelability type. */
int cancelability_type;
/** This indicates if a cancelation has been requested. */
int cancelation_requested;
#ifndef HAVE_STRUCT__PTHREAD_CLEANUP_CONTEXT
/** This is the set of cancelation handlers. */
Chain_Control Cancellation_Handlers;
#else /* HAVE_STRUCT__PTHREAD_CLEANUP_CONTEXT */
/**
* @brief LIFO list of cleanup contexts.
*/
struct _pthread_cleanup_context *last_cleanup_context;
#endif /* HAVE_STRUCT__PTHREAD_CLEANUP_CONTEXT */
} POSIX_API_Control;
/**
* @brief POSIX thread exit shared helper.
*
* 16.1.5.1 Thread Termination, p1003.1c/Draft 10, p. 150
*
* This method is a helper routine which ensures that all
* POSIX thread calls which result in a thread exiting will
* do so in the same manner.
*
* @param[in] the_thread is a pointer to the thread exiting or being canceled
* @param[in] value_ptr is a pointer the value to be returned by the thread
*
* NOTE: Key destructors are executed in the POSIX api delete extension.
*
*/
void _POSIX_Thread_Exit(
Thread_Control *the_thread,
void *value_ptr
);
/** @} */
#ifdef __cplusplus
}
#endif
#endif
/* end of include file */
|