PostgreSQL Source Code: src/backend/port/win32_sema.c Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
15
19
23
25
26
27
28
29
36
37
38
39
40
41
42
43
44
45
46void
57
58
59
60
61
62
63static void
72
73
74
75
76
77
80{
83
84
86
88 elog(PANIC, "too many semaphores created");
89
94
95
98 {
99
101 }
102 else
104 (errmsg("could not create semaphore: error code %lu",
106
108}
109
110
111
112
113
114
115void
117{
118
119
120
121
123 ;
124}
125
126
127
128
129
130
131void
133{
135 bool done = false;
136
137
138
139
140
141
143 wh[1] = sema;
144
145
146
147
148
149
150
151 while (!done)
152 {
154
156
158 switch (rc)
159 {
161
163 break;
165
166 done = true;
167 break;
169
170
171
172
173
174
175
176
177 break;
180 (errmsg("could not lock semaphore: error code %lu",
182 break;
183 default:
184 elog(FATAL, "unexpected return code from WaitForMultipleObjectsEx(): %lu", rc);
185 break;
186 }
187 }
188}
189
190
191
192
193
194
195void
197{
200 (errmsg("could not unlock semaphore: error code %lu",
202}
203
204
205
206
207
208
209bool
211{
213
215
217 {
218
219 return true;
220 }
222 {
223
225 return false;
226 }
227
228
230 (errmsg("could not try-lock semaphore: error code %lu",
232
233
234 return false;
235}
#define Assert(condition)
#define ereport(elevel,...)
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
#define CHECK_FOR_INTERRUPTS()
void pgwin32_dispatch_queued_signals(void)
HANDLE pgwin32_signal_event
Size PGSemaphoreShmemSize(int maxSemas)
void PGSemaphoreUnlock(PGSemaphore sema)
void PGReserveSemaphores(int maxSemas)
void PGSemaphoreReset(PGSemaphore sema)
void PGSemaphoreLock(PGSemaphore sema)
bool PGSemaphoreTryLock(PGSemaphore sema)
PGSemaphore PGSemaphoreCreate(void)
static void ReleaseSemaphores(int code, Datum arg)