]>
Commit | Line | Data |
---|---|---|
07e188be PO |
1 | /**************************************************************************** |
2 | * * | |
3 | * GNAT COMPILER COMPONENTS * | |
4 | * * | |
5 | * R T F I N A L * | |
6 | * * | |
7 | * C Implementation File * | |
8 | * * | |
bc0b26b9 | 9 | * Copyright (C) 2014-2022, Free Software Foundation, Inc. * |
07e188be PO |
10 | * * |
11 | * GNAT 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 3, or (at your option) any later ver- * | |
14 | * sion. GNAT 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. * | |
17 | * * | |
18 | * As a special exception under Section 7 of GPL version 3, you are granted * | |
19 | * additional permissions described in the GCC Runtime Library Exception, * | |
20 | * version 3.1, as published by the Free Software Foundation. * | |
21 | * * | |
22 | * You should have received a copy of the GNU General Public License and * | |
23 | * a copy of the GCC Runtime Library Exception along with this program; * | |
24 | * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see * | |
25 | * <http://www.gnu.org/licenses/>. * | |
26 | * * | |
27 | * GNAT was originally developed by the GNAT team at New York University. * | |
28 | * Extensive contributions were provided by Ada Core Technologies Inc. * | |
29 | * * | |
30 | ****************************************************************************/ | |
31 | ||
32 | #ifdef __cplusplus | |
33 | extern "C" { | |
34 | #endif | |
35 | ||
36 | extern void __gnat_runtime_finalize (void); | |
37 | ||
38 | /* This routine is called at the extreme end of execution of an Ada program | |
39 | (the call is generated by the binder). The standard routine does nothing | |
40 | at all, the intention is that this be replaced by system specific code | |
41 | where finalization is required. | |
42 | ||
bad0a3df | 43 | Note that __gnat_runtime_finalize() is called in adafinal() */ |
07e188be PO |
44 | |
45 | extern int __gnat_rt_init_count; | |
e53b6e56 | 46 | /* see initialize.cc */ |
07e188be PO |
47 | |
48 | #if defined (__MINGW32__) | |
49 | #include "mingw32.h" | |
50 | #include <windows.h> | |
51 | ||
52 | extern CRITICAL_SECTION ProcListCS; | |
53 | extern HANDLE ProcListEvt; | |
54 | ||
55 | void | |
56 | __gnat_runtime_finalize (void) | |
57 | { | |
58 | /* decrement the reference counter */ | |
59 | ||
60 | __gnat_rt_init_count--; | |
61 | ||
62 | /* if still some referenced return now */ | |
63 | if (__gnat_rt_init_count > 0) | |
64 | return; | |
65 | ||
66 | /* delete critical section and event handle used for the | |
67 | processes chain list */ | |
68 | DeleteCriticalSection(&ProcListCS); | |
69 | CloseHandle (ProcListEvt); | |
70 | } | |
71 | ||
72 | #else | |
73 | ||
74 | void | |
75 | __gnat_runtime_finalize (void) | |
76 | { | |
77 | /* decrement the reference counter */ | |
78 | ||
79 | __gnat_rt_init_count--; | |
80 | ||
81 | /* if still some referenced return now */ | |
82 | if (__gnat_rt_init_count > 0) | |
83 | return; | |
84 | } | |
85 | #endif | |
86 | ||
87 | #ifdef __cplusplus | |
88 | } | |
89 | #endif |