Mercurial > cpython-lru_cache-weakref
annotate Python/thread_os2.h @ 13658:f79434ee41fa legacy-trunk
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
declarations yet, those come later.
| author | Thomas Wouters <thomas@python.org> |
|---|---|
| date | Sat, 22 Jul 2000 18:47:25 +0000 |
| parents | 5b727ab37092 |
| children | 6f6f965c5e2d |
| rev | line source |
|---|---|
| 2649 | 1 /*********************************************************** |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4371
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4371
diff
changeset
|
3 The Netherlands. |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4371
diff
changeset
|
4 |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4371
diff
changeset
|
5 All Rights Reserved |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4371
diff
changeset
|
6 |
|
13255
916fb024ce94
Change copyright notice.
Guido van Rossum <guido@python.org>
parents:
13210
diff
changeset
|
7 Copyright (c) 2000, BeOpen.com. |
|
916fb024ce94
Change copyright notice.
Guido van Rossum <guido@python.org>
parents:
13210
diff
changeset
|
8 Copyright (c) 1995-2000, Corporation for National Research Initiatives. |
|
916fb024ce94
Change copyright notice.
Guido van Rossum <guido@python.org>
parents:
13210
diff
changeset
|
9 Copyright (c) 1990-1995, Stichting Mathematisch Centrum. |
|
916fb024ce94
Change copyright notice.
Guido van Rossum <guido@python.org>
parents:
13210
diff
changeset
|
10 All rights reserved. |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4371
diff
changeset
|
11 |
|
13255
916fb024ce94
Change copyright notice.
Guido van Rossum <guido@python.org>
parents:
13210
diff
changeset
|
12 See the file "Misc/COPYRIGHT" for information on usage and |
|
916fb024ce94
Change copyright notice.
Guido van Rossum <guido@python.org>
parents:
13210
diff
changeset
|
13 redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
| 2649 | 14 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4371
diff
changeset
|
15 ******************************************************************/ |
| 2649 | 16 |
| 17 /* This code implemented by cvale@netcom.com */ | |
| 18 | |
| 19 #define INCL_DOSPROCESS | |
| 20 #define INCL_DOSSEMAPHORES | |
| 21 #include "os2.h" | |
| 22 #include "limits.h" | |
| 23 | |
| 24 #include "process.h" | |
| 25 | |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
26 long PyThread_get_thread_ident(void); |
| 2649 | 27 |
| 28 | |
| 29 /* | |
| 30 * Initialization of the C package, should not be needed. | |
| 31 */ | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
32 static void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
33 PyThread__init_thread(void) |
| 2649 | 34 { |
| 35 } | |
| 36 | |
| 37 /* | |
| 38 * Thread support. | |
| 39 */ | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
40 int |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
41 PyThread_start_new_thread(void (*func)(void *), void *arg) |
| 2649 | 42 { |
| 43 int aThread; | |
| 44 int success = 1; | |
| 45 | |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
46 aThread = _beginthread(func,NULL,65536,arg); |
| 2649 | 47 |
| 48 if( aThread == -1 ) { | |
| 49 success = 0; | |
| 50 fprintf(stderr,"aThread failed == %d",aThread); | |
| 51 dprintf(("_beginthread failed. return %ld\n", errno)); | |
| 52 } | |
| 53 | |
| 54 return success; | |
| 55 } | |
| 56 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
57 long |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
58 PyThread_get_thread_ident(void) |
| 2649 | 59 { |
| 60 PPIB pib; | |
| 61 PTIB tib; | |
| 62 | |
| 63 if (!initialized) | |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
64 PyThread_init_thread(); |
| 2649 | 65 |
| 66 DosGetInfoBlocks(&tib,&pib); | |
| 67 return tib->tib_ptib2->tib2_ultid; | |
| 68 } | |
| 69 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
70 static void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
71 do_PyThread_exit_thread(int no_cleanup) |
| 2649 | 72 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
73 dprintf(("%ld: PyThread_exit_thread called\n", PyThread_get_thread_ident())); |
| 2649 | 74 if (!initialized) |
| 75 if (no_cleanup) | |
| 76 _exit(0); | |
| 77 else | |
| 78 exit(0); | |
| 79 _endthread(); | |
| 80 } | |
| 81 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
82 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
83 PyThread_exit_thread(void) |
| 2649 | 84 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
85 do_PyThread_exit_thread(0); |
| 2649 | 86 } |
| 87 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
88 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
89 PyThread__exit_thread(void) |
| 2649 | 90 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
91 do_PyThread_exit_thread(1); |
| 2649 | 92 } |
| 93 | |
| 94 #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
|
95 static void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
96 do_PyThread_exit_prog(int status, int no_cleanup) |
| 2649 | 97 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
98 dprintf(("PyThread_exit_prog(%d) called\n", status)); |
| 2649 | 99 if (!initialized) |
| 100 if (no_cleanup) | |
| 101 _exit(status); | |
| 102 else | |
| 103 exit(status); | |
| 104 } | |
| 105 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
106 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
107 PyThread_exit_prog(int status) |
| 2649 | 108 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
109 do_PyThread_exit_prog(status, 0); |
| 2649 | 110 } |
| 111 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
112 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
113 PyThread__exit_prog(int status) |
| 2649 | 114 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
115 do_PyThread_exit_prog(status, 1); |
| 2649 | 116 } |
| 117 #endif /* NO_EXIT_PROG */ | |
| 118 | |
| 119 /* | |
| 120 * Lock support. It has too be implemented as semaphores. | |
| 121 * I [Dag] tried to implement it with mutex but I could find a way to | |
| 122 * tell whether a thread already own the lock or not. | |
| 123 */ | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
124 PyThread_type_lock |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
125 PyThread_allocate_lock(void) |
| 2649 | 126 { |
| 127 HMTX aLock; | |
| 128 APIRET rc; | |
| 129 | |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
130 dprintf(("PyThread_allocate_lock called\n")); |
| 2649 | 131 if (!initialized) |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
132 PyThread_init_thread(); |
| 2649 | 133 |
| 134 DosCreateMutexSem(NULL, /* Sem name */ | |
|
13620
5b727ab37092
Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents:
13255
diff
changeset
|
135 &aLock, /* the semaphore */ |
| 2649 | 136 0, /* shared ? */ |
| 137 0); /* initial state */ | |
| 138 | |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
139 dprintf(("%ld: PyThread_allocate_lock() -> %p\n", PyThread_get_thread_ident(), aLock)); |
| 2649 | 140 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
141 return (PyThread_type_lock) aLock; |
| 2649 | 142 } |
| 143 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
144 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
145 PyThread_free_lock(PyThread_type_lock aLock) |
| 2649 | 146 { |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
147 dprintf(("%ld: PyThread_free_lock(%p) called\n", PyThread_get_thread_ident(),aLock)); |
| 2649 | 148 |
| 149 DosCloseMutexSem((HMTX)aLock); | |
| 150 } | |
| 151 | |
| 152 /* | |
| 153 * Return 1 on success if the lock was acquired | |
| 154 * | |
| 155 * and 0 if the lock was not acquired. This means a 0 is returned | |
| 156 * if the lock has already been acquired by this thread! | |
| 157 */ | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
158 int |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
159 PyThread_acquire_lock(PyThread_type_lock aLock, int waitflag) |
| 2649 | 160 { |
| 161 int success = 1; | |
| 162 ULONG rc, count; | |
| 163 PID pid = 0; | |
| 164 TID tid = 0; | |
| 165 | |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
166 dprintf(("%ld: PyThread_acquire_lock(%p, %d) called\n", PyThread_get_thread_ident(), |
|
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
167 aLock, waitflag)); |
| 2649 | 168 |
| 169 DosQueryMutexSem((HMTX)aLock,&pid,&tid,&count); | |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
170 if( tid == PyThread_get_thread_ident() ) { /* if we own this lock */ |
| 2649 | 171 success = 0; |
| 172 } else { | |
| 173 rc = DosRequestMutexSem((HMTX) aLock, | |
| 174 (waitflag == 1 ? SEM_INDEFINITE_WAIT : 0)); | |
| 175 | |
| 176 if( rc != 0) { | |
| 177 success = 0; /* We failed */ | |
| 178 } | |
| 179 } | |
| 180 | |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
181 dprintf(("%ld: PyThread_acquire_lock(%p, %d) -> %d\n", |
|
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
182 PyThread_get_thread_ident(),aLock, waitflag, success)); |
| 2649 | 183 |
| 184 return success; | |
| 185 } | |
| 186 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
187 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
188 PyThread_release_lock(PyThread_type_lock aLock) |
| 2649 | 189 { |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
190 dprintf(("%ld: PyThread_release_lock(%p) called\n", PyThread_get_thread_ident(),aLock)); |
| 2649 | 191 |
| 192 if ( DosReleaseMutexSem( (HMTX) aLock ) != 0 ) { | |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
193 dprintf(("%ld: Could not PyThread_release_lock(%p) error: %l\n", |
|
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
194 PyThread_get_thread_ident(), aLock, GetLastError())); |
| 2649 | 195 } |
| 196 } | |
| 197 | |
| 198 /* | |
| 199 * Semaphore support. | |
| 200 */ | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
201 PyThread_type_sema |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
202 PyThread_allocate_sema(int value) |
| 2649 | 203 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
204 return (PyThread_type_sema) 0; |
| 2649 | 205 } |
| 206 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
207 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
208 PyThread_free_sema(PyThread_type_sema aSemaphore) |
| 2649 | 209 { |
| 210 | |
| 211 } | |
| 212 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
213 int |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
214 PyThread_down_sema(PyThread_type_sema aSemaphore, int waitflag) |
| 2649 | 215 { |
|
4371
c277ee8c669c
Sjoerd's thread changes (including down_sema typo fix).
Guido van Rossum <guido@python.org>
parents:
2649
diff
changeset
|
216 return -1; |
| 2649 | 217 } |
| 218 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
219 void |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
220 PyThread_up_sema(PyThread_type_sema aSemaphore) |
| 2649 | 221 { |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
222 dprintf(("%ld: PyThread_up_sema(%p)\n", PyThread_get_thread_ident(), aSemaphore)); |
| 2649 | 223 } |
