Skip to content

Commit cf1474b

Browse files
committed
Sjoerd's thread changes (including down_sema typo fix).
Note: waitflag not supported on NT.
1 parent 5b1d9ba commit cf1474b

File tree

8 files changed

+47
-18
lines changed

8 files changed

+47
-18
lines changed

Python/thread_cthread.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,11 @@ void free_sema _P1(sema, type_sema sema)
183183
dprintf(("free_sema(%lx) called\n", (long) sema));
184184
}
185185

186-
void down_sema _P1(sema, type_sema sema)
186+
int down_sema _P2(sema, type_sema sema, waitflag, int waitflag)
187187
{
188-
dprintf(("down_sema(%lx) called\n", (long) sema));
188+
dprintf(("down_sema(%lx, %d) called\n", (long) sema, waitflag));
189189
dprintf(("down_sema(%lx) return\n", (long) sema));
190+
return -1;
190191
}
191192

192193
void up_sema _P1(sema, type_sema sema)

Python/thread_foobar.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,11 @@ void free_sema _P1(sema, type_sema sema)
142142
dprintf(("free_sema(%lx) called\n", (long) sema));
143143
}
144144

145-
void down_sema _P1(sema, type_sema sema)
145+
int down_sema _P2(sema, type_sema sema, waitflag, int waitflag)
146146
{
147-
dprintf(("down_sema(%lx) called\n", (long) sema));
147+
dprintf(("down_sema(%lx, %d) called\n", (long) sema, waitflag));
148148
dprintf(("down_sema(%lx) return\n", (long) sema));
149+
return -1;
149150
}
150151

151152
void up_sema _P1(sema, type_sema sema)

Python/thread_lwp.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,11 @@ void free_sema _P1(sema, type_sema sema)
190190
dprintf(("free_sema(%lx) called\n", (long) sema));
191191
}
192192

193-
void down_sema _P1(sema, type_sema sema)
193+
int down_sema _P2(sema, type_sema sema, waitflag, int waitflag)
194194
{
195-
dprintf(("down_sema(%lx) called\n", (long) sema));
195+
dprintf(("down_sema(%lx, %d) called\n", (long) sema, waitflag));
196196
dprintf(("down_sema(%lx) return\n", (long) sema));
197+
return -1;
197198
}
198199

199200
void up_sema _P1(sema, type_sema sema)

Python/thread_nt.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,10 @@ void free_sema(type_sema aSemaphore)
223223
CloseHandle((HANDLE) aSemaphore);
224224
}
225225

226-
void down_sema(type_sema aSemaphore)
226+
/*
227+
XXX must do something about waitflag
228+
*/
229+
int down_sema(type_sema aSemaphore, int waitflag)
227230
{
228231
DWORD waitResult;
229232

@@ -232,6 +235,7 @@ void down_sema(type_sema aSemaphore)
232235
waitResult = WaitForSingleObject( (HANDLE) aSemaphore, INFINITE);
233236

234237
dprintf(("%ld: down_sema(%lx) return: %l\n", get_thread_ident(),(long) aSemaphore, waitResult));
238+
return 0;
235239
}
236240

237241
void up_sema(type_sema aSemaphore)

Python/thread_os2.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,9 @@ void free_sema(type_sema aSemaphore)
203203

204204
}
205205

206-
void down_sema(type_sema aSemaphore)
206+
void down_sema(type_sema aSemaphore, int waitflag)
207207
{
208-
208+
return -1;
209209
}
210210

211211
void up_sema(type_sema aSemaphore)

Python/thread_pthread.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,11 @@ void free_sema _P1(sema, type_sema sema)
274274
dprintf(("free_sema(%lx) called\n", (long) sema));
275275
}
276276

277-
void down_sema _P1(sema, type_sema sema)
277+
int down_sema _P2(sema, type_sema sema, waitflag, int waitflag)
278278
{
279-
dprintf(("down_sema(%lx) called\n", (long) sema));
279+
dprintf(("down_sema(%lx, %d) called\n", (long) sema, waitflag));
280280
dprintf(("down_sema(%lx) return\n", (long) sema));
281+
return -1;
281282
}
282283

283284
void up_sema _P1(sema, type_sema sema)

Python/thread_sgi.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -423,12 +423,19 @@ void free_sema _P1(sema, type_sema sema)
423423
usfreesema((usema_t *) sema, shared_arena);
424424
}
425425

426-
void down_sema _P1(sema, type_sema sema)
426+
int down_sema _P2(sema, type_sema sema, waitflag, int waitflag)
427427
{
428+
int success;
429+
428430
dprintf(("down_sema(%lx) called\n", (long) sema));
429-
if (uspsema((usema_t *) sema) < 0)
430-
perror("uspsema");
431+
if (waitflag)
432+
success = uspsema((usema_t *) sema);
433+
else
434+
success = uscpsema((usema_t *) sema);
435+
if (success < 0)
436+
perror(waitflag ? "uspsema" : "uscpsema");
431437
dprintf(("down_sema(%lx) return\n", (long) sema));
438+
return success;
432439
}
433440

434441
void up_sema _P1(sema, type_sema sema)

Python/thread_solaris.h

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2525
#include <stdlib.h>
2626
#include <stdio.h>
2727
#include <unistd.h>
28+
#include <errno.h>
2829
#include </usr/include/thread.h>
2930
#undef _POSIX_THREADS
3031

@@ -211,12 +212,25 @@ void free_sema _P1(sema, type_sema sema)
211212
free((void *) sema);
212213
}
213214

214-
void down_sema _P1(sema, type_sema sema)
215+
int down_sema _P2(sema, type_sema sema, waitflag, int waitflag)
215216
{
217+
int success;
218+
216219
dprintf(("down_sema(%lx) called\n", (long) sema));
217-
if (sema_wait((sema_t *) sema))
218-
perror("sema_wait");
219-
dprintf(("down_sema(%lx) return\n", (long) sema));
220+
if (waitflag)
221+
success = sema_wait((sema_t *) sema);
222+
else
223+
success = sema_trywait((sema_t *) sema);
224+
if (success < 0) {
225+
if (errno == EBUSY)
226+
success = 0;
227+
else
228+
perror("sema_wait");
229+
}
230+
else
231+
success = !success;
232+
dprintf(("down_sema(%lx) return %d\n", (long) sema, success));
233+
return success;
220234
}
221235

222236
void up_sema _P1(sema, type_sema sema)

0 commit comments

Comments
 (0)