1
0
Fork 0
forked from nuttx/nuttx-update

Add task_testcancel()

This commit is contained in:
Gregory Nutt 2016-12-10 16:34:14 -06:00
parent 50a25c3fde
commit d648f9c8b4
14 changed files with 168 additions and 83 deletions

View file

@ -205,50 +205,51 @@ paragraphs.
<li><a href="#taskrestart">2.1.5 task_restart</a></li>
<li><a href="#tasksetcancelstate">2.1.6 task_setcancelstate</a></li>
<li><a href="#tasksetcanceltype">2.1.7 task_setcanceltype</a></li>
<li><a href="#tasktestcancel">2.1.8 task_testcancel</a></li>
</ul>
<p>
Standard interfaces
</p>
<ul>
<li><a href="#exit">2.1.8 exit</a></li>
<li><a href="#getpid">2.1.9 getpid</a></li>
<li><a href="#exit">2.1.9 exit</a></li>
<li><a href="#getpid">2.1.10 getpid</a></li>
</ul>
<p>
Standard <code>vfork</code> and <code>exec[v|l]</code> interfaces:
</p>
<ul>
<li><a href="#vfork">2.1.10 vfork</a></li>
<li><a href="#execv">2.1.11 execv</a></li>
<li><a href="#execl">2.1.12 execl</a></li>
<li><a href="#vfork">2.1.11 vfork</a></li>
<li><a href="#execv">2.1.12 execv</a></li>
<li><a href="#execl">2.1.13 execl</a></li>
</ul>
<p>
Standard <code>posix_spawn</code> interfaces:
</p>
<ul>
<li><a href="#posix_spawn">2.1.13 posix_spawn and posix_spawnp</a></li>
<li><a href="#posix_spawn_file_actions_init">2.1.14 posix_spawn_file_actions_init</a></li>
<li><a href="#posix_spawn_file_actions_destroy">2.1.15 posix_spawn_file_actions_destroy</a></li>
<li><a href="#posix_spawn_file_actions_addclose">2.1.16 posix_spawn_file_actions_addclose</a></li>
<li><a href="#posix_spawn_file_actions_adddup2">2.1.17 posix_spawn_file_actions_adddup2</a></li>
<li><a href="#posix_spawn_file_actions_addopen">2.1.18 posix_spawn_file_actions_addopen</a></li>
<li><a href="#posix_spawnattr_init">2.1.19 posix_spawnattr_init</a></li>
<li><a href="#posix_spawnattr_getflags">2.1.20 posix_spawnattr_getflags</a></li>
<li><a href="#posix_spawnattr_getschedparam">2.1.21 posix_spawnattr_getschedparam</a></li>
<li><a href="#posix_spawnattr_getschedpolicy">2.1.22 posix_spawnattr_getschedpolicy</a></li>
<li><a href="#posix_spawnattr_getsigmask">2.1.23 posix_spawnattr_getsigmask</a></li>
<li><a href="#posix_spawnattr_setflags">2.1.24 posix_spawnattr_setflags</a></li>
<li><a href="#posix_spawnattr_setschedparam">2.1.25 posix_spawnattr_setschedparam</a></li>
<li><a href="#posix_spawnattr_setschedpolicy">2.1.26 posix_spawnattr_setschedpolicy</a></li>
<li><a href="#posix_spawnattr_setsigmask">2.1.27 posix_spawnattr_setsigmask</a></li>
<li><a href="#posix_spawn">2.1.14 posix_spawn and posix_spawnp</a></li>
<li><a href="#posix_spawn_file_actions_init">2.1.15 posix_spawn_file_actions_init</a></li>
<li><a href="#posix_spawn_file_actions_destroy">2.1.16 posix_spawn_file_actions_destroy</a></li>
<li><a href="#posix_spawn_file_actions_addclose">2.1.17 posix_spawn_file_actions_addclose</a></li>
<li><a href="#posix_spawn_file_actions_adddup2">2.1.18 posix_spawn_file_actions_adddup2</a></li>
<li><a href="#posix_spawn_file_actions_addopen">2.1.19 posix_spawn_file_actions_addopen</a></li>
<li><a href="#posix_spawnattr_init">2.1.20 posix_spawnattr_init</a></li>
<li><a href="#posix_spawnattr_getflags">2.1.21 posix_spawnattr_getflags</a></li>
<li><a href="#posix_spawnattr_getschedparam">2.1.22 posix_spawnattr_getschedparam</a></li>
<li><a href="#posix_spawnattr_getschedpolicy">2.1.23 posix_spawnattr_getschedpolicy</a></li>
<li><a href="#posix_spawnattr_getsigmask">2.1.24 posix_spawnattr_getsigmask</a></li>
<li><a href="#posix_spawnattr_setflags">2.1.25 posix_spawnattr_setflags</a></li>
<li><a href="#posix_spawnattr_setschedparam">2.1.26 posix_spawnattr_setschedparam</a></li>
<li><a href="#posix_spawnattr_setschedpolicy">2.1.27 posix_spawnattr_setschedpolicy</a></li>
<li><a href="#posix_spawnattr_setsigmask">2.1.28 posix_spawnattr_setsigmask</a></li>
</ul>
<p>
Non-standard task control interfaces inspired by <code>posix_spawn</code>:
</p>
<ul>
<li><a href="#task_spawn">2.1.28 task_spawn</a></li>
<li><a href="#task_spawnattr_getstacksize">2.1.29 task_spawnattr_getstacksize</a></li>
<li><a href="#task_spawnattr_setstacksize">2.1.30 task_spawnattr_setstacksize</a></li>
<li><a href="#posix_spawn_file_actions_init">2.1.31 posix_spawn_file_actions_init</a></li>
<li><a href="#task_spawn">2.1.29 task_spawn</a></li>
<li><a href="#task_spawnattr_getstacksize">2.1.30 task_spawnattr_getstacksize</a></li>
<li><a href="#task_spawnattr_setstacksize">2.1.31 task_spawnattr_setstacksize</a></li>
<li><a href="#posix_spawn_file_actions_init">2.1.32 posix_spawn_file_actions_init</a></li>
</ul>
<H3><a name="taskcreate">2.1.1 task_create</a></H3>
@ -647,7 +648,7 @@ No thread could be found corresponding to that specified by the given thread ID.
</p>
<b>Assumptions/Limitations:</b>
<p>
<b>POSIX Compatibility:</b> This is a non-standard interface. It extends the functionality of <code>pthread_setcancelstate()</code> to tasks and supports use of <code>task_delete</code>.
<b>POSIX Compatibility:</b> This is a non-standard interface. It extends the functionality of <code>pthread_setcancelstate()</code> to tasks and supports use of <code>task_delete()</code>.
</p>
<H3><a name="tasksetcanceltype">2.1.7 task_setcanceltype</a></H3>
@ -690,10 +691,38 @@ No thread could be found corresponding to that specified by the given thread ID.
</ul>
</p>
<p>
<b>POSIX Compatibility:</b> This is a non-standard interface. It extends the functionality of <code>pthread_setcanceltype()</code> to tasks and supports use of <code>task_delete</code>.
<b>POSIX Compatibility:</b> This is a non-standard interface. It extends the functionality of <code>pthread_setcanceltype()</code> to tasks and supports use of <code>task_delete()</code>.
</p>
<H3><a name="exit">2.1.8 exit</a></H3>
<H3><a name="tasktestcancel">2.1.8 task_testcancel</a></H3>
<p>
<b>Function Prototype:</b>
</p>
<p>
<pre>
#include &lt;sched.h&gt;
void task_testcancel(void);
</pre>
</p>
<p>
<b>Description:</b>
</p>
<p>
The <code>task_testcancel()</code> function creates a cancellation point in the calling task.
The <code>task_testcancel()</code> function has no effect if cancelability is disabled.
</p>
<p>
<b>Input Parameters:</b> None
</p>
<p>
<b>Returned Value:</b> None
</p>
<p>
<b>POSIX Compatibility:</b> This is a non-standard interface. It extends the functionality of <code>pthread_testcancel()</code> to tasks and supports use of <code>task_delete()</code>.
</p>
<H3><a name="exit">2.1.9 exit</a></H3>
<p>
<b>Function Prototype:</b>
@ -739,7 +768,7 @@ And the UNIX interface:
<li>The <code>code</code> parameter is ignored.
</ul>
<H3><a name="getpid">2.1.9 getpid</a></H3>
<H3><a name="getpid">2.1.10 getpid</a></H3>
<p>
<b>Function Prototype:</b>
@ -767,7 +796,7 @@ level.
Compatible with the POSIX interface of the same name.
</p>
<H3><a name="vfork">2.1.10 vfork</a></H3>
<H3><a name="vfork">2.1.11 vfork</a></H3>
<p>
<b>Function Prototype:</b>
</p>
@ -801,7 +830,7 @@ pid_t vfork(void);
Compatible with the Unix interface of the same name.
</p>
<H3><a name="execv">2.1.11 execv</a></H3>
<H3><a name="execv">2.1.12 execv</a></H3>
<p>
<b>Function Prototype:</b>
</p>
@ -887,7 +916,7 @@ int execv(FAR const char *path, FAR char *const argv[]);
There are, however, several compatibility issues as detailed in the description above.
</p>
<H3><a name="execl">2.1.12 execl</a></H3>
<H3><a name="execl">2.1.13 execl</a></H3>
<p>
<b>Function Prototype:</b>
</p>
@ -931,7 +960,7 @@ int execl(FAR const char *path, ...);
There are, however, several compatibility issues as detailed in the description of <a href="#execv">execv()</a>.
</p>
<h3><a name="posix_spawn">2.1.13 posix_spawn and posix_spawnp</a></h3>
<h3><a name="posix_spawn">2.1.14 posix_spawn and posix_spawnp</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1074,7 +1103,7 @@ int posix_spawnp(FAR pid_t *pid, FAR const char *file,
For the caller of <code>posix_spawn()</code>, the provided argv[0] will correspond to <code>argv[1]</code> received by the new task.
</p>
<h3><a name="posix_spawn_file_actions_init">2.1.14 posix_spawn_file_actions_init</a></h3>
<h3><a name="posix_spawn_file_actions_init">2.1.15 posix_spawn_file_actions_init</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1100,7 +1129,7 @@ int posix_spawn_file_actions_init(FAR posix_spawn_file_actions_t *file_actions);
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>.
<p>
<h3><a name="posix_spawn_file_actions_destroy">2.1.15 posix_spawn_file_actions_destroy</a></h3>
<h3><a name="posix_spawn_file_actions_destroy">2.1.16 posix_spawn_file_actions_destroy</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1127,7 +1156,7 @@ int posix_spawn_file_actions_destroy(FAR posix_spawn_file_actions_t *file_action
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
<p>
<h3><a name="posix_spawn_file_actions_addclose">2.1.16 posix_spawn_file_actions_addclose</a></h3>
<h3><a name="posix_spawn_file_actions_addclose">2.1.17 posix_spawn_file_actions_addclose</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1158,7 +1187,7 @@ int posix_spawn_file_actions_addclose(FAR posix_spawn_file_actions_t *file_actio
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawn_file_actions_adddup2">2.1.17 posix_spawn_file_actions_adddup2</a></h3>
<h3><a name="posix_spawn_file_actions_adddup2">2.1.18 posix_spawn_file_actions_adddup2</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1195,7 +1224,7 @@ int posix_spawn_file_actions_adddup2(FAR posix_spawn_file_actions_t *file_action
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawn_file_actions_addopen">2.1.18 posix_spawn_file_actions_addopen</a></h3>
<h3><a name="posix_spawn_file_actions_addopen">2.1.19 posix_spawn_file_actions_addopen</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1240,7 +1269,7 @@ int posix_spawn_file_actions_addopen(FAR posix_spawn_file_actions_t *file_action
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_init">2.1.19 posix_spawnattr_init</a></h3>
<h3><a name="posix_spawnattr_init">2.1.20 posix_spawnattr_init</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1276,7 +1305,7 @@ int posix_spawnattr_init(FAR posix_spawnattr_t *attr);
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_getflags">2.1.20 posix_spawnattr_getflags</a></h3>
<h3><a name="posix_spawnattr_getflags">2.1.21 posix_spawnattr_getflags</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1306,7 +1335,7 @@ int posix_spawnattr_getflags(FAR const posix_spawnattr_t *attr, FAR short *flags
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_getschedparam">2.1.21 posix_spawnattr_getschedparam</a></h3>
<h3><a name="posix_spawnattr_getschedparam">2.1.22 posix_spawnattr_getschedparam</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1336,7 +1365,7 @@ int posix_spawnattr_getschedparam(FAR const posix_spawnattr_t *attr, FAR struct
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_getschedpolicy">2.1.22 posix_spawnattr_getschedpolicy</a></h3>
<h3><a name="posix_spawnattr_getschedpolicy">2.1.23 posix_spawnattr_getschedpolicy</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1366,7 +1395,7 @@ int posix_spawnattr_getschedpolicy(FAR const posix_spawnattr_t *attr, FAR int *p
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_getsigmask">2.1.23 posix_spawnattr_getsigmask</a></h3>
<h3><a name="posix_spawnattr_getsigmask">2.1.24 posix_spawnattr_getsigmask</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1398,7 +1427,7 @@ int posix_spawnattr_getsigmask(FAR const posix_spawnattr_t *attr, FAR sigset_t *
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_setflags">2.1.24 posix_spawnattr_setflags</a></h3>
<h3><a name="posix_spawnattr_setflags">2.1.25 posix_spawnattr_setflags</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1428,7 +1457,7 @@ int posix_spawnattr_setflags(FAR posix_spawnattr_t *attr, short flags);
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_setschedparam">2.1.25 posix_spawnattr_setschedparam</a></h3>
<h3><a name="posix_spawnattr_setschedparam">2.1.26 posix_spawnattr_setschedparam</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1458,7 +1487,7 @@ int posix_spawnattr_setschedparam(FAR posix_spawnattr_t *attr, FAR const struct
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_setschedpolicy">2.1.26 posix_spawnattr_setschedpolicy</a></h3>
<h3><a name="posix_spawnattr_setschedpolicy">2.1.27 posix_spawnattr_setschedpolicy</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1488,7 +1517,7 @@ int posix_spawnattr_setschedpolicy(FAR posix_spawnattr_t *attr, int policy);
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawnattr_setsigmask">2.1.27 posix_spawnattr_setsigmask</a></h3>
<h3><a name="posix_spawnattr_setsigmask">2.1.28 posix_spawnattr_setsigmask</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1520,7 +1549,7 @@ int posix_spawnattr_setsigmask(FAR posix_spawnattr_t *attr, FAR const sigset_t *
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="task_spawn">2.1.28 task_spawn</a></h3>
<h3><a name="task_spawn">2.1.29 task_spawn</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1634,7 +1663,7 @@ int task_spawn(FAR pid_t *pid, FAR const char *name, main_t entry,
This is a non-standard interface inspired by <code>posix_spawn()</code>.
</p>
<h3><a name="task_spawnattr_getstacksize">2.1.29 task_spawnattr_getstacksize</a></h3>
<h3><a name="task_spawnattr_getstacksize">2.1.30 task_spawnattr_getstacksize</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1664,7 +1693,7 @@ int task_spawnattr_getstacksize(FAR const posix_spawnattr_t *attr, FAR size_t *s
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="task_spawnattr_setstacksize">2.1.30 task_spawnattr_setstacksize</a></h3>
<h3><a name="task_spawnattr_setstacksize">2.1.31 task_spawnattr_setstacksize</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -1694,7 +1723,7 @@ int task_spawnattr_setstacksize(FAR posix_spawnattr_t *attr, size_t stacksize);
On success, this function returns 0; on failure it will return an error number from <code>&lt;errno.h&gt;</code>
</p>
<h3><a name="posix_spawn_file_actions_init">2.1.31 posix_spawn_file_actions_init</a></h3>
<h3><a name="posix_spawn_file_actions_init">2.1.32 posix_spawn_file_actions_init</a></h3>
<p>
<b>Function Prototype:</b>
</p>
@ -10370,6 +10399,7 @@ notify a task when a message is available on a queue.
<li><a href="#task_spawnattr_getstacksize">task_spawnattr_getstacksize</a></li>
<li><a href="#task_spawnattr_setstacksize">task_spawnattr_setstacksize</a></li>
<li><a href="#Task_Switch">Task Switching Interfaces</a>
<li><a href="#tasktestcancel">task_testcancel</a></li>
<li><a href="#dirdirentops">telldir</a></li>
<li><a href="#timercreate">timer_create</a></li>
<li><a href="#timerdelete">timer_delete</a></li>

11
TODO
View file

@ -191,8 +191,15 @@ o Task/Scheduler (sched/)
does not do asynchronous deletion but should rather do the
same kind of synchronization such as the pthread cancellation
points. In this configuration, none of the issues above
apply. It is only the asyncrhonous task deletion that cannot
be supported.
apply. It is only the asynchronous task deletion that cannot
be supported. These helper functions are also available to
help manage task deletion:
int task_setcancelstate(int state, FAR int *oldstate);
int task_setcanceltype(int type, FAR int *oldtype);
void task_testcancel(void);
Which are analogous to the similarly named pthread_ interfaces.
Status: Open
Priority: Low and not easily removable.

View file

@ -243,6 +243,7 @@ int task_restart(pid_t pid);
int task_setcancelstate(int state, FAR int *oldstate);
int task_setcanceltype(int type, FAR int *oldtype);
void task_testcancel(void);
/* Task Scheduling Interfaces (based on POSIX APIs) */

View file

@ -132,8 +132,9 @@
# define SYS_up_assert (__SYS_task_delete+3)
# ifdef CONFIG_CANCELLATION_POINTS
# define SYS_pthread_setcanceltype (__SYS_task_delete+4)
# define __SYS_vfork (__SYS_task_delete+5)
# define SYS_task_setcanceltype (__SYS_task_delete+4)
# define SYS_task_testcancel (__SYS_task_delete+5)
# define __SYS_vfork (__SYS_task_delete+6)
# else
# define __SYS_vfork (__SYS_task_delete+4)
# endif
@ -411,13 +412,7 @@
# define SYS_pthread_setschedprio (__SYS_pthread+24)
# define SYS_pthread_setspecific (__SYS_pthread+25)
# define SYS_pthread_yield (__SYS_pthread+26)
# ifdef CONFIG_CANCELLATION_POINTS
# define SYS_pthread_testcancel (__SYS_pthread+27)
# define __SYS_pthread_smp (__SYS_pthread+28)
# else
# define __SYS_pthread_smp (__SYS_pthread+27)
# endif
# define __SYS_pthread_smp (__SYS_pthread+27)
# ifdef CONFIG_SMP
# define SYS_pthread_setaffinity_np (__SYS_pthread_smp+0)

View file

@ -48,10 +48,7 @@ CSRCS += pthread_mutexattr_getpshared.c pthread_mutexattr_setpshared.c
CSRCS += pthread_mutexattr_setprotocol.c pthread_mutexattr_getprotocol.c
CSRCS += pthread_mutexattr_settype.c pthread_mutexattr_gettype.c
CSRCS += pthread_setcancelstate.c pthread_setcanceltype.c
ifneq ($(CONFIG_CANCELLATION_POINTS),y)
CSRCS += pthread_testcancel.c
endif
ifeq ($(CONFIG_SMP),y)
CSRCS += pthread_attr_getaffinity.c pthread_attr_setaffinity.c

View file

@ -38,6 +38,7 @@
****************************************************************************/
#include <pthread.h>
#include <sched.h>
/****************************************************************************
* Public Functions
@ -55,4 +56,7 @@
void pthread_testcancel(void)
{
/* task_testcancel() does the real work */
task_testcancel();
}

View file

@ -38,7 +38,7 @@
CSRCS += sched_getprioritymax.c sched_getprioritymin.c
ifneq ($(CONFIG_CANCELLATION_POINTS),y)
CSRCS += task_setcanceltype.c
CSRCS += task_setcanceltype.c task_testcancel.c
endif
ifeq ($(CONFIG_SMP),y)

View file

@ -0,0 +1,58 @@
/****************************************************************************
* libc/sched/task_testcancel.c
*
* Copyright (C) 2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <sched.h>
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: task_testcancel
*
* Description:
* The task_testcancel() function creates a cancellation point in the
* calling thread. The task_testcancel() function has no effect if
* cancelability is disabled
*
****************************************************************************/
void task_testcancel(void)
{
}

View file

@ -52,10 +52,6 @@ ifneq ($(CONFIG_DISABLE_SIGNALS),y)
CSRCS += pthread_condtimedwait.c pthread_kill.c pthread_sigmask.c
endif
ifeq ($(CONFIG_CANCELLATION_POINTS),y)
CSRCS += pthread_testcancel.c
endif
ifeq ($(CONFIG_SMP),y)
CSRCS += pthread_setaffinity.c pthread_getaffinity.c
endif

View file

@ -50,7 +50,7 @@ CSRCS += task_spawn.c
endif
ifeq ($(CONFIG_CANCELLATION_POINTS),y)
CSRCS += task_setcanceltype.c
CSRCS += task_setcanceltype.c task_testcancel.c
endif
ifneq ($(CONFIG_BINFMT_DISABLE),y)

View file

@ -1,5 +1,5 @@
/****************************************************************************
* sched/pthread/pthread_testcancel.c
* sched/task/task_testcancel.c
*
* Copyright (C) 2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
@ -39,28 +39,28 @@
#include <nuttx/config.h>
#include <pthread.h>
#include <sched.h>
#include <errno.h>
#include <nuttx/cancelpt.h>
#include "sched/sched.h"
#include "task/task.h"
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: pthread_testcancel
* Name: task_testcancel
*
* Description:
* The pthread_testcancel() function creates a cancellation point in the
* calling thread. The pthread_testcancel() function has no effect if
* The task_testcancel() function creates a cancellation point in the
* calling thread. The task_testcancel() function has no effect if
* cancelability is disabled
*
****************************************************************************/
void pthread_testcancel(void)
void task_testcancel(void)
{
(void)enter_cancellation_point();
leave_cancellation_point();

View file

@ -93,7 +93,6 @@
"pthread_setschedprio","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","int","pthread_t","int"
"pthread_setspecific","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","int","pthread_key_t","FAR const void*"
"pthread_sigmask","pthread.h","!defined(CONFIG_DISABLE_SIGNALS) && !defined(CONFIG_DISABLE_PTHREAD)","int","int","FAR const sigset_t*","FAR sigset_t*"
"pthread_testcancel","pthread.h","!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_CANCELLATION_POINTS)","void"
"pthread_yield","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","void"
"putenv","stdlib.h","!defined(CONFIG_DISABLE_ENVIRON)","int","FAR const char*"
"read","unistd.h","CONFIG_NSOCKET_DESCRIPTORS > 0 || CONFIG_NFILE_DESCRIPTORS > 0","ssize_t","int","FAR void*","size_t"
@ -152,6 +151,7 @@
"task_restart","sched.h","","int","pid_t"
"task_setcancelstate","sched.h","","int","int","FAR int*"
"task_setcanceltype","sched.h","defined(CONFIG_CANCELLATION_POINTS)","int","int","FAR int*"
"task_testcancel","pthread.h","defined(CONFIG_CANCELLATION_POINTS)","void"
"telldir","dirent.h","CONFIG_NFILE_DESCRIPTORS > 0","off_t","FAR DIR*"
"timer_create","time.h","!defined(CONFIG_DISABLE_POSIX_TIMERS)","int","clockid_t","FAR struct sigevent*","FAR timer_t*"
"timer_delete","time.h","!defined(CONFIG_DISABLE_POSIX_TIMERS)","int","timer_t"

Can't render this file because it has a wrong number of fields in line 2.

View file

@ -91,6 +91,7 @@ SYSCALL_LOOKUP(up_assert, 2, STUB_up_assert)
# ifdef CONFIG_CANCELLATION_POINTS
SYSCALL_LOOKUP(task_setcanceltype, 2, STUB_task_setcanceltype)
SYSCALL_LOOKUP(task_testcancel, 0, STUB_task_testcancel)
# endif
/* The following can be individually enabled */
@ -299,9 +300,6 @@ SYSCALL_LOOKUP(up_assert, 2, STUB_up_assert)
SYSCALL_LOOKUP(pthread_setschedprio, 2, STUB_pthread_setschedprio)
SYSCALL_LOOKUP(pthread_setspecific, 2, STUB_pthread_setspecific)
SYSCALL_LOOKUP(pthread_yield, 0, STUB_pthread_yield)
# ifdef CONFIG_CANCELLATION_POINTS
SYSCALL_LOOKUP(pthread_testcancel, 0, STUB_pthread_testcancel)
# endif
# ifdef CONFIG_SMP
SYSCALL_LOOKUP(pthread_setaffinity, 3, STUB_pthread_setaffinity)
SYSCALL_LOOKUP(pthread_getaffinity, 3, STUB_pthread_getaffinity)

View file

@ -102,6 +102,7 @@ uintptr_t STUB_up_assert(int nbr, uintptr_t parm1, uintptr_t parm2);
uintptr_t STUB_task_setcanceltype(int nbr, uintptr_t parm1,
uintptr_t parm2);
uintptr_t STUB_task_testcancel(int nbr);
/* The following can be individually enabled */
@ -303,8 +304,6 @@ uintptr_t STUB_pthread_setspecific(int nbr, uintptr_t parm1,
uintptr_t parm2);
uintptr_t STUB_pthread_yield(int nbr);
uintptr_t STUB_pthread_testcancel(int nbr);
uintptr_t STUB_pthread_setaffinity(int nbr, uintptr_t parm1,
uintptr_t parm2, uintptr_t parm3);
uintptr_t STUB_pthread_getaffinity(int nbr, uintptr_t parm1,