source: rtems/cpukit/posix/src/cancel.c

Last change on this file was bcef89f2, checked in by Sebastian Huber <sebastian.huber@…>, on 05/19/23 at 06:18:25

Update company name

The embedded brains GmbH & Co. KG is the legal successor of embedded
brains GmbH.

  • Property mode set to 100644
File size: 2.5 KB
Line 
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/**
4 * @file
5 *
6 * @ingroup POSIXAPI
7 *
8 * @brief Canceling Execution of a Thread
9 */
10
11/*
12 *  COPYRIGHT (c) 1989-2008.
13 *  On-Line Applications Research Corporation (OAR).
14 *
15 *  Copyright (c) 2016 embedded brains GmbH & Co. KG
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions
19 * are met:
20 * 1. Redistributions of source code must retain the above copyright
21 *    notice, this list of conditions and the following disclaimer.
22 * 2. Redistributions in binary form must reproduce the above copyright
23 *    notice, this list of conditions and the following disclaimer in the
24 *    documentation and/or other materials provided with the distribution.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 * POSSIBILITY OF SUCH DAMAGE.
37 */
38
39#ifdef HAVE_CONFIG_H
40#include "config.h"
41#endif
42
43#include <pthread.h>
44#include <errno.h>
45
46#include <rtems/score/isr.h>
47#include <rtems/score/threadimpl.h>
48
49/*
50 *  18.2.1 Canceling Execution of a Thread, P1003.1c/Draft 10, p. 181
51 */
52
53int pthread_cancel( pthread_t thread )
54{
55  Thread_Control   *the_thread;
56  ISR_lock_Context  lock_context;
57  Thread_Control   *executing;
58  Per_CPU_Control  *cpu_self;
59
60  the_thread = _Thread_Get( thread, &lock_context );
61
62  if ( the_thread == NULL ) {
63    return ESRCH;
64  }
65
66  cpu_self = _Per_CPU_Get();
67  executing = _Per_CPU_Get_executing( cpu_self );
68
69  if (
70    the_thread == executing &&
71    !_Per_CPU_Is_ISR_in_progress( cpu_self )
72  ) {
73    _ISR_lock_ISR_enable( &lock_context );
74    _Thread_Exit( PTHREAD_CANCELED, THREAD_LIFE_TERMINATING );
75  } else {
76    _Thread_Dispatch_disable_with_CPU( cpu_self, &lock_context );
77    _ISR_lock_ISR_enable( &lock_context );
78    (void) _Thread_Cancel( the_thread, executing, 0 );
79    _Thread_Dispatch_enable( cpu_self );
80  }
81  return 0;
82}
Note: See TracBrowser for help on using the repository browser.