From f132960789ea8a1cf58ce05d5e009cf3e43046fb Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sat, 10 Dec 2016 16:06:14 -0600 Subject: [PATCH] Add task_setcanceltype() --- Documentation/NuttxUserGuide.html | 143 ++++++++++++------ include/sched.h | 25 ++- include/sys/syscall.h | 13 +- libc/pthread/Make.defs | 3 +- libc/pthread/pthread_setcanceltype.c | 29 +++- libc/sched/Make.defs | 4 + sched/pthread/Make.defs | 2 +- sched/task/Make.defs | 4 + sched/task/task_setcancelstate.c | 39 ++--- .../task_setcanceltype.c} | 39 +++-- syscall/syscall.csv | 2 +- syscall/syscall_lookup.h | 5 +- syscall/syscall_stublookup.c | 5 +- 13 files changed, 211 insertions(+), 102 deletions(-) rename sched/{pthread/pthread_setcanceltype.c => task/task_setcanceltype.c} (80%) diff --git a/Documentation/NuttxUserGuide.html b/Documentation/NuttxUserGuide.html index 9efb520f46..a3a911b919 100644 --- a/Documentation/NuttxUserGuide.html +++ b/Documentation/NuttxUserGuide.html @@ -204,50 +204,51 @@ paragraphs.
  • 2.1.4 task_delete
  • 2.1.5 task_restart
  • 2.1.6 task_setcancelstate
  • +
  • 2.1.7 task_setcanceltype
  • Standard interfaces

    Standard vfork and exec[v|l] interfaces:

    Standard posix_spawn interfaces:

    Non-standard task control interfaces inspired by posix_spawn:

    2.1.1 task_create

    @@ -609,8 +610,6 @@ VxWorks provides the following similar interface:

    Description: -

    -

    The task_setcancelstate() function atomically sets both the calling task's cancelability state to the indicated state and returns the previous cancelability state at the location @@ -651,7 +650,50 @@ No thread could be found corresponding to that specified by the given thread ID. POSIX Compatibility: This is a non-standard interface. It extends the functionality of pthread_setcancelstate() to tasks and supports use of task_delete.

    -

    2.1.7 exit

    +

    2.1.7 task_setcanceltype

    +

    +Function Prototype: +

    +

    +    #include <sched.h>
    +    int task_setcanceltype(int type, FAR int *oldtype);
    +
    +

    +Description: +The task_setcanceltype() function atomically both sets the calling task's cancelability type to the indicated type and returns the previous cancelability type at the location referenced by oldtype. +Legal values for type are TASK_CANCEL_DEFERRED and TASK_CANCEL_ASYNCHRONOUS. +

    +

    +The cancelability state and type of any newly created tasks are TASK_CANCEL_ENABLE and TASK_CANCEL_DEFERRED respectively. +

    +

    +Input Parameters: +

    +

    +

    +

    +

    +Returned Value: +

    +

    +Zero (OK) on success; ERROR is returned on any failure with the errno value set appropriately: +

    +

    +

    +

    +

    +POSIX Compatibility: This is a non-standard interface. It extends the functionality of pthread_setcanceltype() to tasks and supports use of task_delete. +

    + +

    2.1.8 exit

    Function Prototype: @@ -697,7 +739,7 @@ And the UNIX interface:

  • The code parameter is ignored. -

    2.1.8 getpid

    +

    2.1.9 getpid

    Function Prototype: @@ -725,7 +767,7 @@ level. Compatible with the POSIX interface of the same name.

    -

    2.1.9 vfork

    +

    2.1.10 vfork

    Function Prototype:

    @@ -759,7 +801,7 @@ pid_t vfork(void); Compatible with the Unix interface of the same name.

    -

    2.1.10 execv

    +

    2.1.11 execv

    Function Prototype:

    @@ -845,7 +887,7 @@ int execv(FAR const char *path, FAR char *const argv[]); There are, however, several compatibility issues as detailed in the description above.

    -

    2.1.11 execl

    +

    2.1.12 execl

    Function Prototype:

    @@ -889,7 +931,7 @@ int execl(FAR const char *path, ...); There are, however, several compatibility issues as detailed in the description of execv().

    -

    2.1.12 posix_spawn and posix_spawnp

    +

    2.1.13 posix_spawn and posix_spawnp

    Function Prototype:

    @@ -1032,7 +1074,7 @@ int posix_spawnp(FAR pid_t *pid, FAR const char *file, For the caller of posix_spawn(), the provided argv[0] will correspond to argv[1] received by the new task.

    -

    2.1.13 posix_spawn_file_actions_init

    +

    2.1.14 posix_spawn_file_actions_init

    Function Prototype:

    @@ -1058,7 +1100,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 <errno.h>.

    -

    2.1.14 posix_spawn_file_actions_destroy

    +

    2.1.15 posix_spawn_file_actions_destroy

    Function Prototype:

    @@ -1085,7 +1127,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 <errno.h>

    -

    2.1.15 posix_spawn_file_actions_addclose

    +

    2.1.16 posix_spawn_file_actions_addclose

    Function Prototype:

    @@ -1116,7 +1158,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 <errno.h>

    -

    2.1.16 posix_spawn_file_actions_adddup2

    +

    2.1.17 posix_spawn_file_actions_adddup2

    Function Prototype:

    @@ -1153,7 +1195,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 <errno.h>

    -

    2.1.17 posix_spawn_file_actions_addopen

    +

    2.1.18 posix_spawn_file_actions_addopen

    Function Prototype:

    @@ -1198,7 +1240,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 <errno.h>

    -

    2.1.18 posix_spawnattr_init

    +

    2.1.19 posix_spawnattr_init

    Function Prototype:

    @@ -1234,7 +1276,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 <errno.h>

    -

    2.1.19 posix_spawnattr_getflags

    +

    2.1.20 posix_spawnattr_getflags

    Function Prototype:

    @@ -1264,7 +1306,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 <errno.h>

    -

    2.1.20 posix_spawnattr_getschedparam

    +

    2.1.21 posix_spawnattr_getschedparam

    Function Prototype:

    @@ -1294,7 +1336,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 <errno.h>

    -

    2.1.21 posix_spawnattr_getschedpolicy

    +

    2.1.22 posix_spawnattr_getschedpolicy

    Function Prototype:

    @@ -1324,7 +1366,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 <errno.h>

    -

    2.1.22 posix_spawnattr_getsigmask

    +

    2.1.23 posix_spawnattr_getsigmask

    Function Prototype:

    @@ -1356,7 +1398,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 <errno.h>

    -

    2.1.23 posix_spawnattr_setflags

    +

    2.1.24 posix_spawnattr_setflags

    Function Prototype:

    @@ -1386,7 +1428,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 <errno.h>

    -

    2.1.24 posix_spawnattr_setschedparam

    +

    2.1.25 posix_spawnattr_setschedparam

    Function Prototype:

    @@ -1416,7 +1458,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 <errno.h>

    -

    2.1.25 posix_spawnattr_setschedpolicy

    +

    2.1.26 posix_spawnattr_setschedpolicy

    Function Prototype:

    @@ -1446,7 +1488,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 <errno.h>

    -

    2.1.26 posix_spawnattr_setsigmask

    +

    2.1.27 posix_spawnattr_setsigmask

    Function Prototype:

    @@ -1478,7 +1520,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 <errno.h>

    -

    2.1.27 task_spawn

    +

    2.1.28 task_spawn

    Function Prototype:

    @@ -1592,7 +1634,7 @@ int task_spawn(FAR pid_t *pid, FAR const char *name, main_t entry, This is a non-standard interface inspired by posix_spawn().

    -

    2.1.28 task_spawnattr_getstacksize

    +

    2.1.29 task_spawnattr_getstacksize

    Function Prototype:

    @@ -1622,7 +1664,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 <errno.h>

    -

    2.1.29 task_spawnattr_setstacksize

    +

    2.1.30 task_spawnattr_setstacksize

    Function Prototype:

    @@ -1652,7 +1694,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 <errno.h>

    -

    2.1.30 posix_spawn_file_actions_init

    +

    2.1.31 posix_spawn_file_actions_init

    Function Prototype:

    @@ -10323,6 +10365,7 @@ notify a task when a message is available on a queue.
  • task_restart
  • Task Scheduling Interfaces
  • task_setcancelstate
  • +
  • task_spawn
  • task_spawnattr_getstacksize
  • task_spawnattr_setstacksize
  • diff --git a/include/sched.h b/include/sched.h index 44877c2341..f0e1195911 100644 --- a/include/sched.h +++ b/include/sched.h @@ -54,18 +54,30 @@ /* POSIX-like scheduling policies */ -#define SCHED_FIFO 1 /* FIFO priority scheduling policy */ -#define SCHED_RR 2 /* Round robin scheduling policy */ -#define SCHED_SPORADIC 3 /* Sporadic scheduling policy */ -#define SCHED_OTHER 4 /* Not supported */ +#define SCHED_FIFO 1 /* FIFO priority scheduling policy */ +#define SCHED_RR 2 /* Round robin scheduling policy */ +#define SCHED_SPORADIC 3 /* Sporadic scheduling policy */ +#define SCHED_OTHER 4 /* Not supported */ /* Maximum number of SCHED_SPORADIC replenishments */ -#define SS_REPL_MAX CONFIG_SCHED_SPORADIC_MAXREPL +#define SS_REPL_MAX CONFIG_SCHED_SPORADIC_MAXREPL + +/* Cancellation definitions *****************************************************/ + +/* Cancellation states used by task_setcancelstate() */ + +#define TASK_CANCEL_ENABLE (0) +#define TASK_CANCEL_DISABLE (1) + +/* Cancellation types used by task_setcanceltype() */ + +#define TASK_CANCEL_DEFERRED (0) +#define TASK_CANCEL_ASYNCHRONOUS (1) /* Pthread definitions **********************************************************/ -#define PTHREAD_KEYS_MAX CONFIG_NPTHREAD_KEYS +#define PTHREAD_KEYS_MAX CONFIG_NPTHREAD_KEYS /* CPU affinity mask helpers ***************************************************/ /* These are not standard but are defined for Linux compatibility */ @@ -230,6 +242,7 @@ int task_delete(pid_t pid); int task_restart(pid_t pid); int task_setcancelstate(int state, FAR int *oldstate); +int task_setcanceltype(int type, FAR int *oldtype); /* Task Scheduling Interfaces (based on POSIX APIs) */ diff --git a/include/sys/syscall.h b/include/sys/syscall.h index 06aa183658..f0533b6289 100644 --- a/include/sys/syscall.h +++ b/include/sys/syscall.h @@ -130,7 +130,13 @@ # define SYS_task_restart (__SYS_task_delete+1) # define SYS_task_setcancelstate (__SYS_task_delete+2) # define SYS_up_assert (__SYS_task_delete+3) -# define __SYS_vfork (__SYS_task_delete+4) + +# ifdef CONFIG_CANCELLATION_POINTS +# define SYS_pthread_setcanceltype (__SYS_task_delete+4) +# define __SYS_vfork (__SYS_task_delete+5) +# else +# define __SYS_vfork (__SYS_task_delete+4) +# endif /* The following can be individually enabled */ @@ -407,9 +413,8 @@ # define SYS_pthread_yield (__SYS_pthread+26) # ifdef CONFIG_CANCELLATION_POINTS -# define SYS_pthread_setcanceltype (__SYS_pthread+27) -# define SYS_pthread_testcancel (__SYS_pthread+28) -# define __SYS_pthread_smp (__SYS_pthread+29) +# define SYS_pthread_testcancel (__SYS_pthread+27) +# define __SYS_pthread_smp (__SYS_pthread+28) # else # define __SYS_pthread_smp (__SYS_pthread+27) # endif diff --git a/libc/pthread/Make.defs b/libc/pthread/Make.defs index 60ae02b59a..c530947fbc 100644 --- a/libc/pthread/Make.defs +++ b/libc/pthread/Make.defs @@ -47,9 +47,10 @@ CSRCS += pthread_mutexattr_init.c pthread_mutexattr_destroy.c 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_setcanceltype.c pthread_testcancel.c +CSRCS += pthread_testcancel.c endif ifeq ($(CONFIG_SMP),y) diff --git a/libc/pthread/pthread_setcanceltype.c b/libc/pthread/pthread_setcanceltype.c index 0565367b1b..583376dfcc 100644 --- a/libc/pthread/pthread_setcanceltype.c +++ b/libc/pthread/pthread_setcanceltype.c @@ -38,8 +38,24 @@ ****************************************************************************/ #include +#include #include +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ +/* The following are defined in different header files but must have the + * same values. + */ + +#if PTHREAD_CANCEL_DEFERRED != TASK_CANCEL_DEFERRED +# error We must have PTHREAD_CANCEL_DEFERRED == TASK_CANCEL_DEFERRED +#endif + +#if PTHREAD_CANCEL_ASYNCHRONOUS != TASK_CANCEL_ASYNCHRONOUS +# error We must have PTHREAD_CANCEL_ASYNCHRONOUS == TASK_CANCEL_ASYNCHRONOUS +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -62,14 +78,15 @@ int pthread_setcanceltype(int type, FAR int *oldtype) { - /* Return the current type if so requrested */ + int ret; - if (oldtype != NULL) + /* task_setcanceltype() can do this */ + + ret = task_setcanceltype(type, oldtype); + if (ret < 0) { - *oldtype = PTHREAD_CANCEL_ASYNCHRONOUS; + ret = errno; } - /* Check the requested cancellation type */ - - return (type == PTHREAD_CANCEL_ASYNCHRONOUS) ? OK : ENOSYS; + return ret; } diff --git a/libc/sched/Make.defs b/libc/sched/Make.defs index eeb4be1c1b..b7402aea05 100644 --- a/libc/sched/Make.defs +++ b/libc/sched/Make.defs @@ -37,6 +37,10 @@ CSRCS += sched_getprioritymax.c sched_getprioritymin.c +ifneq ($(CONFIG_CANCELLATION_POINTS),y) +CSRCS += task_setcanceltype.c +endif + ifeq ($(CONFIG_SMP),y) CSRCS += sched_cpucount.c endif diff --git a/sched/pthread/Make.defs b/sched/pthread/Make.defs index 362a6d63bf..1970de7804 100644 --- a/sched/pthread/Make.defs +++ b/sched/pthread/Make.defs @@ -53,7 +53,7 @@ CSRCS += pthread_condtimedwait.c pthread_kill.c pthread_sigmask.c endif ifeq ($(CONFIG_CANCELLATION_POINTS),y) -CSRCS += pthread_setcanceltype.c pthread_testcancel.c +CSRCS += pthread_testcancel.c endif ifeq ($(CONFIG_SMP),y) diff --git a/sched/task/Make.defs b/sched/task/Make.defs index 9819db2879..b2543fccdd 100644 --- a/sched/task/Make.defs +++ b/sched/task/Make.defs @@ -49,6 +49,10 @@ ifneq ($(CONFIG_BUILD_KERNEL),y) CSRCS += task_spawn.c endif +ifeq ($(CONFIG_CANCELLATION_POINTS),y) +CSRCS += task_setcanceltype.c +endif + ifneq ($(CONFIG_BINFMT_DISABLE),y) ifeq ($(CONFIG_LIBC_EXECFUNCS),y) CSRCS += task_execv.c task_posixspawn.c diff --git a/sched/task/task_setcancelstate.c b/sched/task/task_setcancelstate.c index c8fc0460c4..d7003f3af7 100644 --- a/sched/task/task_setcancelstate.c +++ b/sched/task/task_setcancelstate.c @@ -39,6 +39,9 @@ #include +#include +#include +#include #include #include "sched/sched.h" @@ -88,17 +91,17 @@ int task_setcancelstate(int state, FAR int *oldstate) { if ((tcb->flags & TCB_FLAG_NONCANCELABLE) != 0) { - *oldstate = PTHREAD_CANCEL_DISABLE; + *oldstate = TASK_CANCEL_DISABLE; } else { - *oldstate = PTHREAD_CANCEL_ENABLE; + *oldstate = TASK_CANCEL_ENABLE; } } /* Set the new cancellation state */ - if (state == PTHREAD_CANCEL_ENABLE) + if (state == TASK_CANCEL_ENABLE) { /* Clear the non-cancelable flag */ @@ -124,27 +127,27 @@ int task_setcancelstate(int state, FAR int *oldstate) } else #endif - { - /* No.. We are using asynchronous cancellation. If the - * cancellation was pending in this case, then just exit. - */ + { + /* No.. We are using asynchronous cancellation. If the + * cancellation was pending in this case, then just exit. + */ - tcb->flags &= ~TCB_FLAG_CANCEL_PENDING; + tcb->flags &= ~TCB_FLAG_CANCEL_PENDING; #ifndef CONFIG_DISABLE_PTHREAD - if ((tcb->flags & TCB_FLAG_TTYPE_MASK) == TCB_FLAG_TTYPE_PTHREAD) - { - pthread_exit(PTHREAD_CANCELED); - } - else + if ((tcb->flags & TCB_FLAG_TTYPE_MASK) == TCB_FLAG_TTYPE_PTHREAD) + { + pthread_exit(PTHREAD_CANCELED); + } + else #endif - { - exit(EXIT_FAILURE); - } - } + { + exit(EXIT_FAILURE); + } + } } } - else if (state == PTHREAD_CANCEL_DISABLE) + else if (state == TASK_CANCEL_DISABLE) { /* Set the non-cancelable state */ diff --git a/sched/pthread/pthread_setcanceltype.c b/sched/task/task_setcanceltype.c similarity index 80% rename from sched/pthread/pthread_setcanceltype.c rename to sched/task/task_setcanceltype.c index ba3704cd2a..b7536f4625 100644 --- a/sched/pthread/pthread_setcanceltype.c +++ b/sched/task/task_setcanceltype.c @@ -1,5 +1,5 @@ /**************************************************************************** - * sched/pthread/pthread_setcanceltype.c + * sched/task/task_setcanceltype.c * * Copyright (C) 2016 Gregory Nutt. All rights reserved. * Author: Gregory Nutt @@ -39,32 +39,35 @@ #include +#include #include +#include #include #include "sched/sched.h" +#include "task/task.h" /**************************************************************************** * Public Functions ****************************************************************************/ /**************************************************************************** - * Name: pthread_setcancelstate + * Name: task_setcancelstate * * Description: - * The pthread_setcanceltype() function atomically both sets the calling + * The task_setcanceltype() function atomically both sets the calling * thread's cancelability type to the indicated type and returns the * previous cancelability type at the location referenced by oldtype - * Legal values for type are PTHREAD_CANCEL_DEFERRED and - * PTHREAD_CANCEL_ASYNCHRONOUS. + * Legal values for type are TASK_CANCEL_DEFERRED and + * TASK_CANCEL_ASYNCHRONOUS. * * The cancelability state and type of any newly created threads, * including the thread in which main() was first invoked, are - * PTHREAD_CANCEL_ENABLE and PTHREAD_CANCEL_DEFERRED respectively. + * TASK_CANCEL_ENABLE and TASK_CANCEL_DEFERRED respectively. * ****************************************************************************/ -int pthread_setcanceltype(int type, FAR int *oldtype) +int task_setcanceltype(int type, FAR int *oldtype) { FAR struct tcb_s *tcb = this_task(); int ret = OK; @@ -81,17 +84,17 @@ int pthread_setcanceltype(int type, FAR int *oldtype) { if ((tcb->flags & TCB_FLAG_CANCEL_DEFERRED) != 0) { - *oldtype = PTHREAD_CANCEL_DEFERRED; + *oldtype = TASK_CANCEL_DEFERRED; } else { - *oldtype = PTHREAD_CANCEL_ASYNCHRONOUS; + *oldtype = TASK_CANCEL_ASYNCHRONOUS; } } /* Set the new cancellation type */ - if (type == PTHREAD_CANCEL_ASYNCHRONOUS) + if (type == TASK_CANCEL_ASYNCHRONOUS) { /* Clear the deferred cancellation bit */ @@ -106,12 +109,24 @@ int pthread_setcanceltype(int type, FAR int *oldtype) (tcb->flags & TCB_FLAG_NONCANCELABLE) == 0) { tcb->flags &= ~TCB_FLAG_CANCEL_PENDING; - pthread_exit(PTHREAD_CANCELED); + + /* Exit according to the type of the thread */ + +#ifndef CONFIG_DISABLE_PTHREAD + if ((tcb->flags & TCB_FLAG_TTYPE_MASK) == TCB_FLAG_TTYPE_PTHREAD) + { + pthread_exit(PTHREAD_CANCELED); + } + else +#endif + { + exit(EXIT_FAILURE); + } } #endif } #ifdef CONFIG_CANCELLATION_POINTS - else if (type == PTHREAD_CANCEL_DEFERRED) + else if (type == TASK_CANCEL_DEFERRED) { /* Set the deferred cancellation type */ diff --git a/syscall/syscall.csv b/syscall/syscall.csv index 0687ee4d4d..42706b701f 100644 --- a/syscall/syscall.csv +++ b/syscall/syscall.csv @@ -89,7 +89,6 @@ "pthread_mutex_unlock","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","int","FAR pthread_mutex_t*" "pthread_once","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","int","FAR pthread_once_t*","CODE void (*)(void)" "pthread_setaffinity_np","pthread.h","!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_SMP)","int","pthread_t","size_t","FAR const cpu_set_t*" -"pthread_setcanceltype","pthread.h","!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_CANCELLATION_POINTS)","int","int","FAR int*" "pthread_setschedparam","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","int","pthread_t","int","FAR const struct sched_param*" "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*" @@ -152,6 +151,7 @@ "task_delete","sched.h","","int","pid_t" "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*" "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" diff --git a/syscall/syscall_lookup.h b/syscall/syscall_lookup.h index f7e2165351..abd056fe37 100644 --- a/syscall/syscall_lookup.h +++ b/syscall/syscall_lookup.h @@ -89,6 +89,10 @@ SYSCALL_LOOKUP(task_restart, 1, STUB_task_restart) SYSCALL_LOOKUP(task_setcancelstate, 2, STUB_task_setcancelstate) SYSCALL_LOOKUP(up_assert, 2, STUB_up_assert) +# ifdef CONFIG_CANCELLATION_POINTS + SYSCALL_LOOKUP(task_setcanceltype, 2, STUB_task_setcanceltype) +# endif + /* The following can be individually enabled */ #ifdef CONFIG_ARCH_HAVE_VFORK @@ -296,7 +300,6 @@ SYSCALL_LOOKUP(up_assert, 2, STUB_up_assert) SYSCALL_LOOKUP(pthread_setspecific, 2, STUB_pthread_setspecific) SYSCALL_LOOKUP(pthread_yield, 0, STUB_pthread_yield) # ifdef CONFIG_CANCELLATION_POINTS - SYSCALL_LOOKUP(pthread_setcanceltype, 2, STUB_pthread_setcanceltype) SYSCALL_LOOKUP(pthread_testcancel, 0, STUB_pthread_testcancel) # endif # ifdef CONFIG_SMP diff --git a/syscall/syscall_stublookup.c b/syscall/syscall_stublookup.c index 34e60fd1fa..61ccb8ecd6 100644 --- a/syscall/syscall_stublookup.c +++ b/syscall/syscall_stublookup.c @@ -100,6 +100,9 @@ uintptr_t STUB_task_setcancelstate(int nbr, uintptr_t parm1, uintptr_t parm2); 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); + /* The following can be individually enabled */ uintptr_t STUB_vfork(int nbr); @@ -300,8 +303,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_setcanceltype(int nbr, uintptr_t parm1, - uintptr_t parm2); uintptr_t STUB_pthread_testcancel(int nbr); uintptr_t STUB_pthread_setaffinity(int nbr, uintptr_t parm1,