]>
Commit | Line | Data |
---|---|---|
84481f76 RK |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3 | -- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS -- | |
4 | -- -- | |
5 | -- S Y S T E M . T A S K _ P R I M I T I V E S -- | |
6 | -- -- | |
7 | -- S p e c -- | |
8 | -- -- | |
84481f76 RK |
9 | -- Copyright (C) 1991-2000 Free Software Foundation, Inc. -- |
10 | -- -- | |
11 | -- GNARL is free software; you can redistribute it and/or modify it under -- | |
12 | -- terms of the GNU General Public License as published by the Free Soft- -- | |
13 | -- ware Foundation; either version 2, or (at your option) any later ver- -- | |
14 | -- sion. GNARL is distributed in the hope that it will be useful, but WITH- -- | |
15 | -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- | |
16 | -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- | |
17 | -- for more details. You should have received a copy of the GNU General -- | |
18 | -- Public License distributed with GNARL; see file COPYING. If not, write -- | |
19 | -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- | |
20 | -- MA 02111-1307, USA. -- | |
21 | -- -- | |
22 | -- As a special exception, if other files instantiate generics from this -- | |
23 | -- unit, or you link this unit with other files to produce an executable, -- | |
24 | -- this unit does not by itself cause the resulting executable to be -- | |
25 | -- covered by the GNU General Public License. This exception does not -- | |
26 | -- however invalidate any other reasons why the executable file might be -- | |
27 | -- covered by the GNU Public License. -- | |
28 | -- -- | |
71ff80dc | 29 | -- GNARL was developed by the GNARL team at Florida State University. -- |
fbf5a39b | 30 | -- Extensive contributions were provided by Ada Core Technologies, Inc. -- |
84481f76 RK |
31 | -- -- |
32 | ------------------------------------------------------------------------------ | |
33 | ||
34 | -- This is a OpenVMS/Alpha version of this package. | |
35 | ||
36 | -- This package provides low-level support for most tasking features. | |
37 | ||
38 | pragma Polling (Off); | |
39 | -- Turn off polling, we do not want ATC polling to take place during | |
40 | -- tasking operations. It causes infinite loops and other problems. | |
41 | ||
42 | with Interfaces.C; | |
43 | -- used for int | |
44 | -- size_t | |
45 | ||
46 | with System.OS_Interface; | |
47 | -- used for pthread_mutex_t | |
48 | -- pthread_cond_t | |
49 | -- pthread_t | |
50 | ||
51 | package System.Task_Primitives is | |
52 | ||
53 | type Lock is limited private; | |
54 | -- Should be used for implementation of protected objects. | |
55 | ||
56 | type RTS_Lock is limited private; | |
57 | -- Should be used inside the runtime system. | |
58 | -- The difference between Lock and the RTS_Lock is that the later | |
59 | -- one serves only as a semaphore so that do not check for | |
60 | -- ceiling violations. | |
61 | ||
62 | type Task_Body_Access is access procedure; | |
63 | -- Pointer to the task body's entry point (or possibly a wrapper | |
64 | -- declared local to the GNARL). | |
65 | ||
66 | type Private_Data is limited private; | |
67 | -- Any information that the GNULLI needs maintained on a per-task | |
68 | -- basis. A component of this type is guaranteed to be included | |
69 | -- in the Ada_Task_Control_Block. | |
70 | ||
71 | private | |
72 | ||
73 | type Exc_Stack_T is array (0 .. 8192) of aliased Character; | |
74 | for Exc_Stack_T'Alignment use Standard'Maximum_Alignment; | |
75 | type Exc_Stack_Ptr_T is access all Exc_Stack_T; | |
76 | ||
77 | type Lock is record | |
78 | L : aliased System.OS_Interface.pthread_mutex_t; | |
79 | Prio : Interfaces.C.int; | |
80 | Prio_Save : Interfaces.C.int; | |
81 | end record; | |
82 | ||
83 | type RTS_Lock is new System.OS_Interface.pthread_mutex_t; | |
84 | type Private_Data is record | |
85 | Thread : aliased System.OS_Interface.pthread_t; | |
86 | pragma Atomic (Thread); | |
87 | -- Thread field may be updated by two different threads of control. | |
88 | -- (See, Enter_Task and Create_Task in s-taprop.adb). | |
89 | -- They put the same value (thr_self value). We do not want to | |
90 | -- use lock on those operations and the only thing we have to | |
91 | -- make sure is that they are updated in atomic fashion. | |
92 | ||
93 | CV : aliased System.OS_Interface.pthread_cond_t; | |
94 | L : aliased RTS_Lock; | |
95 | -- protection for all components is lock L | |
96 | ||
97 | Exc_Stack_Ptr : Exc_Stack_Ptr_T; | |
98 | -- ??? This needs comments. | |
99 | ||
100 | AST_Pending : Boolean; | |
101 | -- Used to detect delay and sleep timeouts | |
102 | ||
103 | end record; | |
104 | ||
105 | end System.Task_Primitives; |