]>
Commit | Line | Data |
---|---|---|
84481f76 RK |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3 | -- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS -- | |
4 | -- -- | |
07fc65c4 | 5 | -- SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC -- |
84481f76 RK |
6 | -- -- |
7 | -- B o d y -- | |
8 | -- -- | |
fbf5a39b | 9 | -- Copyright (C) 1992-2002, Free Software Fundation, Inc. -- |
84481f76 RK |
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 | -- -- | |
fbf5a39b AC |
29 | -- GNARL was developed by the GNARL team at Florida State University. -- |
30 | -- Extensive contributions were provided by Ada Core Technologies, Inc. -- | |
84481f76 RK |
31 | -- -- |
32 | ------------------------------------------------------------------------------ | |
33 | ||
fbf5a39b | 34 | -- This is a POSIX-like version of this package. |
84481f76 RK |
35 | |
36 | separate (System.Task_Primitives.Operations) | |
37 | package body Specific is | |
38 | ||
84481f76 RK |
39 | ---------------- |
40 | -- Initialize -- | |
41 | ---------------- | |
42 | ||
43 | procedure Initialize (Environment_Task : Task_ID) is | |
fbf5a39b | 44 | pragma Warnings (Off, Environment_Task); |
84481f76 | 45 | Result : Interfaces.C.int; |
fbf5a39b | 46 | |
84481f76 RK |
47 | begin |
48 | Result := pthread_key_create (ATCB_Key'Access, null); | |
49 | pragma Assert (Result = 0); | |
84481f76 RK |
50 | end Initialize; |
51 | ||
fbf5a39b AC |
52 | ------------------- |
53 | -- Is_Valid_Task -- | |
54 | ------------------- | |
55 | ||
56 | function Is_Valid_Task return Boolean is | |
57 | begin | |
58 | return pthread_getspecific (ATCB_Key) /= System.Null_Address; | |
59 | end Is_Valid_Task; | |
60 | ||
84481f76 RK |
61 | --------- |
62 | -- Set -- | |
63 | --------- | |
64 | ||
65 | procedure Set (Self_Id : Task_ID) is | |
07fc65c4 | 66 | Result : Interfaces.C.int; |
84481f76 RK |
67 | |
68 | begin | |
69 | Result := pthread_setspecific (ATCB_Key, To_Address (Self_Id)); | |
70 | pragma Assert (Result = 0); | |
71 | end Set; | |
72 | ||
73 | ---------- | |
74 | -- Self -- | |
75 | ---------- | |
76 | ||
77 | function Self return Task_ID is | |
84481f76 RK |
78 | |
79 | begin | |
fbf5a39b | 80 | return To_Task_Id (pthread_getspecific (ATCB_Key)); |
84481f76 RK |
81 | end Self; |
82 | ||
83 | end Specific; |