Mercurial > cpython-lru_cache-weakref
annotate Python/thread_beos.h @ 33940:dfd07b7be407 legacy-trunk
SF bug 1061968: threads: segfault or Py_FatalError at exit
PyGILState_Ensure(): The fix in 2.4a3 for bug 1010677 reintroduced thread
shutdown race bug 225673. Repaired by (once again) ensuring the GIL is
held whenever deleting a thread state.
Alas, there's no useful test case for this shy bug. Four years ago, only
Guido could provoke it, on his box, and today only Armin can provoke it
on his box. I've never been able to provoke it (but not for lack of
trying!).
This is a critical fix for 2.3.5 too, since the fix for 1010677 got
backported there already and so also reintroduced 225673. I don't intend to
backport this fix. For whoever (if anyone) does, there are other thread
fixes in 2.4 that need backporting too, and I bet they need to happen first
for this patch to apply cleanly.
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Mon, 08 Nov 2004 04:30:21 +0000 |
| parents | 8b116a8449bd |
| children | e38335d4df91 df5719c298db |
| rev | line source |
|---|---|
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 #include <kernel/OS.h> |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 #include <support/SupportDefs.h> |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 #include <errno.h> |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 /* ---------------------------------------------------------------------- |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 * Fast locking mechanism described by Benoit Schillings (benoit@be.com) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 * in the Be Developer's Newsletter, Issue #26 (http://www.be.com/). |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 typedef struct benaphore { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 sem_id _sem; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 int32 _atom; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 } benaphore_t; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 static status_t benaphore_create( const char *name, benaphore_t *ben ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 static status_t benaphore_destroy( benaphore_t *ben ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 static status_t benaphore_lock( benaphore_t *ben ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 static status_t benaphore_timedlock( benaphore_t *ben, bigtime_t micros ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 static status_t benaphore_unlock( benaphore_t *ben ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 static status_t benaphore_create( const char *name, benaphore_t *ben ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 if( ben != NULL ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 ben->_atom = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 ben->_sem = create_sem( 0, name ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 if( ben->_sem < B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 return B_BAD_SEM_ID; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 return EFAULT; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 return EOK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 static status_t benaphore_destroy( benaphore_t *ben ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 if( ben->_sem >= B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 status_t retval = benaphore_timedlock( ben, 0 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 if( retval == EOK || retval == EWOULDBLOCK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 status_t del_retval = delete_sem( ben->_sem ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 return del_retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 return B_BAD_SEM_ID; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 static status_t benaphore_lock( benaphore_t *ben ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 int32 prev = atomic_add( &(ben->_atom), 1 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 if( prev > 0 ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 return acquire_sem( ben->_sem ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 return EOK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 static status_t benaphore_timedlock( benaphore_t *ben, bigtime_t micros ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 int32 prev = atomic_add( &(ben->_atom), 1 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 if( prev > 0 ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 status_t retval = acquire_sem_etc( ben->_sem, 1, B_TIMEOUT, micros ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 switch( retval ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 case B_WOULD_BLOCK: /* Fall through... */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 case B_TIMED_OUT: |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 return EWOULDBLOCK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 break; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 case B_OK: |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 return EOK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 break; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 default: |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 return retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 break; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 return EOK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 static status_t benaphore_unlock( benaphore_t *ben ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 int32 prev = atomic_add( &(ben->_atom), -1 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 if( prev > 1 ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 return release_sem( ben->_sem ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 return EOK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 /* ---------------------------------------------------------------------- |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 * Initialization. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 */ |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
100 static void PyThread__init_thread( void ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 /* Do nothing. */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 return; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
106 /* ---------------------------------------------------------------------- |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 * Thread support. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 * |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 * Only ANSI C, renamed functions here; you can't use K&R on BeOS, |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 * and there's no legacy thread module to support. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 static int32 thread_count = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 |
|
20468
ebfd87e87884
Partial patch from SF #452266, by Jason Petrone.
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
115 long PyThread_start_new_thread( void (*func)(void *), void *arg ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
117 status_t success = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 thread_id tid; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 char name[B_OS_NAME_LENGTH]; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
120 int32 this_thread; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
122 dprintf(("PyThread_start_new_thread called\n")); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 /* We are so very thread-safe... */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 this_thread = atomic_add( &thread_count, 1 ); |
|
21094
c2150313d9d1
More sprintf -> PyOS_snprintf.
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
126 PyOS_snprintf(name, sizeof(name), |
|
c2150313d9d1
More sprintf -> PyOS_snprintf.
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
127 "python thread (%d)", this_thread ); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
128 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
129 tid = spawn_thread( (thread_func)func, name, |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
130 B_NORMAL_PRIORITY, arg ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 if( tid > B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 success = resume_thread( tid ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
133 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
134 |
|
20468
ebfd87e87884
Partial patch from SF #452266, by Jason Petrone.
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
135 return ( success == B_NO_ERROR ? tid : -1 ); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
136 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
137 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
138 long PyThread_get_thread_ident( void ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
139 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
140 /* Presumed to return the current thread's ID... */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
141 thread_id tid; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
142 tid = find_thread( NULL ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
143 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 return ( tid != B_NAME_NOT_FOUND ? tid : -1 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
147 static void do_PyThread_exit_thread( int no_cleanup ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 int32 threads; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
151 dprintf(("PyThread_exit_thread called\n")); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
152 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 /* Thread-safe way to read a variable without a mutex: */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 threads = atomic_add( &thread_count, 0 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
155 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 if( threads == 0 ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
157 /* No threads around, so exit main(). */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 if( no_cleanup ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
159 _exit(0); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
160 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
161 exit(0); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
163 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
164 /* Oh, we're a thread, let's try to exit gracefully... */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 exit_thread( B_NO_ERROR ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
168 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 void PyThread_exit_thread( void ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
171 do_PyThread_exit_thread(0); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
173 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
174 void PyThread__exit_thread( void ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
176 do_PyThread_exit_thread(1); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
177 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
178 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 #ifndef NO_EXIT_PROG |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
180 static void do_PyThread_exit_prog( int status, int no_cleanup ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
182 dprintf(("PyThread_exit_prog(%d) called\n", status)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
183 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
184 /* No need to do anything, the threads get torn down if main() exits. */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
185 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
186 if (no_cleanup) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
187 _exit(status); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 exit(status); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
192 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
193 void PyThread_exit_prog( int status ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
195 do_PyThread_exit_prog(status, 0); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
198 void PyThread__exit_prog( int status ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
199 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
200 do_PyThread_exit_prog(status, 1); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
201 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
202 #endif /* NO_EXIT_PROG */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
203 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
204 /* ---------------------------------------------------------------------- |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
205 * Lock support. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
206 */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
207 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
208 static int32 lock_count = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
209 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
210 PyThread_type_lock PyThread_allocate_lock( void ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
211 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 benaphore_t *lock; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
213 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
214 char name[B_OS_NAME_LENGTH]; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 int32 this_lock; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
216 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
217 dprintf(("PyThread_allocate_lock called\n")); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
218 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
219 lock = (benaphore_t *)malloc( sizeof( benaphore_t ) ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
220 if( lock == NULL ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 /* TODO: that's bad, raise MemoryError */ |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
222 return (PyThread_type_lock)NULL; |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
223 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
224 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
225 this_lock = atomic_add( &lock_count, 1 ); |
|
21094
c2150313d9d1
More sprintf -> PyOS_snprintf.
Tim Peters <tim.peters@gmail.com>
parents:
20468
diff
changeset
|
226 PyOS_snprintf(name, sizeof(name), "python lock (%d)", this_lock); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
227 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
228 retval = benaphore_create( name, lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
229 if( retval != EOK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
230 /* TODO: that's bad, raise an exception */ |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
231 return (PyThread_type_lock)NULL; |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
232 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
233 |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
234 dprintf(("PyThread_allocate_lock() -> %p\n", lock)); |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
235 return (PyThread_type_lock) lock; |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
236 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
237 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
238 void PyThread_free_lock( PyThread_type_lock lock ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
240 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
241 |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
242 dprintf(("PyThread_free_lock(%p) called\n", lock)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
243 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
244 retval = benaphore_destroy( (benaphore_t *)lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 if( retval != EOK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 /* TODO: that's bad, raise an exception */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
247 return; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
248 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
249 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
250 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
251 int PyThread_acquire_lock( PyThread_type_lock lock, int waitflag ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
252 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
253 int success; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
254 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
255 |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
256 dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock, waitflag)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
257 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
258 if( waitflag ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 retval = benaphore_lock( (benaphore_t *)lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
260 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
261 retval = benaphore_timedlock( (benaphore_t *)lock, 0 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
262 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
263 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
264 if( retval == EOK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
265 success = 1; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
266 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 success = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
268 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
269 /* TODO: that's bad, raise an exception */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
270 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
272 dprintf(("PyThread_acquire_lock(%p, %d) -> %d\n", lock, waitflag, success)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
273 return success; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
274 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
275 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
276 void PyThread_release_lock( PyThread_type_lock lock ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
277 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
278 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
279 |
|
13210
ff243b0f16ee
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
9679
diff
changeset
|
280 dprintf(("PyThread_release_lock(%p) called\n", lock)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 retval = benaphore_unlock( (benaphore_t *)lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
283 if( retval != EOK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 /* TODO: that's bad, raise an exception */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 return; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
287 } |
