• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

errno.hD18-Mar-20255.4 KiB22085

fcntl.hD18-Mar-20253.8 KiB9339

posix_demo.cD18-Mar-20258.8 KiB345192

posix_signal_nested_test.cD18-Mar-20254.8 KiB229102

posix_signal_resume_thread_test.cD18-Mar-20256.5 KiB296135

posix_signal_self_send_test.cD18-Mar-20259.8 KiB437244

posix_signal_sigmask_test.cD18-Mar-202510.5 KiB451221

posix_signal_sigwait_test.cD18-Mar-20257.4 KiB339166

posix_signal_suspended_thread_test.cD18-Mar-20256.2 KiB289131

pthread.hD18-Mar-20253 KiB5810

px_abs_time_to_rel_ticks.cD18-Mar-20254.3 KiB9226

px_clock_getres.cD18-Mar-20254.2 KiB7712

px_clock_gettime.cD18-Mar-20254.5 KiB8515

px_clock_settime.cD18-Mar-20254.6 KiB8114

px_cond_broadcast.cD18-Mar-20257.3 KiB14738

px_cond_destroy.cD18-Mar-20255.4 KiB10127

px_cond_init.cD18-Mar-20255.1 KiB9319

px_cond_signal.cD18-Mar-20256.3 KiB11327

px_cond_timedwait.cD18-Mar-20257.6 KiB14540

px_cond_wait.cD18-Mar-20257.1 KiB13531

px_error.cD18-Mar-20257.1 KiB11311

px_in_thread_context.cD18-Mar-20255.3 KiB10728

px_int.hD18-Mar-20258.5 KiB21070

px_internal_signal_dispatch.cD18-Mar-20257.2 KiB16747

px_memory_allocate.cD18-Mar-20255.2 KiB10020

px_memory_release.cD18-Mar-20254.7 KiB8414

px_mq_arrange_msg.cD18-Mar-20258.1 KiB18972

px_mq_attr_init.cD18-Mar-20254.4 KiB8012

px_mq_close.cD18-Mar-20256.1 KiB14642

px_mq_create.cD18-Mar-20259.3 KiB22672

px_mq_find_queue.cD18-Mar-20255.5 KiB11341

px_mq_get_new_queue.cD18-Mar-20255.6 KiB12135

px_mq_get_queue_desc.cD18-Mar-20254.8 KiB8817

px_mq_open.cD18-Mar-20258.9 KiB20490

px_mq_priority_search.cD18-Mar-20255.4 KiB10928

px_mq_putback_queue.cD18-Mar-20254.4 KiB8111

px_mq_queue_delete.cD18-Mar-20254.7 KiB9016

px_mq_queue_init.cD18-Mar-20254.5 KiB8518

px_mq_receive.cD18-Mar-202510.2 KiB273128

px_mq_reset_queue.cD18-Mar-20254.7 KiB9316

px_mq_send.cD18-Mar-20259.2 KiB22294

px_mq_unlink.cD18-Mar-20255.4 KiB12034

px_mx_attr_destroy.cD18-Mar-20255 KiB9117

px_mx_attr_getprotocol.cD18-Mar-20254.8 KiB8717

px_mx_attr_getpshared.cD18-Mar-20254.8 KiB8717

px_mx_attr_gettype.cD18-Mar-20254.8 KiB8717

px_mx_attr_initi.cD18-Mar-20254.8 KiB9219

px_mx_attr_setprotocol.cD18-Mar-20255 KiB9626

px_mx_attr_setpshared.cD18-Mar-20254.9 KiB9426

px_mx_attr_settype.cD18-Mar-20255 KiB9626

px_mx_destroy.cD18-Mar-20254.9 KiB10025

px_mx_init.cD18-Mar-20256.2 KiB13644

px_mx_lock.cD18-Mar-20255.2 KiB10330

px_mx_set_default_mutexattr.cD18-Mar-20254.3 KiB7511

px_mx_timedlock.cD18-Mar-20255.9 KiB12037

px_mx_trylock.cD18-Mar-20255.4 KiB11132

px_mx_unlock.cD18-Mar-20255.3 KiB10832

px_nanosleep.cD18-Mar-20256 KiB11225

px_pth_attr_destroy.cD18-Mar-20255 KiB8813

px_pth_attr_getdetachstate.cD18-Mar-20255.2 KiB9317

px_pth_attr_getinheritsched.cD18-Mar-20255.3 KiB9317

px_pth_attr_getschedparam.cD18-Mar-20254.9 KiB8717

px_pth_attr_getschedpolicy.cD18-Mar-20254.9 KiB8817

px_pth_attr_getstack.cD18-Mar-20255.1 KiB9019

px_pth_attr_getstackaddr.cD18-Mar-20254.8 KiB8517

px_pth_attr_getstacksize.cD18-Mar-20254.9 KiB8817

px_pth_attr_init.cD18-Mar-20254.6 KiB8613

px_pth_attr_setdetachstate.cD18-Mar-20255.2 KiB9217

px_pth_attr_setinheritsched.cD18-Mar-20255.2 KiB9017

px_pth_attr_setschedparam.cD18-Mar-20255.1 KiB9523

px_pth_attr_setschedpolicyl.cD18-Mar-20254.9 KiB8617

px_pth_attr_setstack.cD18-Mar-20255.1 KiB9019

px_pth_attr_setstackaddr.cD18-Mar-20254.7 KiB8617

px_pth_attr_setstacksize.cD18-Mar-20254.8 KiB8617

px_pth_cancel.cD18-Mar-20255.8 KiB12037

px_pth_create.cD18-Mar-202512.3 KiB265100

px_pth_detach.cD18-Mar-20255.6 KiB10723

px_pth_equal.cD18-Mar-20254.6 KiB8010

px_pth_exit.cD18-Mar-20255.3 KiB9412

px_pth_getcanceltype.cD18-Mar-20255.2 KiB10025

px_pth_getschedparam.cD18-Mar-20254.9 KiB9318

px_pth_init.cD18-Mar-202555.3 KiB971215

px_pth_join.cD18-Mar-20258.6 KiB18563

px_pth_kill.cD18-Mar-202513.9 KiB329129

px_pth_once.cD18-Mar-20256 KiB12135

px_pth_self.cD18-Mar-20254.9 KiB9415

px_pth_set_default_pthread_attr.cD18-Mar-20254.4 KiB7614

px_pth_setcancelstate.cD18-Mar-20255.3 KiB10325

px_pth_setcanceltype.cD18-Mar-20255.3 KiB10225

px_pth_setschedparam.cD18-Mar-20255.7 KiB12032

px_pth_sigmask.cD18-Mar-20259.8 KiB23181

px_pth_testcancel.cD18-Mar-20255.1 KiB9214

px_pth_yield.cD18-Mar-20254.6 KiB8211

px_px_initialize.cD18-Mar-202514.4 KiB27660

px_sched_get_prio.cD18-Mar-20257.3 KiB12517

px_sched_yield.cD18-Mar-20254.6 KiB8814

px_sem_close.cD18-Mar-20255.3 KiB11632

px_sem_destroy.cD18-Mar-20254.7 KiB9019

px_sem_find_sem.cD18-Mar-20255.5 KiB12041

px_sem_get_new_sem.cD18-Mar-20254.9 KiB9922

px_sem_getvalue.cD18-Mar-20254.9 KiB10019

px_sem_init.cD18-Mar-20254.9 KiB9827

px_sem_open.cD18-Mar-20259.6 KiB258100

px_sem_post.cD18-Mar-20254.9 KiB10322

px_sem_reset.cD18-Mar-20254.2 KiB7713

px_sem_set_sem_name.cD18-Mar-20254.2 KiB7511

px_sem_trywait.cD18-Mar-20255.7 KiB13044

px_sem_unlink.cD18-Mar-20255.3 KiB11429

px_sem_wait.cD18-Mar-20255.2 KiB11328

px_sig_addset.cD18-Mar-20254.7 KiB8714

px_sig_delset.cD18-Mar-20254.8 KiB8714

px_sig_emptyset.cD18-Mar-20254.5 KiB8514

px_sig_fillset.cD18-Mar-20254.6 KiB8614

px_sig_signal.cD18-Mar-20255.2 KiB10321

px_sig_wait.cD18-Mar-20258.4 KiB19462

px_sleep.cD18-Mar-20255.1 KiB9720

px_system_manager.cD18-Mar-20255.5 KiB10827

readme_release_history.txtD18-Mar-20252.1 KiB4728

readme_threadx_posix.txtD18-Mar-202516.6 KiB363259

sched.hD18-Mar-20253.2 KiB6513

signal.hD18-Mar-20256.3 KiB12039

time.hD18-Mar-20253.7 KiB8326

tx_posix.hD18-Mar-202521.7 KiB574284

tx_px_time.hD18-Mar-20253.5 KiB7619

readme_release_history.txt

1
2  px_abs_time_to_rel_ticks.c        Casted size_t to ULONG.
3
4  px_clock_gettime.c        Casted size_t to ULONG.
5
6  px_clock_settime.c        Casted size_t to ULONG.
7
8  px_int.h      Removed posix_initialize prototype (moved to tx_posix.h).
9
10  px_nanosleep.c        Casted size_t to ULONG.
11
12  tx_posix.h        Reduced default object pool sizes, added posix_initialize prototype.
13                        Improved default stack size symbol name
14
15  px_memory_release.c 	When thread completes and posix_do_pthread_delete() is called,
16                            posix_memory_release() returns with error if stack was not
17                            allocated from the posix pool but rather stack is a static array.
18
19  px_mq_open.c		Fixed bug to handle a NULL attribute in mq_open().
20
21  px_pth_create.c       Call to pthread_create() with pthread_attr_t set to NULL or with the
22                            default values as set by pthread_attr_init() has unexpected behavior.
23    			    Fixed by adding code to use defaults.
24
25  px_pth_init.c         Fixed memory leak when threads are released or killed by
26  			    calling posix_reset_pthread after posix_destroy_pthread()
27                            which was not returning memory to the TCB pool
28
29			Fixed bug when trying to join threads from ThreadX context when
30	                    there is an illegal pointer convertion
31
32  px_pth_join.c	Fixed bug when calling join from ThreadX context to check if called from
33             		    a ThreadX context and if so, return error.
34
35  px_sem_init.c         Fixed a bug causing Unnamed semaphore init to return error when ThreadX
36                            the semaphore is created correctly.
37
38
39  px_sem_open.c         Modified error return values as per the Linux man pages.
40
41  px_pth_sigmask.c      Modified error return values as per the Linux man pages.
42
43  px_sig_wait.c         Modified error return value type from an INT to a UINT and modified the logic
44                              to return the number of seconds remaining in the sleep interval. A return value of
45                              zero is successful completion.
46
47

readme_threadx_posix.txt

1                         POSIX Compliancy Wrapper for Azure RTOS ThreadX
2
3
4
51.0 POSIX Compliancy Wrapper Overview
6
7The POSIX Compliancy Wrapper supports many of the basic POSIX calls, with
8some limitations, and utilizes ThreadX� primitives underneath. This POSIX
9compatibility layer should have good performance since it utilizes internal
10ThreadX primitives and bypasses basic ThreadX error checking.
11
12
131.1 POSIX Compliancy Wrapper Source
14
15The Wrapper source code is designed for simplicity and is comprised of separate source
16files for most functions.  Including the supplied pthread.h file will import
17all the necessary POSIX constants and subroutine prototypes.
18
19
201.2 POSIX Compliancy Wrapper Documentation
21
22This document itself serves as a POSIX Compliancy Wrapper User Guide by
23providing an overview of the porting process, including various caveats and
24pitfalls to watch out for. In addition, each covered POSIX call is documented,
25including information about supported/unsupported options, limitations, deviations,
26and suggestions on how to work-around any limitations.
27
28
292.0 Installation
30
31The POSIX Compliancy Wrapper is easily installed by adding the
32the posix library to your current application build. Make sure your application build
33references the same header files as the ones the posix library has been built with.
34The file pthread.h must be included in your application source where POSIX
35calls are required.
36Since the POSIX compliancy wrapper does not cover the complete standard, not all prototypes
37are provided. Most notably is the header file tx_px_time.h.
38
392.1 Initialization
40
41The POSIX Compliancy Wrapper requires that a special initialization function is called
42prior to accessing any POSIX calls.  The function to call and its prototype is:
43
44VOID    *posix_initialize(VOID * posix_memory);
45
46This function is usually called from the application specific ThreadX
47initialization routine, tx_application_define().  The memory pointer supplied
48to posix_initialize must be a contiguouis reserved section of memory
49that has at least the following number of bytes:
50
51
52        POSIX_SYSTEM_STACK_SIZE +
53        TX_REGION0_SIZE_IN_BYTES +           /* Region0 size         */
54        (WORK_QUEUE_DEPTH * WORK_REQ_SIZE) + /* system queue size    */
55        POSIX_HEAP_SIZE_IN_BYTES
56
57
58These equates are defined in tx_posix.h.  The following additional equates
59define the number of POSIX objects supported by the POSIX Wrapper (default
60value is shown):
61
62       SEM_NSEMS_MAX          100        /* simultaneous POSIX semaphores */
63
64       SEM_NAME_MAX           10         /* maximum length of name of semaphore */
65
66       SEM_VALUE_MAX          100        /* max value of semaphore while initialization */
67
68       POSIX_MAX_QUEUES       32         /* maximum number of simultaneous POSIX
69                                                message queues supported  */
70
71       PATH_MAX               10         /* maximum length of name of a message queue  */
72
73       PTHREAD_THREADS_MAX    256        /* define the maximum number of simultaneous
74                                                POSIX Pthreads supported.  */
75
76       POSIX_MAX_MUTEX        32         /* define the maximum number of simultaneous
77                                                POSIX mutexes sported.     */
78
79
80The function posix_initialize will return a pointer to the next free
81available memory location for the application.
82
83
843.0  POSIX Calls
85
86Once posix_initialize returns, POSIX calls can be made.
87The Threadx POSIX Compliancy Wrapper supports the following POSIX
88calls:
89
90/***********************************************************************/
91/*              CALLS RELATED TO POSIX MESSAGE QUEUE                     */
92/***********************************************************************/
93
94INT                   mq_send(mqd_t mqdes, const char * msg_ptr,
95                                ssize_t msg_len,ULONG msg_prio );
96ssize_t               mq_receive(mqd_t mqdes, VOID *pMsg, ssize_t msgLen,
97                                   ULONG *pMsgPrio );
98INT                   mq_unlink(const char * mqName);
99INT                   mq_close(mqd_t mqdes);
100mqd_t                 mq_open(const CHAR * mqName, ULONG oflags,...);
101
102
103/***********************************************************************/
104/*              CALLS RELATED TO POSIX SEMAPHORE                         */
105/***********************************************************************/
106
107INT                   sem_close(sem_t  * sem);
108INT                   sem_getvalue(sem_t * sem,ULONG * sval);
109sem_t                *sem_open(const char * name, ULONG oflag, ...);
110INT                   sem_post(sem_t * sem);
111INT                   sem_trywait(sem_t * sem);
112INT                   sem_unlink(const char * name);
113INT                   sem_wait( sem_t * sem );
114INT                   sem_init(sem_t *sem , INT pshared, UINT value);
115INT                   sem_destroy(sem_t *sem);
116
117/***********************************************************************/
118/*              CALLS RELATED TO POSIX pthreads                          */
119/***********************************************************************/
120
121INT                   sched_yield(VOID);
122INT                   pthread_create (pthread_t *thread,
123					                  pthread_attr_t *attr,
124                                      VOID *(*start_routine)(VOID*),VOID *arg);
125INT                   pthread_detach(pthread_t thread);
126INT                   pthread_join(pthread_t thread, VOID **value_ptr);
127INT                   pthread_equal(pthread_t thread1, pthread_t thread2);
128VOID                  pthread_exit(VOID *value_ptr);
129pthread_t             pthread_self(VOID);
130INT                   pthread_attr_destroy(pthread_attr_t *attr);
131INT                   pthread_attr_getdetachstate( pthread_attr_t *attr,INT *detachstate);
132INT                   pthread_attr_setdetachstate(pthread_attr_t *attr,INT detachstate);
133INT                   pthread_attr_getinheritsched(pthread_attr_t *attr, INT *inheritsched);
134INT                   pthread_attr_setinheritsched(pthread_attr_t *attr, INT inheritsched);
135INT                   pthread_attr_getschedparam(pthread_attr_t *attr,struct sched_param *param);
136INT                   pthread_attr_setschedparam(pthread_attr_t *attr,struct sched_param *param);
137INT                   pthread_attr_getschedpolicy(pthread_attr_t *attr, INT *policy);
138INT                   pthread_attr_setschedpolicy(pthread_attr_t *attr, INT policy);
139INT                   pthread_attr_init(pthread_attr_t *attr);
140INT                   phread_attr_getstackaddr( pthread_attr_t *attr,VOID **stackaddr);
141INT                   phread_attr_setstackaddr(pthread_attr_t *attr,VOID **stackaddr);
142INT                   pthread_attr_getstacksize( pthread_attr_t *attr, ssize_t *stacksize);
143INT                   pthread_attr_setstacksize(pthread_attr_t *attr, ssize_t stacksize);
144INT                   phread_attr_getstack( pthread_attr_t *attr,VOID **stackaddr,
145                                           ssize_t *stacksize);
146INT                   phread_attr_setstack( pthread_attr_t *attr,VOID *stackaddr,
147                                            ssize_t stacksize);
148
149INT                   pthread_mutexattr_gettype(pthread_mutexattr_t *attr, INT *type);
150INT                   pthread_mutexattr_settype(pthread_mutexattr_t *attr, INT type);
151INT                   pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
152INT                   pthread_mutexattr_init(pthread_mutexattr_t *attr);
153INT                   pthread_mutex_destroy(pthread_mutex_t *mutex);
154INT                   pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr);
155INT                   pthread_mutex_lock(pthread_mutex_t *mutex );
156INT                   pthread_mutex_unlock(pthread_mutex_t *mutex );
157INT                   pthread_mutex_trylock(pthread_mutex_t *mutex);
158INT                   pthread_mutexattr_getprotocol( pthread_mutexattr_t *attr, INT *protocol);
159INT                   pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, INT protocol);
160INT                   pthread_mutexattr_getpshared (pthread_mutexattr_t *attr, INT *pshared);
161INT                   pthread_mutexattr_setpshared (pthread_mutexattr_t *attr, INT pshared);
162INT                   pthread_mutex_timedlock(pthread_mutex_t *mutex, struct timespec *abs_timeout);
163INT                   pthread_setcancelstate (INT state, INT *oldstate);
164INT                   pthread_setcanceltype (INT type, INT *oldtype);
165INT                   pthread_cancel(pthread_t thread);
166VOID                  pthread_yield(VOID);
167VOID                  pthread_testcancel(VOID);
168INT                   pthread_getschedparam(pthread_t thread, INT *policy, struct sched_param *param);
169INT                   pthread_setschedparam(pthread_t thread, INT policy, const struct sched_param *param);
170
171INT                   sched_get_priority_max(INT policy)
172INT                   sched_get_priority_min(INT policy)
173
174INT                   pthread_once (pthread_once_t * once_control, VOID (*init_routine) (VOID))
175
176INT                   pthread_kill(ALIGN_TYPE thread_id, int sig)
177INT                   pthread_sigmask(int how, const sigset_t *newmask, sigset_t *oldmask)
178
179
180/***********************************************************************/
181/*              CALLS RELATED TO POSIX CONDITION VARIABLE                */
182/***********************************************************************/
183
184INT                   pthread_cond_destroy(pthread_cond_t *cond);
185INT                   pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr);
186INT                   pthread_cond_broadcast(pthread_cond_t *cond);
187INT                   pthread_cond_signal(pthread_cond_t *cond);
188INT                   pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t *mutex,
189                                                 struct timespec *abstime);
190INT                   pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
191
192
193/***********************************************************************/
194/*              CALLS RELATED TO Timer                                 */
195/***********************************************************************/
196
197INT                   nanosleep(struct timespec *req, struct timespec *rem)
198INT                   sleep(ULONG seconds)
199INT                   clock_gettime(clockid_t t, struct timespec * tspec)
200INT                   clock_settime(clockid_t t, const struct timespec * tspec)
201INT                   clock_getres(clockid_t t, struct timespec * tspec)
202
203/***********************************************************************/
204/*              CALLS RELATED TO Signal                                */
205/***********************************************************************/
206
207INT                   sigwait(const sigset_t *set, int *sig)
208INT                   sigaddset(sigset_t *set, int signo)
209INT                   sigdelset(sigset_t *set, int signo)
210INT                   sigemptyset(sigset_t *set)
211INT                   signal(int signo, void (*func)(int))
212INT                   sigfillset(sigset_t *set)
213
214
2154.0  POSIX Compliancy Wrapper Error Handling
216
217There are two "error handling" functions defined in tx_posix.c and used
218throughout the Wrapper, as follows:
219
220          posix_error_handler
221          posix_internal_error
222
223In general these routines are called when basic usage errors occur.  These
224routines may also be used as a place to catch errors that are not detected if the
225application source is not checking the return status. The default processing for each of
226these is a simple spin loop.
227
228Most functions can provide an error number. The means by which each function
229provides its error numbers is specified in its description.  Some functions
230provide the error number in a variable accessed through the symbol posix_errno.
231While other functions return an error number directly as the function value. Functions
232return a value of zero to indicate success. If more than one error occurs in
233processing a function call, any one of the possible errors may be returned, as the order
234of detection is undefined.
235
236Some functions may return [ENOSYS] suggesting that an attempt was made to
237use a function that is not available in this implementation.
238
239Each pthread has its own error number, which can be obtained through a
240function call:
241
242INT   posix_get_pthread_errno(pthread_t ptid)
243
244This call will return the last generated error code for the pthread having
245ptid as an ID.
246
247
2485.1   POSIX Compliancy Wrapper Limitations
249
250Due to performance and architecture issues, this POSIX Compliancy Wrapper
251does not support all the POSIX calls. A summary of the POSIX Compliancy
252Wrapper limitations is as follows:
253
254�   Configuration
255�   Initialization
256�   Driver and I/O model might require porting of current drivers.
257�   Multi-processor extensions are not supported
258�   Unsupported calls (please see below)
259.   Calls supported with certain limitations (please see list below)
260
261The POSIX Compliancy Wrapper supports a subset of POSIX calls.  In addition,
262there are also certain limitations with respect to some services.  Below is the list of
263such limitations:
264
265
266LIMITATIONS
267
268Following calls are implemented with some limitations:
269
2701.) mq_open()
271
272         LIMITATIONS :
273                a.) The value of mode (mode_t) has no effect in this implementation.
274                b.) If pAttr is NULL, the message queue is created with
275                      implementation-defined default message queue attributes.
276                      The default message queue attributes selected are :
277
278                      #define MQ_MAXMSG 125             [MQ_MAXMSG 1024 (POSIX value)]
279                      #define MQ_MSGSIZE 500            [MQ_MSGSIZE 4096 (POSIX value)]
280                      #define MQ_FLAGS 0
281
282                      This is due to limitation of size of posix_region0_byte_pool (64KB ).
283
2842.) mq_send()
285
286         LIMITATIONS :
287                a.) In POSIX : If more than one mq_send() is blocked on a queue and
288                    space becomes available in that queue, the message with the highest
289                    priority will be unblocked. THIS FEATURE IS NOT IMPLEMENTED.
290
291                b.) If a message is sent (or received) to a queue with out opening the named
292                    queue, in such a  case mqdes (message queue descriptor) pointer is
293                    invalid and may result in erratic behavior.
294
2953.) mq_receive()
296
297         LIMITATIONS :
298                a.) If a receive (or send) message from queue with out it being opened, erratic
299                     behavior may ensue.
300
3014.) ULONG sem_close()
302
303        LIMITATIONS :
304                a.) This routine does not deallocate any system resources.
305
3065.) POSIX SEMAPHORE
307
308        LIMITATIONS :
309                a.) If any operation (eg. sem_post, sem_wait, sem_trywait, sem_getvalue ) is done on a
310                    semaphore before creating or opening (sem_open()) the named semaphore, erratic
311                    behavior may result.
312
3136.) ULONG sem_trywait(sem_t * sem)
314
315        LIMITATIONS :
316
317                a.) EDEADLKA :->[ This is a return value when deadlock condition is detected; i.e., two separate
318                                  processes are waiting for an available resource to be released via a
319                                  semaphore "held" by the other process.] This is not implemented.
320
321                b.) EINTR    :->[ This is a return value when sem_wait() was interrupted by a signal.]
322                                         This is not implemented.
3237.) Thread Cancelation
324
325pthread cancelation cleanup handlers are not supported which means
326pthread_cleanup_push( ) and pthread_cleanup_pop( ) functions are not
327implemented.
328
329When the pthread_cancel( ) function is called the target thread is canceled
330with immediate effect. (provided cancelability is enabled for the target
331pthread)
332
333The cancelation processing in the target thread shall run asynchronously
334with respect to the ailing thread returning from pthread_cancel( ).
335
3368.) Attributes for Condition Variable
337    No attributes are supported for condition variable in this implementation.
338
3399.) pthreads suspended by nanosleep() and sleep() calls can not be awakened
340by signals, once in the suspension both these calls will complete the
341suspension period.
342
34310.) pthread_once (pthread_once_t * once_control, VOID (*init_routine) (VOID))
344There is no provision if the init_routine contains a cancellation point.
345
346
3476.0  Demonstration System
348
349The file posix_demo.c contains a demonstration system that utilizes POSIX
350calls.  This Demo application will demonstrate some of the basic POSIX
351calls.  This demo application should be used as an example of how to integrate the POSIX
352Compliancy Wrapper into your application.
353
354
3557.0  Future  POSIX Compliancy Wrapper Phases
356
357Please get in touch with us for next phases of this POSIX Compliancy
358Wrapper.
359
360
361
362
363