Mercurial > cpython-lru_cache-weakref
annotate Python/thread_beos.h @ 9808:0bfaff11c573 legacy-trunk
Ty Sarna writes:
The following patches (relative to 1.5.2b1) enable Python dynamic
loading to work on NetBSD platforms that use ELF (presnetly mips and
alpha systems). They automaticly determine wether the system is ELF or
a.out rather than using astatic list of platforms so that when other
NetBSD platforms move to ELF, python will continue to work without
change.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 07 Jan 1999 21:50:41 +0000 |
| parents | 877d23bd5bdc |
| children | ff243b0f16ee |
| rev | line source |
|---|---|
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /*********************************************************** |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 The Netherlands. |
|
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 All Rights Reserved |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 Permission to use, copy, modify, and distribute this software and its |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 documentation for any purpose and without fee is hereby granted, |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 provided that the above copyright notice appear in all copies and that |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 both that copyright notice and this permission notice appear in |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 supporting documentation, and that the names of Stichting Mathematisch |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 Centrum or CWI or Corporation for National Research Initiatives or |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 CNRI not be used in advertising or publicity pertaining to |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 distribution of the software without specific, written prior |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 permission. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 While CWI is the initial source for this software, a modified version |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 is made available by the Corporation for National Research Initiatives |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 (CNRI) at the Internet address ftp://ftp.python.org. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 PERFORMANCE OF THIS SOFTWARE. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 BeOS thread support by Chris Herborth (chrish@qnx.com) |
|
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 #include <kernel/OS.h> |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 #include <support/SupportDefs.h> |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 #include <errno.h> |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 |
|
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 * 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
|
39 * 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
|
40 */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 typedef struct benaphore { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 sem_id _sem; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 int32 _atom; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 } benaphore_t; |
|
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 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
|
47 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
|
48 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
|
49 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
|
50 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
|
51 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 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
|
53 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 if( ben != NULL ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 ben->_atom = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 ben->_sem = create_sem( 0, name ); |
|
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 if( ben->_sem < B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 return B_BAD_SEM_ID; |
|
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 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 return EFAULT; |
|
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 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 return EOK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 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
|
69 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 if( ben->_sem >= B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 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
|
72 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 if( retval == EOK || retval == EWOULDBLOCK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 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
|
75 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 return del_retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 return B_BAD_SEM_ID; |
|
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 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
|
84 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 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
|
86 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 if( prev > 0 ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 return acquire_sem( ben->_sem ); |
|
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 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 return EOK; |
|
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 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
|
95 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 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
|
97 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 if( prev > 0 ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 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
|
100 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 switch( retval ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 case B_WOULD_BLOCK: /* Fall through... */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 case B_TIMED_OUT: |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 return EWOULDBLOCK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 break; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
106 case B_OK: |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 return EOK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 break; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 default: |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 return retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 break; |
|
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 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 return EOK; |
|
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 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 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
|
119 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
120 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
|
121 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
122 if( prev > 1 ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 return release_sem( ben->_sem ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
126 return EOK; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
127 } |
|
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 /* ---------------------------------------------------------------------- |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
130 * Initialization. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 */ |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
132 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
|
133 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
134 /* Do nothing. */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
135 return; |
|
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 /* ---------------------------------------------------------------------- |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
139 * Thread support. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
140 * |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
141 * 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
|
142 * 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
|
143 */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 static int32 thread_count = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 int PyThread_start_new_thread( void (*func)(void *), void *arg ) |
|
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 status_t success = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 thread_id tid; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
151 char name[B_OS_NAME_LENGTH]; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
152 int32 this_thread; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
154 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
|
155 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 /* We are so very thread-safe... */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
157 this_thread = atomic_add( &thread_count, 1 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 sprintf( name, "python thread (%d)", this_thread ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
159 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
160 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
|
161 B_NORMAL_PRIORITY, arg ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 if( tid > B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
163 success = resume_thread( tid ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
164 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 return ( success == B_NO_ERROR ? 1 : 0 ); |
|
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 long PyThread_get_thread_ident( void ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
171 /* 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
|
172 thread_id tid; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
173 tid = find_thread( NULL ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
174 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 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
|
176 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
177 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
178 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
|
179 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
180 int32 threads; |
|
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_thread called\n")); |
|
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 /* 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
|
185 threads = atomic_add( &thread_count, 0 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
186 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
187 if( threads == 0 ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 /* No threads around, so exit main(). */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 if( no_cleanup ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 _exit(0); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
192 exit(0); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
193 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
195 /* 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
|
196 exit_thread( B_NO_ERROR ); |
|
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 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
199 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
200 void PyThread_exit_thread( void ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
201 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
202 do_PyThread_exit_thread(0); |
|
9603
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 void PyThread__exit_thread( void ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
206 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
207 do_PyThread_exit_thread(1); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
208 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
209 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
210 #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
|
211 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
|
212 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
213 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
|
214 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 /* 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
|
216 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
217 if (no_cleanup) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
218 _exit(status); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
219 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
220 exit(status); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 } |
|
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 void PyThread_exit_prog( int status ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
225 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
226 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
|
227 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
228 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
229 void PyThread__exit_prog( int status ) |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
230 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
231 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
|
232 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
233 #endif /* NO_EXIT_PROG */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
234 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
235 /* ---------------------------------------------------------------------- |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
236 * Lock support. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
237 */ |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
238 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 static int32 lock_count = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
240 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
241 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
|
242 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
243 benaphore_t *lock; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
244 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 char name[B_OS_NAME_LENGTH]; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 int32 this_lock; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
247 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
248 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
|
249 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
250 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
|
251 if( lock == NULL ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
252 /* 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
|
253 return (PyThread_type_lock)NULL; |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
254 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
255 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
256 this_lock = atomic_add( &lock_count, 1 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
257 sprintf( name, "python lock (%d)", this_lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
258 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 retval = benaphore_create( name, lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
260 if( retval != EOK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
261 /* 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
|
262 return (PyThread_type_lock)NULL; |
|
9603
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 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
265 dprintf(("PyThread_allocate_lock() -> %lx\n", (long)lock)); |
|
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
266 return (PyThread_type_lock) lock; |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
268 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
269 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
|
270 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
273 dprintf(("PyThread_free_lock(%lx) called\n", (long)lock)); |
|
9603
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 retval = benaphore_destroy( (benaphore_t *)lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
276 if( retval != EOK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
277 /* 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
|
278 return; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
279 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
280 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
282 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
|
283 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 int success; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
287 dprintf(("PyThread_acquire_lock(%lx, %d) called\n", (long)lock, waitflag)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
288 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 if( waitflag ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
290 retval = benaphore_lock( (benaphore_t *)lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
291 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
292 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
|
293 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
294 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 if( retval == EOK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 success = 1; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 success = 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
300 /* 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
|
301 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
302 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
303 dprintf(("PyThread_acquire_lock(%lx, %d) -> %d\n", (long)lock, waitflag, success)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
304 return success; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
305 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
306 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
307 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
|
308 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
309 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
310 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
311 dprintf(("PyThread_release_lock(%lx) called\n", (long)lock)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
312 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
313 retval = benaphore_unlock( (benaphore_t *)lock ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
314 if( retval != EOK ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
315 /* 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
|
316 return; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
318 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
319 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
320 /* ---------------------------------------------------------------------- |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
321 * Semaphore support. |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
322 * |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
323 * Guido says not to implement this because it's not used anywhere; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
324 * I'll do it anyway, you never know when it might be handy, and it's |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 * easy... |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
326 */ |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
327 PyThread_type_sema PyThread_allocate_sema( int value ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
328 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
329 sem_id sema; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
330 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
331 dprintf(("PyThread_allocate_sema called\n")); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
332 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
333 sema = create_sem( value, "python semaphore" ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
334 if( sema < B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
335 /* 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
|
336 return 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
337 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
338 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
339 dprintf(("PyThread_allocate_sema() -> %lx\n", (long) sema)); |
|
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
340 return (PyThread_type_sema) sema; |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
341 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
342 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
343 void PyThread_free_sema( PyThread_type_sema sema ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
344 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
346 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
347 dprintf(("PyThread_free_sema(%lx) called\n", (long) sema)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
348 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
349 retval = delete_sem( (sem_id)sema ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
350 if( retval != B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
351 /* 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
|
352 return; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
353 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
354 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
355 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
356 int PyThread_down_sema( PyThread_type_sema sema, int waitflag ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
357 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
358 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
359 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
360 dprintf(("PyThread_down_sema(%lx, %d) called\n", (long) sema, waitflag)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
361 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
362 if( waitflag ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
363 retval = acquire_sem( (sem_id)sema ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 } else { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
365 retval = acquire_sem_etc( (sem_id)sema, 1, B_TIMEOUT, 0 ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
366 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
368 if( retval != B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
369 /* 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
|
370 return 0; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
371 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
372 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
373 dprintf(("PyThread_down_sema(%lx) return\n", (long) sema)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
374 return -1; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
375 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
376 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
377 void PyThread_up_sema( PyThread_type_sema sema ) |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
378 { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
379 status_t retval; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
380 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9603
diff
changeset
|
381 dprintf(("PyThread_up_sema(%lx)\n", (long) sema)); |
|
9603
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
382 |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
383 retval = release_sem( (sem_id)sema ); |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
384 if( retval != B_NO_ERROR ) { |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
385 /* 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
|
386 return; |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
387 } |
|
c4e2da477949
Adding thread support for BeOS by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
388 } |
