Mercurial > cpython-lru_cache-weakref
annotate Python/thread_os2.h @ 68239:ceec209b26d4 2.4
Close 2.4 branch.
| author | Georg Brandl <georg@python.org> |
|---|---|
| date | Sat, 05 Mar 2011 14:56:41 +0100 |
| parents | 78643be3cf40 |
| children |
| rev | line source |
|---|---|
| 2649 | 1 /* This code implemented by cvale@netcom.com */ |
| 2 | |
| 3 #define INCL_DOSPROCESS | |
| 4 #define INCL_DOSSEMAPHORES | |
| 5 #include "os2.h" | |
| 6 #include "limits.h" | |
| 7 | |
| 8 #include "process.h" | |
| 9 | |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
10 #if defined(PYCC_GCC) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
11 #include <sys/builtin.h> |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
12 #include <sys/fmutex.h> |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
13 #else |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
14 long PyThread_get_thread_ident(void); |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
15 #endif |
| 2649 | 16 |
|
34433
e1a7eb832cb5
backport: make thread stack size compile-time tunable on OS/2
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26531
diff
changeset
|
17 #if !defined(THREAD_STACK_SIZE) |
|
e1a7eb832cb5
backport: make thread stack size compile-time tunable on OS/2
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26531
diff
changeset
|
18 #define THREAD_STACK_SIZE 0x10000 |
|
e1a7eb832cb5
backport: make thread stack size compile-time tunable on OS/2
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26531
diff
changeset
|
19 #endif |
|
e1a7eb832cb5
backport: make thread stack size compile-time tunable on OS/2
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26531
diff
changeset
|
20 |
| 2649 | 21 /* |
| 22 * Initialization of the C package, should not be needed. | |
| 23 */ | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
24 static void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
25 PyThread__init_thread(void) |
| 2649 | 26 { |
| 27 } | |
| 28 | |
| 29 /* | |
| 30 * Thread support. | |
| 31 */ | |
|
20468
ebfd87e87884
Partial patch from SF #452266, by Jason Petrone.
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
32 long |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
33 PyThread_start_new_thread(void (*func)(void *), void *arg) |
| 2649 | 34 { |
|
39150
3ac8509437df
bugfix: PyThread_start_new_thread() returns the thread ID, not a flag;
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
34433
diff
changeset
|
35 int thread_id; |
| 2649 | 36 |
|
39152
78643be3cf40
Complete backport of rev 50787 that was started in rev 50788
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
39150
diff
changeset
|
37 thread_id = _beginthread(func, NULL, THREAD_STACK_SIZE, arg); |
| 2649 | 38 |
|
39150
3ac8509437df
bugfix: PyThread_start_new_thread() returns the thread ID, not a flag;
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
34433
diff
changeset
|
39 if (thread_id == -1) { |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
40 dprintf(("_beginthread failed. return %ld\n", errno)); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
41 } |
| 2649 | 42 |
|
39150
3ac8509437df
bugfix: PyThread_start_new_thread() returns the thread ID, not a flag;
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
34433
diff
changeset
|
43 return thread_id; |
| 2649 | 44 } |
| 45 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
46 long |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
47 PyThread_get_thread_ident(void) |
| 2649 | 48 { |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
49 #if !defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
50 PPIB pib; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
51 PTIB tib; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
52 #endif |
| 2649 | 53 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
54 if (!initialized) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
55 PyThread_init_thread(); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
56 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
57 #if defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
58 return _gettid(); |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
59 #else |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
60 DosGetInfoBlocks(&tib, &pib); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
61 return tib->tib_ptib2->tib2_ultid; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
62 #endif |
| 2649 | 63 } |
| 64 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
65 static void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
66 do_PyThread_exit_thread(int no_cleanup) |
| 2649 | 67 { |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
68 dprintf(("%ld: PyThread_exit_thread called\n", |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
69 PyThread_get_thread_ident())); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
70 if (!initialized) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
71 if (no_cleanup) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
72 _exit(0); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
73 else |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
74 exit(0); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
75 _endthread(); |
| 2649 | 76 } |
| 77 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
78 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
79 PyThread_exit_thread(void) |
| 2649 | 80 { |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
81 do_PyThread_exit_thread(0); |
| 2649 | 82 } |
| 83 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
84 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
85 PyThread__exit_thread(void) |
| 2649 | 86 { |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
87 do_PyThread_exit_thread(1); |
| 2649 | 88 } |
| 89 | |
| 90 #ifndef NO_EXIT_PROG | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
91 static void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
92 do_PyThread_exit_prog(int status, int no_cleanup) |
| 2649 | 93 { |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
94 dprintf(("PyThread_exit_prog(%d) called\n", status)); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
95 if (!initialized) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
96 if (no_cleanup) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
97 _exit(status); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
98 else |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
99 exit(status); |
| 2649 | 100 } |
| 101 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
102 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
103 PyThread_exit_prog(int status) |
| 2649 | 104 { |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
105 do_PyThread_exit_prog(status, 0); |
| 2649 | 106 } |
| 107 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
108 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
109 PyThread__exit_prog(int status) |
| 2649 | 110 { |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
111 do_PyThread_exit_prog(status, 1); |
| 2649 | 112 } |
| 113 #endif /* NO_EXIT_PROG */ | |
| 114 | |
| 115 /* | |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
116 * Lock support. This is implemented with an event semaphore and critical |
|
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
117 * sections to make it behave more like a posix mutex than its OS/2 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
118 * counterparts. |
| 2649 | 119 */ |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
120 |
|
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
121 typedef struct os2_lock_t { |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
122 int is_set; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
123 HEV changed; |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
124 } *type_os2_lock; |
|
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
125 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
126 PyThread_type_lock |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
127 PyThread_allocate_lock(void) |
| 2649 | 128 { |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
129 #if defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
130 _fmutex *sem = malloc(sizeof(_fmutex)); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
131 if (!initialized) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
132 PyThread_init_thread(); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
133 dprintf(("%ld: PyThread_allocate_lock() -> %lx\n", |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
134 PyThread_get_thread_ident(), |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
135 (long)sem)); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
136 if (_fmutex_create(sem, 0)) { |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
137 free(sem); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
138 sem = NULL; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
139 } |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
140 return (PyThread_type_lock)sem; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
141 #else |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
142 APIRET rc; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
143 type_os2_lock lock = (type_os2_lock)malloc(sizeof(struct os2_lock_t)); |
| 2649 | 144 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
145 dprintf(("PyThread_allocate_lock called\n")); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
146 if (!initialized) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
147 PyThread_init_thread(); |
| 2649 | 148 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
149 lock->is_set = 0; |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
150 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
151 DosCreateEventSem(NULL, &lock->changed, 0, 0); |
| 2649 | 152 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
153 dprintf(("%ld: PyThread_allocate_lock() -> %p\n", |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
154 PyThread_get_thread_ident(), |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
155 lock->changed)); |
| 2649 | 156 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
157 return (PyThread_type_lock)lock; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
158 #endif |
| 2649 | 159 } |
| 160 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
161 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
162 PyThread_free_lock(PyThread_type_lock aLock) |
| 2649 | 163 { |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
164 #if !defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
165 type_os2_lock lock = (type_os2_lock)aLock; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
166 #endif |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
167 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
168 dprintf(("%ld: PyThread_free_lock(%p) called\n", |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
169 PyThread_get_thread_ident(),aLock)); |
| 2649 | 170 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
171 #if defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
172 if (aLock) { |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
173 _fmutex_close((_fmutex *)aLock); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
174 free((_fmutex *)aLock); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
175 } |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
176 #else |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
177 DosCloseEventSem(lock->changed); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
178 free(aLock); |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
179 #endif |
| 2649 | 180 } |
| 181 | |
| 182 /* | |
| 183 * Return 1 on success if the lock was acquired | |
| 184 * | |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
185 * and 0 if the lock was not acquired. |
| 2649 | 186 */ |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
187 int |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
188 PyThread_acquire_lock(PyThread_type_lock aLock, int waitflag) |
| 2649 | 189 { |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
190 #if !defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
191 int done = 0; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
192 ULONG count; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
193 PID pid = 0; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
194 TID tid = 0; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
195 type_os2_lock lock = (type_os2_lock)aLock; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
196 #endif |
| 2649 | 197 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
198 dprintf(("%ld: PyThread_acquire_lock(%p, %d) called\n", |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
199 PyThread_get_thread_ident(), |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
200 aLock, |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
201 waitflag)); |
| 2649 | 202 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
203 #if defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
204 /* always successful if the lock doesn't exist */ |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
205 if (aLock && |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
206 _fmutex_request((_fmutex *)aLock, waitflag ? 0 : _FMR_NOWAIT)) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
207 return 0; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
208 #else |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
209 while (!done) { |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
210 /* if the lock is currently set, we have to wait for |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
211 * the state to change |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
212 */ |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
213 if (lock->is_set) { |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
214 if (!waitflag) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
215 return 0; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
216 DosWaitEventSem(lock->changed, SEM_INDEFINITE_WAIT); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
217 } |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
218 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
219 /* enter a critical section and try to get the semaphore. If |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
220 * it is still locked, we will try again. |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
221 */ |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
222 if (DosEnterCritSec()) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
223 return 0; |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
224 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
225 if (!lock->is_set) { |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
226 lock->is_set = 1; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
227 DosResetEventSem(lock->changed, &count); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
228 done = 1; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
229 } |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
230 |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
231 DosExitCritSec(); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
232 } |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
233 #endif |
| 2649 | 234 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
235 return 1; |
| 2649 | 236 } |
| 237 | |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
238 void PyThread_release_lock(PyThread_type_lock aLock) |
| 2649 | 239 { |
|
26530
b5837b8f3b2c
typo fix: declaration required for VACPP not EMX+gcc
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
22054
diff
changeset
|
240 #if !defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
241 type_os2_lock lock = (type_os2_lock)aLock; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
242 #endif |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
243 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
244 dprintf(("%ld: PyThread_release_lock(%p) called\n", |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
245 PyThread_get_thread_ident(), |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
246 aLock)); |
| 2649 | 247 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
248 #if defined(PYCC_GCC) |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
249 if (aLock) |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
250 _fmutex_release((_fmutex *)aLock); |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
251 #else |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
252 if (!lock->is_set) { |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
253 dprintf(("%ld: Could not PyThread_release_lock(%p) error: %l\n", |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
254 PyThread_get_thread_ident(), |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
255 aLock, |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
256 GetLastError())); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
257 return; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
258 } |
|
20782
b1d9029e09d1
SF patch #474500: Make OS/2 locks work like posix locks, from Michael
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
259 |
|
26531
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
260 if (DosEnterCritSec()) { |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
261 dprintf(("%ld: Could not PyThread_release_lock(%p) error: %l\n", |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
262 PyThread_get_thread_ident(), |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
263 aLock, |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
264 GetLastError())); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
265 return; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
266 } |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
267 |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
268 lock->is_set = 0; |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
269 DosPostEventSem(lock->changed); |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
270 |
|
8e1567dbcba8
reformat for PEP-7 style conformance
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
26530
diff
changeset
|
271 DosExitCritSec(); |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21766
diff
changeset
|
272 #endif |
| 2649 | 273 } |
