![]() |
CMGDK r49-rc2
|
00001 / * C o p y r i g h t ( C ) 2 0 0 0 - 2 0 0 8 M y S Q L A B , 2 0 0 8 - 2 0 0 9 S u n M i c r o s y s t e m s , I n c . 00002 00003 T h i s p r o g r a m i s f r e e s o f t w a r e ; y o u c a n r e d i s t r i b u t e i t a n d / o r m o d i f y 00004 00005 i t u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c L i c e n s e a s p u b l i s h e d b y 00006 00007 t h e F r e e S o f t w a r e F o u n d a t i o n ; v e r s i o n 2 o f t h e L i c e n s e . 00008 00009 T h i s p r o g r a m i s d i s t r i b u t e d i n t h e h o p e t h a t i t w i l l b e u s e f u l , 00010 00011 b u t W I T H O U T A N Y W A R R A N T Y ; w i t h o u t e v e n t h e i m p l i e d w a r r a n t y o f 00012 00013 M E R C H A N T A B I L I T Y o r F I T N E S S F O R A P A R T I C U L A R P U R P O S E . S e e t h e 00014 00015 G N U G e n e r a l P u b l i c L i c e n s e f o r m o r e d e t a i l s . 00016 00017 Y o u s h o u l d h a v e r e c e i v e d a c o p y o f t h e G N U G e n e r a l P u b l i c L i c e n s e 00018 00019 a l o n g w i t h t h i s p r o g r a m ; i f n o t , w r i t e t o t h e F r e e S o f t w a r e 00020 00021 F o u n d a t i o n , I n c . , 5 9 T e m p l e P l a c e , S u i t e 3 3 0 , B o s t o n , M A 0 2 1 1 1 - 1 3 0 7 U S A * / 00022 00023 / * D e f i n e s t o m a k e d i f f e r e n t t h r e a d p a c k a g e s c o m p a t i b l e * / 00024 00025 # i f n d e f _ m y _ p t h r e a d _ h 00026 00027 # d e f i n e _ m y _ p t h r e a d _ h 00028 00029 # i f n d e f E T I M E 00030 00031 # d e f i n e E T I M E E T I M E D O U T / * F o r F r e e B S D * / 00032 00033 # e n d i f 00034 00035 # i f d e f _ _ c p l u s p l u s 00036 00037 # d e f i n e E X T E R N C e x t e r n " C " 00038 00039 e x t e r n " C " { 00040 00041 # e l s e 00042 00043 # d e f i n e E X T E R N C 00044 00045 # e n d i f / * _ _ c p l u s p l u s * / 00046 00047 # i f d e f i n e d ( _ _ W I N _ _ ) 00048 00049 t y p e d e f C R I T I C A L _ S E C T I O N p t h r e a d _ m u t e x _ t ; 00050 00051 t y p e d e f D W O R D p t h r e a d _ t ; 00052 00053 t y p e d e f s t r u c t t h r e a d _ a t t r { 00054 00055 D W O R D d w S t a c k S i z e ; 00056 00057 D W O R D d w C r e a t i n g F l a g ; 00058 00059 } p t h r e a d _ a t t r _ t ; 00060 00061 t y p e d e f s t r u c t { i n t d u m m y ; } p t h r e a d _ c o n d a t t r _ t ; 00062 00063 / * I m p l e m e n t a t i o n o f p o s i x c o n d i t i o n s * / 00064 00065 t y p e d e f s t r u c t s t _ p t h r e a d _ l i n k { 00066 00067 D W O R D t h r e a d _ i d ; 00068 00069 s t r u c t s t _ p t h r e a d _ l i n k * n e x t ; 00070 00071 } p t h r e a d _ l i n k ; 00072 00073 t y p e d e f s t r u c t { 00074 00075 u i n t 3 2 w a i t i n g ; 00076 00077 C R I T I C A L _ S E C T I O N l o c k _ w a i t i n g ; 00078 00079 00080 00081 e n u m { 00082 00083 S I G N A L = 0 , 00084 00085 B R O A D C A S T = 1 , 00086 00087 M A X _ E V E N T S = 2 00088 00089 } E V E N T S ; 00090 00091 H A N D L E e v e n t s [ M A X _ E V E N T S ] ; 00092 00093 H A N D L E b r o a d c a s t _ b l o c k _ e v e n t ; 00094 00095 } p t h r e a d _ c o n d _ t ; 00096 00097 00098 00099 t y p e d e f i n t p t h r e a d _ m u t e x a t t r _ t ; 00100 00101 # d e f i n e p t h r e a d _ s e l f ( ) G e t C u r r e n t T h r e a d I d ( ) 00102 00103 # d e f i n e p t h r e a d _ h a n d l e r _ t E X T E R N C v o i d * _ _ c d e c l 00104 00105 t y p e d e f v o i d * ( _ _ c d e c l * p t h r e a d _ h a n d l e r ) ( v o i d * ) ; 00106 00107 / * 00108 00109 S t r u c t a n d m a c r o s t o b e u s e d i n c o m b i n a t i o n w i t h t h e 00110 00111 w i n d o w s i m p l e m e n t a t i o n o f p t h r e a d _ c o n d _ t i m e d w a i t 00112 00113 * / 00114 00115 / * 00116 00117 D e c l a r e a u n i o n t o m a k e s u r e F I L E T I M E i s p r o p e r l y a l i g n e d 00118 00119 s o i t c a n b e u s e d d i r e c t l y a s a 6 4 b i t v a l u e . T h e v a l u e 00120 00121 s t o r e d i s i n 1 0 0 n s u n i t s . 00122 00123 * / 00124 00125 u n i o n f t 6 4 { 00126 00127 F I L E T I M E f t ; 00128 00129 _ _ i n t 6 4 i 6 4 ; 00130 00131 } ; 00132 00133 s t r u c t t i m e s p e c { 00134 00135 u n i o n f t 6 4 t v ; 00136 00137 / * T h e m a x t i m e o u t v a l u e i n m i l l i s e c o n d f o r p t h r e a d _ c o n d _ t i m e d w a i t * / 00138 00139 l o n g m a x _ t i m e o u t _ m s e c ; 00140 00141 } ; 00142 00143 # d e f i n e s e t _ t i m e s p e c _ t i m e _ n s e c ( A B S T I M E , T I M E , N S E C ) d o { \ 00144 00145 ( A B S T I M E ) . t v . i 6 4 = ( T I M E ) + ( _ _ i n t 6 4 ) ( N S E C ) / 1 0 0 ; \ 00146 00147 ( A B S T I M E ) . m a x _ t i m e o u t _ m s e c = ( l o n g ) ( ( N S E C ) / 1 0 0 0 0 0 0 ) ; \ 00148 00149 } w h i l e ( 0 ) 00150 00151 # d e f i n e s e t _ t i m e s p e c _ n s e c ( A B S T I M E , N S E C ) d o { \ 00152 00153 u n i o n f t 6 4 t v ; \ 00154 00155 G e t S y s t e m T i m e A s F i l e T i m e ( & t v . f t ) ; \ 00156 00157 s e t _ t i m e s p e c _ t i m e _ n s e c ( ( A B S T I M E ) , t v . i 6 4 , ( N S E C ) ) ; \ 00158 00159 } w h i l e ( 0 ) 00160 00161 i n t w i n _ p t h r e a d _ m u t e x _ t r y l o c k ( p t h r e a d _ m u t e x _ t * m u t e x ) ; 00162 00163 i n t p t h r e a d _ c r e a t e ( p t h r e a d _ t * , p t h r e a d _ a t t r _ t * , p t h r e a d _ h a n d l e r , v o i d * ) ; 00164 00165 i n t p t h r e a d _ c o n d _ i n i t ( p t h r e a d _ c o n d _ t * c o n d , c o n s t p t h r e a d _ c o n d a t t r _ t * a t t r ) ; 00166 00167 i n t p t h r e a d _ c o n d _ w a i t ( p t h r e a d _ c o n d _ t * c o n d , p t h r e a d _ m u t e x _ t * m u t e x ) ; 00168 00169 i n t p t h r e a d _ c o n d _ t i m e d w a i t ( p t h r e a d _ c o n d _ t * c o n d , p t h r e a d _ m u t e x _ t * m u t e x , 00170 00171 s t r u c t t i m e s p e c * a b s t i m e ) ; 00172 00173 i n t p t h r e a d _ c o n d _ s i g n a l ( p t h r e a d _ c o n d _ t * c o n d ) ; 00174 00175 i n t p t h r e a d _ c o n d _ b r o a d c a s t ( p t h r e a d _ c o n d _ t * c o n d ) ; 00176 00177 i n t p t h r e a d _ c o n d _ d e s t r o y ( p t h r e a d _ c o n d _ t * c o n d ) ; 00178 00179 i n t p t h r e a d _ a t t r _ i n i t ( p t h r e a d _ a t t r _ t * c o n n e c t _ a t t ) ; 00180 00181 i n t p t h r e a d _ a t t r _ s e t s t a c k s i z e ( p t h r e a d _ a t t r _ t * c o n n e c t _ a t t , D W O R D s t a c k ) ; 00182 00183 i n t p t h r e a d _ a t t r _ d e s t r o y ( p t h r e a d _ a t t r _ t * c o n n e c t _ a t t ) ; 00184 00185 s t r u c t t m * l o c a l t i m e _ r ( c o n s t t i m e _ t * t i m e p , s t r u c t t m * t m p ) ; 00186 00187 s t r u c t t m * g m t i m e _ r ( c o n s t t i m e _ t * t i m e p , s t r u c t t m * t m p ) ; 00188 00189 v o i d p t h r e a d _ e x i t ( v o i d * a ) ; 00190 00191 i n t p t h r e a d _ j o i n ( p t h r e a d _ t t h r e a d , v o i d * * v a l u e _ p t r ) ; 00192 00193 00194 00195 # d e f i n e E T I M E D O U T 1 4 5 / * W i n 3 2 d o e s n ' t h a v e t h i s * / 00196 00197 # d e f i n e H A V E _ L O C A L T I M E _ R 1 00198 00199 # d e f i n e _ R E E N T R A N T 1 00200 00201 # d e f i n e H A V E _ P T H R E A D _ A T T R _ S E T S T A C K S I Z E 1 00202 00203 00204 00205 # u n d e f S A F E _ M U T E X / * T h i s w i l l c a u s e c o n f l i c t s * / 00206 00207 # d e f i n e p t h r e a d _ k e y ( T , V ) D W O R D V 00208 00209 # d e f i n e p t h r e a d _ k e y _ c r e a t e ( A , B ) ( ( * A = T l s A l l o c ( ) ) = = 0 x F F F F F F F F ) 00210 00211 # d e f i n e p t h r e a d _ k e y _ d e l e t e ( A ) T l s F r e e ( A ) 00212 00213 # d e f i n e m y _ p t h r e a d _ s e t s p e c i f i c _ p t r ( T , V ) ( ! T l s S e t V a l u e ( ( T ) , ( V ) ) ) 00214 00215 # d e f i n e p t h r e a d _ s e t s p e c i f i c ( A , B ) ( ! T l s S e t V a l u e ( ( A ) , ( B ) ) ) 00216 00217 # d e f i n e p t h r e a d _ g e t s p e c i f i c ( A ) ( T l s G e t V a l u e ( A ) ) 00218 00219 # d e f i n e m y _ p t h r e a d _ g e t s p e c i f i c ( T , A ) ( ( T ) T l s G e t V a l u e ( A ) ) 00220 00221 # d e f i n e m y _ p t h r e a d _ g e t s p e c i f i c _ p t r ( T , V ) ( ( T ) T l s G e t V a l u e ( V ) ) 00222 00223 # d e f i n e p t h r e a d _ e q u a l ( A , B ) ( ( A ) = = ( B ) ) 00224 00225 # d e f i n e p t h r e a d _ m u t e x _ i n i t ( A , B ) ( I n i t i a l i z e C r i t i c a l S e c t i o n ( A ) , 0 ) 00226 00227 # d e f i n e p t h r e a d _ m u t e x _ l o c k ( A ) ( E n t e r C r i t i c a l S e c t i o n ( A ) , 0 ) 00228 00229 # d e f i n e p t h r e a d _ m u t e x _ t r y l o c k ( A ) w i n _ p t h r e a d _ m u t e x _ t r y l o c k ( ( A ) ) 00230 00231 # d e f i n e p t h r e a d _ m u t e x _ u n l o c k ( A ) ( L e a v e C r i t i c a l S e c t i o n ( A ) , 0 ) 00232 00233 # d e f i n e p t h r e a d _ m u t e x _ d e s t r o y ( A ) D e l e t e C r i t i c a l S e c t i o n ( A ) 00234 00235 # d e f i n e p t h r e a d _ k i l l ( A , B ) p t h r e a d _ d u m m y ( ( A ) ? 0 : E S R C H ) 00236 00237 00238 00239 / * D u m m y d e f i n e s f o r e a s i e r c o d e * / 00240 00241 # d e f i n e p t h r e a d _ a t t r _ s e t d e t a c h s t a t e ( A , B ) p t h r e a d _ d u m m y ( 0 ) 00242 00243 # d e f i n e p t h r e a d _ a t t r _ s e t s c o p e ( A , B ) 00244 00245 # d e f i n e p t h r e a d _ d e t a c h _ t h i s _ t h r e a d ( ) 00246 00247 # d e f i n e p t h r e a d _ c o n d a t t r _ i n i t ( A ) 00248 00249 # d e f i n e p t h r e a d _ c o n d a t t r _ d e s t r o y ( A ) 00250 00251 # d e f i n e p t h r e a d _ y i e l d ( ) S w i t c h T o T h r e a d ( ) 00252 00253 00254 00255 # e l s e / * N o r m a l t h r e a d s * / 00256 00257 # i f d e f H A V E _ r t s _ t h r e a d s 00258 00259 # d e f i n e s i g w a i t o r g _ s i g w a i t 00260 00261 # i n c l u d e < s i g n a l . h > 00262 00263 # u n d e f s i g w a i t 00264 00265 # e n d i f 00266 00267 # i n c l u d e < p t h r e a d . h > 00268 00269 # i f n d e f _ R E E N T R A N T 00270 00271 # d e f i n e _ R E E N T R A N T 00272 00273 # e n d i f 00274 00275 # i f d e f H A V E _ T H R _ S E T C O N C U R R E N C Y 00276 00277 # i n c l u d e < t h r e a d . h > / * P r o b a b l y s o l a r i s * / 00278 00279 # e n d i f 00280 00281 # i f d e f H A V E _ S C H E D _ H 00282 00283 # i n c l u d e < s c h e d . h > 00284 00285 # e n d i f 00286 00287 # i f d e f H A V E _ S Y N C H _ H 00288 00289 # i n c l u d e < s y n c h . h > 00290 00291 # e n d i f 00292 00293 # i f d e f _ _ N E T W A R E _ _ 00294 00295 v o i d m y _ p t h r e a d _ e x i t ( v o i d * s t a t u s ) ; 00296 00297 # d e f i n e p t h r e a d _ e x i t ( A ) m y _ p t h r e a d _ e x i t ( A ) 00298 00299 # e n d i f 00300 00301 # d e f i n e p t h r e a d _ k e y ( T , V ) p t h r e a d _ k e y _ t V 00302 00303 # d e f i n e m y _ p t h r e a d _ g e t s p e c i f i c _ p t r ( T , V ) m y _ p t h r e a d _ g e t s p e c i f i c ( T , ( V ) ) 00304 00305 # d e f i n e m y _ p t h r e a d _ s e t s p e c i f i c _ p t r ( T , V ) p t h r e a d _ s e t s p e c i f i c ( T , ( v o i d * ) ( V ) ) 00306 00307 # d e f i n e p t h r e a d _ d e t a c h _ t h i s _ t h r e a d ( ) 00308 00309 # d e f i n e p t h r e a d _ h a n d l e r _ t E X T E R N C v o i d * 00310 00311 t y p e d e f v o i d * ( * p t h r e a d _ h a n d l e r ) ( v o i d * ) ; 00312 00313 / * T e s t f i r s t f o r R T S o r F S U t h r e a d s * / 00314 00315 # i f d e f i n e d ( P T H R E A D _ S C O P E _ G L O B A L ) & & ! d e f i n e d ( P T H R E A D _ S C O P E _ S Y S T E M ) 00316 00317 # d e f i n e H A V E _ r t s _ t h r e a d s 00318 00319 e x t e r n i n t m y _ p t h r e a d _ c r e a t e _ d e t a c h e d ; 00320 00321 # d e f i n e p t h r e a d _ s i g m a s k ( A , B , C ) s i g p r o c m a s k ( ( A ) , ( B ) , ( C ) ) 00322 00323 # d e f i n e P T H R E A D _ C R E A T E _ D E T A C H E D & m y _ p t h r e a d _ c r e a t e _ d e t a c h e d 00324 00325 # d e f i n e P T H R E A D _ S C O P E _ S Y S T E M P T H R E A D _ S C O P E _ G L O B A L 00326 00327 # d e f i n e P T H R E A D _ S C O P E _ P R O C E S S P T H R E A D _ S C O P E _ L O C A L 00328 00329 # d e f i n e U S E _ A L A R M _ T H R E A D 00330 00331 # e n d i f / * d e f i n e d ( P T H R E A D _ S C O P E _ G L O B A L ) & & ! d e f i n e d ( P T H R E A D _ S C O P E _ S Y S T E M ) * / 00332 00333 # i f d e f i n e d ( _ B S D I _ V E R S I O N ) & & _ B S D I _ V E R S I O N < 1 9 9 9 1 0 00334 00335 i n t s i g w a i t ( s i g s e t _ t * s e t , i n t * s i g ) ; 00336 00337 # e n d i f 00338 00339 # i f n d e f H A V E _ N O N P O S I X _ S I G W A I T 00340 00341 # d e f i n e m y _ s i g w a i t ( A , B ) s i g w a i t ( ( A ) , ( B ) ) 00342 00343 # e l s e 00344 00345 i n t m y _ s i g w a i t ( c o n s t s i g s e t _ t * s e t , i n t * s i g ) ; 00346 00347 # e n d i f 00348 00349 # i f d e f H A V E _ N O N P O S I X _ P T H R E A D _ M U T E X _ I N I T 00350 00351 # i f n d e f S A F E _ M U T E X 00352 00353 # d e f i n e p t h r e a d _ m u t e x _ i n i t ( a , b ) m y _ p t h r e a d _ m u t e x _ n o p o s i x _ i n i t ( ( a ) , ( b ) ) 00354 00355 e x t e r n i n t m y _ p t h r e a d _ m u t e x _ n o p o s i x _ i n i t ( p t h r e a d _ m u t e x _ t * m p , 00356 00357 c o n s t p t h r e a d _ m u t e x a t t r _ t * a t t r ) ; 00358 00359 # e n d i f / * S A F E _ M U T E X * / 00360 00361 # d e f i n e p t h r e a d _ c o n d _ i n i t ( a , b ) m y _ p t h r e a d _ c o n d _ n o p o s i x _ i n i t ( ( a ) , ( b ) ) 00362 00363 e x t e r n i n t m y _ p t h r e a d _ c o n d _ n o p o s i x _ i n i t ( p t h r e a d _ c o n d _ t * m p , 00364 00365 c o n s t p t h r e a d _ c o n d a t t r _ t * a t t r ) ; 00366 00367 # e n d i f / * H A V E _ N O N P O S I X _ P T H R E A D _ M U T E X _ I N I T * / 00368 00369 # i f d e f i n e d ( H A V E _ S I G T H R E A D M A S K ) & & ! d e f i n e d ( H A V E _ P T H R E A D _ S I G M A S K ) 00370 00371 # d e f i n e p t h r e a d _ s i g m a s k ( A , B , C ) s i g t h r e a d m a s k ( ( A ) , ( B ) , ( C ) ) 00372 00373 # e n d i f 00374 00375 # i f ! d e f i n e d ( H A V E _ S I G W A I T ) & & ! d e f i n e d ( H A V E _ r t s _ t h r e a d s ) & & ! d e f i n e d ( s i g w a i t ) & & ! d e f i n e d ( a l p h a _ l i n u x _ p o r t ) & & ! d e f i n e d ( H A V E _ N O N P O S I X _ S I G W A I T ) & & ! d e f i n e d ( H A V E _ D E C _ 3 _ 2 _ T H R E A D S ) & & ! d e f i n e d ( _ A I X ) 00376 00377 i n t s i g w a i t ( s i g s e t _ t * s e t p , i n t * s i g p ) ; / * U s e o u r i m p l e m e n t i o n * / 00378 00379 # e n d i f 00380 00381 00382 00383 / * 00384 00385 W e d e f i n e m y _ s i g s e t ( ) a n d u s e t h a t i n s t e a d o f t h e s y s t e m s i g s e t ( ) s o t h a t 00386 00387 w e c a n f a v o r a n i m p l e m e n t a t i o n b a s e d o n s i g a c t i o n ( ) . O n s o m e s y s t e m s , s u c h 00388 00389 a s M a c O S X , s i g s e t ( ) r e s u l t s i n f l a g s s u c h a s S A _ R E S T A R T b e i n g s e t , a n d 00390 00391 w e w a n t t o m a k e s u r e t h a t n o s u c h f l a g s a r e s e t . 00392 00393 * / 00394 00395 # i f d e f i n e d ( H A V E _ S I G A C T I O N ) & & ! d e f i n e d ( m y _ s i g s e t ) 00396 00397 # d e f i n e m y _ s i g s e t ( A , B ) d o { s t r u c t s i g a c t i o n l _ s ; s i g s e t _ t l _ s e t ; i n t l _ r c ; \ 00398 00399 D B U G _ A S S E R T ( ( A ) ! = 0 ) ; \ 00400 00401 s i g e m p t y s e t ( & l _ s e t ) ; \ 00402 00403 l _ s . s a _ h a n d l e r = ( B ) ; \ 00404 00405 l _ s . s a _ m a s k = l _ s e t ; \ 00406 00407 l _ s . s a _ f l a g s = 0 ; \ 00408 00409 l _ r c = s i g a c t i o n ( ( A ) , & l _ s , ( s t r u c t s i g a c t i o n * ) N U L L ) ; \ 00410 00411 D B U G _ A S S E R T ( l _ r c = = 0 ) ; \ 00412 00413 } w h i l e ( 0 ) 00414 00415 # e l i f d e f i n e d ( H A V E _ S I G S E T ) & & ! d e f i n e d ( m y _ s i g s e t ) 00416 00417 # d e f i n e m y _ s i g s e t ( A , B ) s i g s e t ( ( A ) , ( B ) ) 00418 00419 # e l i f ! d e f i n e d ( m y _ s i g s e t ) 00420 00421 # d e f i n e m y _ s i g s e t ( A , B ) s i g n a l ( ( A ) , ( B ) ) 00422 00423 # e n d i f 00424 00425 # i f ! d e f i n e d ( H A V E _ P T H R E A D _ A T T R _ S E T S C O P E ) | | d e f i n e d ( H A V E _ D E C _ 3 _ 2 _ T H R E A D S ) 00426 00427 # d e f i n e p t h r e a d _ a t t r _ s e t s c o p e ( A , B ) 00428 00429 # u n d e f H A V E _ G E T H O S T B Y A D D R _ R / * N o d e f i n i t i o n * / 00430 00431 # e n d i f 00432 00433 # i f d e f i n e d ( H A V E _ B R O K E N _ P T H R E A D _ C O N D _ T I M E D W A I T ) & & ! d e f i n e d ( S A F E _ M U T E X ) 00434 00435 e x t e r n i n t m y _ p t h r e a d _ c o n d _ t i m e d w a i t ( p t h r e a d _ c o n d _ t * c o n d , 00436 00437 p t h r e a d _ m u t e x _ t * m u t e x , 00438 00439 s t r u c t t i m e s p e c * a b s t i m e ) ; 00440 00441 # d e f i n e p t h r e a d _ c o n d _ t i m e d w a i t ( A , B , C ) m y _ p t h r e a d _ c o n d _ t i m e d w a i t ( ( A ) , ( B ) , ( C ) ) 00442 00443 # e n d i f 00444 00445 # i f ! d e f i n e d ( H A V E _ N O N P O S I X _ P T H R E A D _ G E T S P E C I F I C ) 00446 00447 # d e f i n e m y _ p t h r e a d _ g e t s p e c i f i c ( A , B ) ( ( A ) p t h r e a d _ g e t s p e c i f i c ( B ) ) 00448 00449 # e l s e 00450 00451 # d e f i n e m y _ p t h r e a d _ g e t s p e c i f i c ( A , B ) ( ( A ) m y _ p t h r e a d _ g e t s p e c i f i c _ i m p ( B ) ) 00452 00453 v o i d * m y _ p t h r e a d _ g e t s p e c i f i c _ i m p ( p t h r e a d _ k e y _ t k e y ) ; 00454 00455 # e n d i f 00456 00457 # i f n d e f H A V E _ L O C A L T I M E _ R 00458 00459 s t r u c t t m * l o c a l t i m e _ r ( c o n s t t i m e _ t * c l o c k , s t r u c t t m * r e s ) ; 00460 00461 # e n d i f 00462 00463 # i f n d e f H A V E _ G M T I M E _ R 00464 00465 s t r u c t t m * g m t i m e _ r ( c o n s t t i m e _ t * c l o c k , s t r u c t t m * r e s ) ; 00466 00467 # e n d i f 00468 00469 # i f d e f H A V E _ P T H R E A D _ C O N D A T T R _ C R E A T E 00470 00471 / * D C E t h r e a d s o n H P U X 1 0 . 2 0 * / 00472 00473 # d e f i n e p t h r e a d _ c o n d a t t r _ i n i t p t h r e a d _ c o n d a t t r _ c r e a t e 00474 00475 # d e f i n e p t h r e a d _ c o n d a t t r _ d e s t r o y p t h r e a d _ c o n d a t t r _ d e l e t e 00476 00477 # e n d i f 00478 00479 / * F S U T H R E A D S * / 00480 00481 # i f ! d e f i n e d ( H A V E _ P T H R E A D _ K E Y _ D E L E T E ) & & ! d e f i n e d ( p t h r e a d _ k e y _ d e l e t e ) 00482 00483 # d e f i n e p t h r e a d _ k e y _ d e l e t e ( A ) p t h r e a d _ d u m m y ( 0 ) 00484 00485 # e n d i f 00486 00487 # i f ( ( d e f i n e d ( H A V E _ P T H R E A D _ A T T R _ C R E A T E ) & & ! d e f i n e d ( H A V E _ S I G W A I T ) ) | | d e f i n e d ( H A V E _ D E C _ 3 _ 2 _ T H R E A D S ) ) 00488 00489 / * T h i s i s s e t o n A I X _ 3 _ 2 a n d S i e m e n s u n i x ( a n d D E C O S F / 1 3 . 2 t o o ) * / 00490 00491 # d e f i n e p t h r e a d _ k e y _ c r e a t e ( A , B ) \ 00492 00493 p t h r e a d _ k e y c r e a t e ( A , ( B ) ? \ 00494 00495 ( p t h r e a d _ d e s t r u c t o r _ t ) ( B ) : \ 00496 00497 ( p t h r e a d _ d e s t r u c t o r _ t ) p t h r e a d _ d u m m y ) 00498 00499 # d e f i n e p t h r e a d _ a t t r _ i n i t ( A ) p t h r e a d _ a t t r _ c r e a t e ( A ) 00500 00501 # d e f i n e p t h r e a d _ a t t r _ d e s t r o y ( A ) p t h r e a d _ a t t r _ d e l e t e ( A ) 00502 00503 # d e f i n e p t h r e a d _ a t t r _ s e t d e t a c h s t a t e ( A , B ) p t h r e a d _ d u m m y ( 0 ) 00504 00505 # d e f i n e p t h r e a d _ c r e a t e ( A , B , C , D ) p t h r e a d _ c r e a t e ( ( A ) , * ( B ) , ( C ) , ( D ) ) 00506 00507 # i f n d e f p t h r e a d _ s i g m a s k 00508 00509 # d e f i n e p t h r e a d _ s i g m a s k ( A , B , C ) s i g p r o c m a s k ( ( A ) , ( B ) , ( C ) ) 00510 00511 # e n d i f 00512 00513 # d e f i n e p t h r e a d _ k i l l ( A , B ) p t h r e a d _ d u m m y ( ( A ) ? 0 : E S R C H ) 00514 00515 # u n d e f p t h r e a d _ d e t a c h _ t h i s _ t h r e a d 00516 00517 # d e f i n e p t h r e a d _ d e t a c h _ t h i s _ t h r e a d ( ) { p t h r e a d _ t t m p = p t h r e a d _ s e l f ( ) ; p t h r e a d _ d e t a c h ( & t m p ) ; } 00518 00519 # e l i f ! d e f i n e d ( _ _ N E T W A R E _ _ ) / * H A V E _ P T H R E A D _ A T T R _ C R E A T E & & ! H A V E _ S I G W A I T * / 00520 00521 # i f n d e f H A V E _ P T H R E A D _ K I L L 00522 00523 # d e f i n e H A V E _ P T H R E A D _ K I L L 00524 00525 # e n d i f 00526 00527 # e n d i f 00528 00529 # e n d i f / * d e f i n e d ( _ _ W I N _ _ ) * / 00530 00531 # i f d e f i n e d ( H P U X 1 0 ) & & ! d e f i n e d ( D O N T _ R E M A P _ P T H R E A D _ F U N C T I O N S ) 00532 00533 # u n d e f p t h r e a d _ c o n d _ t i m e d w a i t 00534 00535 # d e f i n e p t h r e a d _ c o n d _ t i m e d w a i t ( a , b , c ) m y _ p t h r e a d _ c o n d _ t i m e d w a i t ( ( a ) , ( b ) , ( c ) ) 00536 00537 i n t m y _ p t h r e a d _ c o n d _ t i m e d w a i t ( p t h r e a d _ c o n d _ t * c o n d , p t h r e a d _ m u t e x _ t * m u t e x , 00538 00539 s t r u c t t i m e s p e c * a b s t i m e ) ; 00540 00541 # e n d i f 00542 00543 # i f d e f i n e d ( H P U X 1 0 ) 00544 00545 # d e f i n e p t h r e a d _ a t t r _ g e t s t a c k s i z e ( A , B ) m y _ p t h r e a d _ a t t r _ g e t s t a c k s i z e ( A , B ) 00546 00547 v o i d m y _ p t h r e a d _ a t t r _ g e t s t a c k s i z e ( p t h r e a d _ a t t r _ t * a t t r i b , s i z e _ t * s i z e ) ; 00548 00549 # e n d i f 00550 00551 # i f d e f i n e d ( H A V E _ P O S I X 1 0 0 3 _ 4 a _ M U T E X ) & & ! d e f i n e d ( D O N T _ R E M A P _ P T H R E A D _ F U N C T I O N S ) 00552 00553 # u n d e f p t h r e a d _ m u t e x _ t r y l o c k 00554 00555 # d e f i n e p t h r e a d _ m u t e x _ t r y l o c k ( a ) m y _ p t h r e a d _ m u t e x _ t r y l o c k ( ( a ) ) 00556 00557 i n t m y _ p t h r e a d _ m u t e x _ t r y l o c k ( p t h r e a d _ m u t e x _ t * m u t e x ) ; 00558 00559 # e n d i f 00560 00561 # i f ! d e f i n e d ( H A V E _ P T H R E A D _ Y I E L D _ O N E _ A R G ) & & ! d e f i n e d ( H A V E _ P T H R E A D _ Y I E L D _ Z E R O _ A R G ) 00562 00563 / * n o p t h r e a d _ y i e l d ( ) a v a i l a b l e * / 00564 00565 # i f d e f H A V E _ S C H E D _ Y I E L D 00566 00567 # d e f i n e p t h r e a d _ y i e l d ( ) s c h e d _ y i e l d ( ) 00568 00569 # e l i f d e f i n e d ( H A V E _ P T H R E A D _ Y I E L D _ N P ) / * c a n b e M a c O S X * / 00570 00571 # d e f i n e p t h r e a d _ y i e l d ( ) p t h r e a d _ y i e l d _ n p ( ) 00572 00573 # e l i f d e f i n e d ( H A V E _ T H R _ Y I E L D ) 00574 00575 # d e f i n e p t h r e a d _ y i e l d ( ) t h r _ y i e l d ( ) 00576 00577 # e n d i f 00578 00579 # e n d i f 00580 00581 / * 00582 00583 T h e d e f i n e s s e t _ t i m e s p e c a n d s e t _ t i m e s p e c _ n s e c s h o u l d b e u s e d 00584 00585 f o r c a l c u l a t i n g a n a b s o l u t e t i m e a t w h i c h 00586 00587 p t h r e a d _ c o n d _ t i m e d w a i t s h o u l d t i m e o u t 00588 00589 * / 00590 00591 # d e f i n e s e t _ t i m e s p e c ( A B S T I M E , S E C ) s e t _ t i m e s p e c _ n s e c ( ( A B S T I M E ) , ( S E C ) * 1 0 0 0 0 0 0 0 0 0 U L L ) 00592 00593 # i f n d e f s e t _ t i m e s p e c _ n s e c 00594 00595 # d e f i n e s e t _ t i m e s p e c _ n s e c ( A B S T I M E , N S E C ) \ 00596 00597 s e t _ t i m e s p e c _ t i m e _ n s e c ( ( A B S T I M E ) , m y _ g e t s y s t i m e ( ) , ( N S E C ) ) 00598 00599 # e n d i f / * ! s e t _ t i m e s p e c _ n s e c * / 00600 00601 / * a d a p t f o r t w o d i f f e r e n t f l a v o r s o f s t r u c t t i m e s p e c * / 00602 00603 # i f d e f H A V E _ T I M E S P E C _ T S _ S E C 00604 00605 # d e f i n e M Y _ t v _ s e c t s _ s e c 00606 00607 # d e f i n e M Y _ t v _ n s e c t s _ n s e c 00608 00609 # e l s e 00610 00611 # d e f i n e M Y _ t v _ s e c t v _ s e c 00612 00613 # d e f i n e M Y _ t v _ n s e c t v _ n s e c 00614 00615 # e n d i f / * H A V E _ T I M E S P E C _ T S _ S E C * / 00616 00617 # i f n d e f s e t _ t i m e s p e c _ t i m e _ n s e c 00618 00619 # d e f i n e s e t _ t i m e s p e c _ t i m e _ n s e c ( A B S T I M E , T I M E , N S E C ) d o { \ 00620 00621 u l o n g l o n g n s e c = ( N S E C ) ; \ 00622 00623 u l o n g l o n g n o w = ( T I M E ) + ( n s e c / 1 0 0 ) ; \ 00624 00625 ( A B S T I M E ) . M Y _ t v _ s e c = ( n o w / 1 0 0 0 0 0 0 0 U L L ) ; \ 00626 00627 ( A B S T I M E ) . M Y _ t v _ n s e c = ( n o w % 1 0 0 0 0 0 0 0 U L L * 1 0 0 + ( n s e c % 1 0 0 ) ) ; \ 00628 00629 } w h i l e ( 0 ) 00630 00631 # e n d i f / * ! s e t _ t i m e s p e c _ t i m e _ n s e c * / 00632 00633 / * s a f e _ m u t e x a d d s c h e c k i n g t o m u t e x f o r e a s i e r d e b u g g i n g * / 00634 00635 # i f d e f i n e d ( _ _ N E T W A R E _ _ ) & & ! d e f i n e d ( S A F E _ M U T E X _ D E T E C T _ D E S T R O Y ) 00636 00637 # d e f i n e S A F E _ M U T E X _ D E T E C T _ D E S T R O Y 00638 00639 # e n d i f 00640 00641 s t r u c t s t _ h a s h ; 00642 00643 t y p e d e f s t r u c t s t _ s a f e _ m u t e x _ t 00644 00645 { 00646 00647 p t h r e a d _ m u t e x _ t g l o b a l , m u t e x ; 00648 00649 c o n s t c h a r * f i l e , * n a m e ; 00650 00651 u i n t l i n e , c o u n t ; 00652 00653 m y f c r e a t e _ f l a g s , a c t i v e _ f l a g s ; 00654 00655 u l o n g i d ; 00656 00657 p t h r e a d _ t t h r e a d ; 00658 00659 s t r u c t s t _ h a s h * l o c k e d _ m u t e x , * u s e d _ m u t e x ; 00660 00661 s t r u c t s t _ s a f e _ m u t e x _ t * p r e v , * n e x t ; 00662 00663 # i f d e f S A F E _ M U T E X _ D E T E C T _ D E S T R O Y 00664 00665 s t r u c t s t _ s a f e _ m u t e x _ i n f o _ t * i n f o ; / * t o t r a c k d e s t r o y i n g o f m u t e x e s * / 00666 00667 # e n d i f 00668 00669 } s a f e _ m u t e x _ t ; 00670 00671 t y p e d e f s t r u c t s t _ s a f e _ m u t e x _ d e a d l o c k _ t 00672 00673 { 00674 00675 c o n s t c h a r * f i l e , * n a m e ; 00676 00677 s a f e _ m u t e x _ t * m u t e x ; 00678 00679 u i n t l i n e ; 00680 00681 u l o n g c o u n t ; 00682 00683 u l o n g i d ; 00684 00685 m y _ b o o l w a r n i n g _ o n l y ; 00686 00687 } s a f e _ m u t e x _ d e a d l o c k _ t ; 00688 00689 # i f d e f S A F E _ M U T E X _ D E T E C T _ D E S T R O Y 00690 00691 / * 00692 00693 U s e d t o t r a c k t h e d e s t r o y i n g o f m u t e x e s . T h i s n e e d s t o b e a s e p e r a t e 00694 00695 s t r u c t u r e b e c a u s e t h e s a f e _ m u t e x _ t s t r u c t u r e c o u l d b e f r e e d b e f o r e 00696 00697 t h e m u t e x e s a r e d e s t r o y e d . 00698 00699 * / 00700 00701 t y p e d e f s t r u c t s t _ s a f e _ m u t e x _ i n f o _ t 00702 00703 { 00704 00705 s t r u c t s t _ s a f e _ m u t e x _ i n f o _ t * n e x t ; 00706 00707 s t r u c t s t _ s a f e _ m u t e x _ i n f o _ t * p r e v ; 00708 00709 c o n s t c h a r * i n i t _ f i l e ; 00710 00711 u i n t 3 2 i n i t _ l i n e ; 00712 00713 } s a f e _ m u t e x _ i n f o _ t ; 00714 00715 # e n d i f / * S A F E _ M U T E X _ D E T E C T _ D E S T R O Y * / 00716 00717 i n t s a f e _ m u t e x _ i n i t ( s a f e _ m u t e x _ t * m p , c o n s t p t h r e a d _ m u t e x a t t r _ t * a t t r , 00718 00719 c o n s t c h a r * n a m e , m y f m y _ f l a g s , 00720 00721 c o n s t c h a r * f i l e , u i n t l i n e ) ; 00722 00723 i n t s a f e _ m u t e x _ l o c k ( s a f e _ m u t e x _ t * m p , m y f m y _ f l a g s , c o n s t c h a r * f i l e , 00724 00725 u i n t l i n e ) ; 00726 00727 i n t s a f e _ m u t e x _ u n l o c k ( s a f e _ m u t e x _ t * m p , c o n s t c h a r * f i l e , u i n t l i n e ) ; 00728 00729 i n t s a f e _ m u t e x _ d e s t r o y ( s a f e _ m u t e x _ t * m p , c o n s t c h a r * f i l e , u i n t l i n e ) ; 00730 00731 i n t s a f e _ c o n d _ w a i t ( p t h r e a d _ c o n d _ t * c o n d , s a f e _ m u t e x _ t * m p , c o n s t c h a r * f i l e , 00732 00733 u i n t l i n e ) ; 00734 00735 i n t s a f e _ c o n d _ t i m e d w a i t ( p t h r e a d _ c o n d _ t * c o n d , s a f e _ m u t e x _ t * m p , 00736 00737 s t r u c t t i m e s p e c * a b s t i m e , c o n s t c h a r * f i l e , u i n t l i n e ) ; 00738 00739 v o i d s a f e _ m u t e x _ g l o b a l _ i n i t ( v o i d ) ; 00740 00741 v o i d s a f e _ m u t e x _ e n d ( F I L E * f i l e ) ; 00742 00743 v o i d s a f e _ m u t e x _ f r e e _ d e a d l o c k _ d a t a ( s a f e _ m u t e x _ t * m p ) ; 00744 00745 / * W r a p p e r s i f s a f e m u t e x i s a c t u a l l y u s e d * / 00746 00747 # d e f i n e M Y F _ T R Y _ L O C K 1 00748 00749 # d e f i n e M Y F _ N O _ D E A D L O C K _ D E T E C T I O N 2 00750 00751 # i f d e f S A F E _ M U T E X 00752 00753 # u n d e f p t h r e a d _ m u t e x _ i n i t 00754 00755 # u n d e f p t h r e a d _ m u t e x _ l o c k 00756 00757 # u n d e f p t h r e a d _ m u t e x _ u n l o c k 00758 00759 # u n d e f p t h r e a d _ m u t e x _ d e s t r o y 00760 00761 # u n d e f p t h r e a d _ m u t e x _ w a i t 00762 00763 # u n d e f p t h r e a d _ m u t e x _ t i m e d w a i t 00764 00765 # u n d e f p t h r e a d _ m u t e x _ t 00766 00767 # u n d e f p t h r e a d _ c o n d _ w a i t 00768 00769 # u n d e f p t h r e a d _ c o n d _ t i m e d w a i t 00770 00771 # u n d e f p t h r e a d _ m u t e x _ t r y l o c k 00772 00773 # d e f i n e m y _ p t h r e a d _ m u t e x _ i n i t ( A , B , C , D ) s a f e _ m u t e x _ i n i t ( ( A ) , ( B ) , ( C ) , ( D ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00774 00775 # d e f i n e p t h r e a d _ m u t e x _ i n i t ( A , B ) s a f e _ m u t e x _ i n i t ( ( A ) , ( B ) , # A , 0 , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00776 00777 # d e f i n e p t h r e a d _ m u t e x _ l o c k ( A ) s a f e _ m u t e x _ l o c k ( ( A ) , 0 , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00778 00779 # d e f i n e m y _ p t h r e a d _ m u t e x _ l o c k ( A , B ) s a f e _ m u t e x _ l o c k ( ( A ) , ( B ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00780 00781 # d e f i n e p t h r e a d _ m u t e x _ u n l o c k ( A ) s a f e _ m u t e x _ u n l o c k ( ( A ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00782 00783 # d e f i n e p t h r e a d _ m u t e x _ d e s t r o y ( A ) s a f e _ m u t e x _ d e s t r o y ( ( A ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00784 00785 # d e f i n e p t h r e a d _ c o n d _ w a i t ( A , B ) s a f e _ c o n d _ w a i t ( ( A ) , ( B ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00786 00787 # d e f i n e p t h r e a d _ c o n d _ t i m e d w a i t ( A , B , C ) s a f e _ c o n d _ t i m e d w a i t ( ( A ) , ( B ) , ( C ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00788 00789 # d e f i n e p t h r e a d _ m u t e x _ t r y l o c k ( A ) s a f e _ m u t e x _ l o c k ( ( A ) , M Y F _ T R Y _ L O C K , _ _ F I L E _ _ , _ _ L I N E _ _ ) 00790 00791 # d e f i n e p t h r e a d _ m u t e x _ t s a f e _ m u t e x _ t 00792 00793 # d e f i n e s a f e _ m u t e x _ a s s e r t _ o w n e r ( m p ) \ 00794 00795 D B U G _ A S S E R T ( ( m p ) - > c o u n t > 0 & & \ 00796 00797 p t h r e a d _ e q u a l ( p t h r e a d _ s e l f ( ) , ( m p ) - > t h r e a d ) ) 00798 00799 # d e f i n e s a f e _ m u t e x _ a s s e r t _ n o t _ o w n e r ( m p ) \ 00800 00801 D B U G _ A S S E R T ( ! ( m p ) - > c o u n t | | \ 00802 00803 ! p t h r e a d _ e q u a l ( p t h r e a d _ s e l f ( ) , ( m p ) - > t h r e a d ) ) 00804 00805 # e l s e 00806 00807 # d e f i n e m y _ p t h r e a d _ m u t e x _ i n i t ( A , B , C , D ) p t h r e a d _ m u t e x _ i n i t ( ( A ) , ( B ) ) 00808 00809 # d e f i n e m y _ p t h r e a d _ m u t e x _ l o c k ( A , B ) p t h r e a d _ m u t e x _ l o c k ( A ) 00810 00811 # d e f i n e s a f e _ m u t e x _ a s s e r t _ o w n e r ( m p ) 00812 00813 # d e f i n e s a f e _ m u t e x _ a s s e r t _ n o t _ o w n e r ( m p ) 00814 00815 # e n d i f / * S A F E _ M U T E X * / 00816 00817 # i f d e f i n e d ( M Y _ P T H R E A D _ F A S T M U T E X ) & & ! d e f i n e d ( S A F E _ M U T E X ) 00818 00819 t y p e d e f s t r u c t s t _ m y _ p t h r e a d _ f a s t m u t e x _ t 00820 00821 { 00822 00823 p t h r e a d _ m u t e x _ t m u t e x ; 00824 00825 u i n t s p i n s ; 00826 00827 u i n t r n g _ s t a t e ; 00828 00829 } m y _ p t h r e a d _ f a s t m u t e x _ t ; 00830 00831 v o i d f a s t m u t e x _ g l o b a l _ i n i t ( v o i d ) ; 00832 00833 i n t m y _ p t h r e a d _ f a s t m u t e x _ i n i t ( m y _ p t h r e a d _ f a s t m u t e x _ t * m p , 00834 00835 c o n s t p t h r e a d _ m u t e x a t t r _ t * a t t r ) ; 00836 00837 i n t m y _ p t h r e a d _ f a s t m u t e x _ l o c k ( m y _ p t h r e a d _ f a s t m u t e x _ t * m p ) ; 00838 00839 # u n d e f p t h r e a d _ m u t e x _ i n i t 00840 00841 # u n d e f p t h r e a d _ m u t e x _ l o c k 00842 00843 # u n d e f p t h r e a d _ m u t e x _ u n l o c k 00844 00845 # u n d e f p t h r e a d _ m u t e x _ d e s t r o y 00846 00847 # u n d e f p t h r e a d _ m u t e x _ w a i t 00848 00849 # u n d e f p t h r e a d _ m u t e x _ t i m e d w a i t 00850 00851 # u n d e f p t h r e a d _ m u t e x _ t 00852 00853 # u n d e f p t h r e a d _ c o n d _ w a i t 00854 00855 # u n d e f p t h r e a d _ c o n d _ t i m e d w a i t 00856 00857 # u n d e f p t h r e a d _ m u t e x _ t r y l o c k 00858 00859 # d e f i n e p t h r e a d _ m u t e x _ i n i t ( A , B ) m y _ p t h r e a d _ f a s t m u t e x _ i n i t ( ( A ) , ( B ) ) 00860 00861 # d e f i n e p t h r e a d _ m u t e x _ l o c k ( A ) m y _ p t h r e a d _ f a s t m u t e x _ l o c k ( A ) 00862 00863 # d e f i n e p t h r e a d _ m u t e x _ u n l o c k ( A ) p t h r e a d _ m u t e x _ u n l o c k ( & ( A ) - > m u t e x ) 00864 00865 # d e f i n e p t h r e a d _ m u t e x _ d e s t r o y ( A ) p t h r e a d _ m u t e x _ d e s t r o y ( & ( A ) - > m u t e x ) 00866 00867 # d e f i n e p t h r e a d _ c o n d _ w a i t ( A , B ) p t h r e a d _ c o n d _ w a i t ( ( A ) , & ( B ) - > m u t e x ) 00868 00869 # d e f i n e p t h r e a d _ c o n d _ t i m e d w a i t ( A , B , C ) p t h r e a d _ c o n d _ t i m e d w a i t ( ( A ) , & ( B ) - > m u t e x , ( C ) ) 00870 00871 # d e f i n e p t h r e a d _ m u t e x _ t r y l o c k ( A ) p t h r e a d _ m u t e x _ t r y l o c k ( & ( A ) - > m u t e x ) 00872 00873 # d e f i n e p t h r e a d _ m u t e x _ t m y _ p t h r e a d _ f a s t m u t e x _ t 00874 00875 # e n d i f / * d e f i n e d ( M Y _ P T H R E A D _ F A S T M U T E X ) & & ! d e f i n e d ( S A F E _ M U T E X ) * / 00876 00877 / * R E A D - W R I T E t h r e a d l o c k i n g * / 00878 00879 # i f d e f H A V E _ B R O K E N _ R W L O C K / * F o r O p e n U n i x * / 00880 00881 # u n d e f H A V E _ P T H R E A D _ R W L O C K _ R D L O C K 00882 00883 # u n d e f H A V E _ R W L O C K _ I N I T 00884 00885 # u n d e f H A V E _ R W L O C K _ T 00886 00887 # e n d i f 00888 00889 # i f d e f i n e d ( U S E _ M U T E X _ I N S T E A D _ O F _ R W _ L O C K S ) 00890 00891 / * u s e t h e s e d e f s f o r s i m p l e m u t e x l o c k i n g * / 00892 00893 # d e f i n e r w _ l o c k _ t p t h r e a d _ m u t e x _ t 00894 00895 # d e f i n e m y _ r w l o c k _ i n i t ( A , B ) p t h r e a d _ m u t e x _ i n i t ( ( A ) , ( B ) ) 00896 00897 # d e f i n e r w _ r d l o c k ( A ) p t h r e a d _ m u t e x _ l o c k ( ( A ) ) 00898 00899 # d e f i n e r w _ w r l o c k ( A ) p t h r e a d _ m u t e x _ l o c k ( ( A ) ) 00900 00901 # d e f i n e r w _ t r y r d l o c k ( A ) p t h r e a d _ m u t e x _ t r y l o c k ( ( A ) ) 00902 00903 # d e f i n e r w _ t r y w r l o c k ( A ) p t h r e a d _ m u t e x _ t r y l o c k ( ( A ) ) 00904 00905 # d e f i n e r w _ u n l o c k ( A ) p t h r e a d _ m u t e x _ u n l o c k ( ( A ) ) 00906 00907 # d e f i n e r w l o c k _ d e s t r o y ( A ) p t h r e a d _ m u t e x _ d e s t r o y ( ( A ) ) 00908 00909 # e l i f d e f i n e d ( H A V E _ P T H R E A D _ R W L O C K _ R D L O C K ) 00910 00911 # d e f i n e r w _ l o c k _ t p t h r e a d _ r w l o c k _ t 00912 00913 # d e f i n e m y _ r w l o c k _ i n i t ( A , B ) p t h r e a d _ r w l o c k _ i n i t ( ( A ) , ( B ) ) 00914 00915 # d e f i n e r w _ r d l o c k ( A ) p t h r e a d _ r w l o c k _ r d l o c k ( A ) 00916 00917 # d e f i n e r w _ w r l o c k ( A ) p t h r e a d _ r w l o c k _ w r l o c k ( A ) 00918 00919 # d e f i n e r w _ t r y r d l o c k ( A ) p t h r e a d _ r w l o c k _ t r y r d l o c k ( ( A ) ) 00920 00921 # d e f i n e r w _ t r y w r l o c k ( A ) p t h r e a d _ r w l o c k _ t r y w r l o c k ( ( A ) ) 00922 00923 # d e f i n e r w _ u n l o c k ( A ) p t h r e a d _ r w l o c k _ u n l o c k ( A ) 00924 00925 # d e f i n e r w l o c k _ d e s t r o y ( A ) p t h r e a d _ r w l o c k _ d e s t r o y ( A ) 00926 00927 # e l i f d e f i n e d ( H A V E _ R W L O C K _ I N I T ) 00928 00929 # i f d e f H A V E _ R W L O C K _ T / * F o r e x a m p l e S o l a r i s 2 . 6 - > * / 00930 00931 # d e f i n e r w _ l o c k _ t r w l o c k _ t 00932 00933 # e n d i f 00934 00935 # d e f i n e m y _ r w l o c k _ i n i t ( A , B ) r w l o c k _ i n i t ( ( A ) , U S Y N C _ T H R E A D , 0 ) 00936 00937 # e l s e 00938 00939 / * U s e o u r o w n v e r s i o n o f r e a d / w r i t e l o c k s * / 00940 00941 t y p e d e f s t r u c t _ m y _ r w _ l o c k _ t { 00942 00943 p t h r e a d _ m u t e x _ t l o c k ; / * l o c k f o r s t r u c t u r e * / 00944 00945 p t h r e a d _ c o n d _ t r e a d e r s ; / * w a i t i n g r e a d e r s * / 00946 00947 p t h r e a d _ c o n d _ t w r i t e r s ; / * w a i t i n g w r i t e r s * / 00948 00949 i n t s t a t e ; / * - 1 : w r i t e r , 0 : f r e e , > 0 : r e a d e r s * / 00950 00951 i n t w a i t e r s ; / * n u m b e r o f w a i t i n g w r i t e r s * / 00952 00953 } m y _ r w _ l o c k _ t ; 00954 00955 # d e f i n e r w _ l o c k _ t m y _ r w _ l o c k _ t 00956 00957 # d e f i n e r w _ r d l o c k ( A ) m y _ r w _ r d l o c k ( ( A ) ) 00958 00959 # d e f i n e r w _ w r l o c k ( A ) m y _ r w _ w r l o c k ( ( A ) ) 00960 00961 # d e f i n e r w _ t r y r d l o c k ( A ) m y _ r w _ t r y r d l o c k ( ( A ) ) 00962 00963 # d e f i n e r w _ t r y w r l o c k ( A ) m y _ r w _ t r y w r l o c k ( ( A ) ) 00964 00965 # d e f i n e r w _ u n l o c k ( A ) m y _ r w _ u n l o c k ( ( A ) ) 00966 00967 # d e f i n e r w l o c k _ d e s t r o y ( A ) m y _ r w l o c k _ d e s t r o y ( ( A ) ) 00968 00969 e x t e r n i n t m y _ r w l o c k _ i n i t ( m y _ r w _ l o c k _ t * , v o i d * ) ; 00970 00971 e x t e r n i n t m y _ r w l o c k _ d e s t r o y ( m y _ r w _ l o c k _ t * ) ; 00972 00973 e x t e r n i n t m y _ r w _ r d l o c k ( m y _ r w _ l o c k _ t * ) ; 00974 00975 e x t e r n i n t m y _ r w _ w r l o c k ( m y _ r w _ l o c k _ t * ) ; 00976 00977 e x t e r n i n t m y _ r w _ u n l o c k ( m y _ r w _ l o c k _ t * ) ; 00978 00979 e x t e r n i n t m y _ r w _ t r y r d l o c k ( m y _ r w _ l o c k _ t * ) ; 00980 00981 e x t e r n i n t m y _ r w _ t r y w r l o c k ( m y _ r w _ l o c k _ t * ) ; 00982 00983 # e n d i f / * U S E _ M U T E X _ I N S T E A D _ O F _ R W _ L O C K S * / 00984 00985 # d e f i n e G E T H O S T B Y A D D R _ B U F F _ S I Z E 2 0 4 8 00986 00987 # i f n d e f H A V E _ T H R _ S E T C O N C U R R E N C Y 00988 00989 # d e f i n e t h r _ s e t c o n c u r r e n c y ( A ) p t h r e a d _ d u m m y ( 0 ) 00990 00991 # e n d i f 00992 00993 # i f ! d e f i n e d ( H A V E _ P T H R E A D _ A T T R _ S E T S T A C K S I Z E ) & & ! d e f i n e d ( p t h r e a d _ a t t r _ s e t s t a c k s i z e ) 00994 00995 # d e f i n e p t h r e a d _ a t t r _ s e t s t a c k s i z e ( A , B ) p t h r e a d _ d u m m y ( 0 ) 00996 00997 # e n d i f 00998 00999 / * D e f i n e m u t e x t y p e s , s e e m y _ t h r _ i n i t . c * / 01000 01001 # d e f i n e M Y _ M U T E X _ I N I T _ S L O W N U L L 01002 01003 # i f d e f P T H R E A D _ A D A P T I V E _ M U T E X _ I N I T I A L I Z E R _ N P 01004 01005 e x t e r n p t h r e a d _ m u t e x a t t r _ t m y _ f a s t _ m u t e x a t t r ; 01006 01007 # d e f i n e M Y _ M U T E X _ I N I T _ F A S T & m y _ f a s t _ m u t e x a t t r 01008 01009 # e l s e 01010 01011 # d e f i n e M Y _ M U T E X _ I N I T _ F A S T N U L L 01012 01013 # e n d i f 01014 01015 # i f d e f P T H R E A D _ E R R O R C H E C K _ M U T E X _ I N I T I A L I Z E R _ N P 01016 01017 e x t e r n p t h r e a d _ m u t e x a t t r _ t m y _ e r r o r c h e c k _ m u t e x a t t r ; 01018 01019 # d e f i n e M Y _ M U T E X _ I N I T _ E R R C H K & m y _ e r r o r c h e c k _ m u t e x a t t r 01020 01021 # e l s e 01022 01023 # d e f i n e M Y _ M U T E X _ I N I T _ E R R C H K N U L L 01024 01025 # e n d i f 01026 01027 # i f n d e f E S R C H 01028 01029 / * D e f i n e i t t o s o m e t h i n g * / 01030 01031 # d e f i n e E S R C H 1 01032 01033 # e n d i f 01034 01035 t y p e d e f u l o n g m y _ t h r e a d _ i d ; 01036 01037 e x t e r n v o i d m y _ t h r e a d a t t r _ g l o b a l _ i n i t ( v o i d ) ; 01038 01039 e x t e r n m y _ b o o l m y _ t h r e a d _ g l o b a l _ i n i t ( v o i d ) ; 01040 01041 e x t e r n v o i d m y _ t h r e a d _ g l o b a l _ e n d ( v o i d ) ; 01042 01043 e x t e r n m y _ b o o l m y _ t h r e a d _ i n i t ( v o i d ) ; 01044 01045 e x t e r n v o i d m y _ t h r e a d _ e n d ( v o i d ) ; 01046 01047 e x t e r n c o n s t c h a r * m y _ t h r e a d _ n a m e ( v o i d ) ; 01048 01049 e x t e r n m y _ t h r e a d _ i d m y _ t h r e a d _ d b u g _ i d ( v o i d ) ; 01050 01051 e x t e r n i n t p t h r e a d _ d u m m y ( i n t ) ; 01052 01053 / * A l l t h r e a d s p e c i f i c v a r i a b l e s a r e i n t h e f o l l o w i n g s t r u c t * / 01054 01055 # d e f i n e T H R E A D _ N A M E _ S I Z E 1 0 01056 01057 # i f n d e f D E F A U L T _ T H R E A D _ S T A C K 01058 01059 # i f S I Z E O F _ C H A R P > 4 01060 01061 / * 01062 01063 M y S Q L c a n s u r v i v e w i t h 3 2 K , b u t s o m e g l i b c l i b r a r i e s r e q u i r e > 1 2 8 K s t a c k 01064 01065 T o r e s o l v e h o s t n a m e s . A l s o r e c u r s i v e s t o r e d p r o c e d u r e s n e e d s s t a c k . 01066 01067 * / 01068 01069 # d e f i n e D E F A U L T _ T H R E A D _ S T A C K ( 2 5 6 * 1 0 2 4 L ) 01070 01071 # e l s e 01072 01073 # d e f i n e D E F A U L T _ T H R E A D _ S T A C K ( 1 9 5 * 1 0 2 4 ) 01074 01075 # e n d i f 01076 01077 # e n d i f 01078 01079 # d e f i n e M Y _ P T H R E A D _ L O C K _ R E A D 0 01080 01081 # d e f i n e M Y _ P T H R E A D _ L O C K _ W R I T E 1 01082 01083 s t r u c t s t _ m y _ t h r e a d _ v a r 01084 01085 { 01086 01087 i n t t h r _ e r r n o ; 01088 01089 p t h r e a d _ c o n d _ t s u s p e n d ; 01090 01091 p t h r e a d _ m u t e x _ t m u t e x ; 01092 01093 p t h r e a d _ m u t e x _ t * v o l a t i l e c u r r e n t _ m u t e x ; 01094 01095 p t h r e a d _ c o n d _ t * v o l a t i l e c u r r e n t _ c o n d ; 01096 01097 p t h r e a d _ t p t h r e a d _ s e l f ; 01098 01099 m y _ t h r e a d _ i d i d ; 01100 01101 i n t c m p _ l e n g t h ; 01102 01103 i n t v o l a t i l e a b o r t ; 01104 01105 m y _ b o o l i n i t ; 01106 01107 s t r u c t s t _ m y _ t h r e a d _ v a r * n e x t , * * p r e v ; 01108 01109 v o i d * o p t _ i n f o ; 01110 01111 u i n t l o c k _ t y p e ; / * u s e d b y c o n d i t i o n a l r e l e a s e t h e q u e u e * / 01112 01113 v o i d * s t a c k _ e n d s _ h e r e ; 01114 01115 s a f e _ m u t e x _ t * m u t e x _ i n _ u s e ; 01116 01117 # i f n d e f D B U G _ O F F 01118 01119 v o i d * d b u g ; 01120 01121 c h a r n a m e [ T H R E A D _ N A M E _ S I Z E + 1 ] ; 01122 01123 # e n d i f 01124 01125 } ; 01126 01127 e x t e r n s t r u c t s t _ m y _ t h r e a d _ v a r * _ m y _ t h r e a d _ v a r ( v o i d ) _ _ a t t r i b u t e _ _ ( ( c o n s t ) ) ; 01128 01129 e x t e r n v o i d * * m y _ t h r e a d _ v a r _ d b u g ( ) ; 01130 01131 e x t e r n s a f e _ m u t e x _ t * * m y _ t h r e a d _ v a r _ m u t e x _ i n _ u s e ( ) ; 01132 01133 e x t e r n u i n t m y _ t h r e a d _ e n d _ w a i t _ t i m e ; 01134 01135 e x t e r n m y _ b o o l s a f e _ m u t e x _ d e a d l o c k _ d e t e c t o r ; 01136 01137 # d e f i n e m y _ t h r e a d _ v a r ( _ m y _ t h r e a d _ v a r ( ) ) 01138 01139 # d e f i n e m y _ e r r n o m y _ t h r e a d _ v a r - > t h r _ e r r n o 01140 01141 / * 01142 01143 K e e p t r a c k o f s h u t d o w n , s i g n a l , a n d m a i n t h r e a d s s o t h a t m y _ e n d ( ) w i l l n o t 01144 01145 r e p o r t e r r o r s w i t h t h e m 01146 01147 * / 01148 01149 / * W h i c h k i n d o f t h r e a d l i b r a r y i s i n u s e * / 01150 01151 # d e f i n e T H D _ L I B _ O T H E R 1 01152 01153 # d e f i n e T H D _ L I B _ N P T L 2 01154 01155 # d e f i n e T H D _ L I B _ L T 4 01156 01157 e x t e r n u i n t t h d _ l i b _ d e t e c t e d ; 01158 01159 / * 01160 01161 t h r e a d _ s a f e _ x x x f u n c t i o n s a r e f o r c r i t i c a l s t a t i s t i c o r c o u n t e r s . 01162 01163 T h e i m p l e m e n t a t i o n i s g u a r a n t e e d t o b e t h r e a d s a f e , o n a l l p l a t f o r m s . 01164 01165 N o t e t h a t t h e c a l l i n g c o d e s h o u l d * n o t * a s s u m e t h e c o u n t e r i s p r o t e c t e d 01166 01167 b y t h e m u t e x g i v e n , a s t h e i m p l e m e n t a t i o n o f t h e s e h e l p e r s m a y c h a n g e 01168 01169 t o u s e m y _ a t o m i c o p e r a t i o n s i n s t e a d . 01170 01171 * / 01172 01173 / * 01174 01175 W a r n i n g : 01176 01177 W h e n c o m p i l i n g w i t h o u t t h r e a d s , t h i s f i l e i s n o t i n c l u d e d . 01178 01179 S e e t h e * o t h e r * d e c l a r a t i o n s o f t h r e a d _ s a f e _ x x x i n i n c l u d e / m y _ g l o b a l . h 01180 01181 S e c o n d w a r n i n g : 01182 01183 S e e i n c l u d e / c o n f i g - w i n . h , f o r y e t a n o t h e r i m p l e m e n t a t i o n . 01184 01185 * / 01186 01187 # i f d e f T H R E A D 01188 01189 # i f n d e f t h r e a d _ s a f e _ i n c r e m e n t 01190 01191 # d e f i n e t h r e a d _ s a f e _ i n c r e m e n t ( V , L ) \ 01192 01193 ( p t h r e a d _ m u t e x _ l o c k ( ( L ) ) , ( V ) + + , p t h r e a d _ m u t e x _ u n l o c k ( ( L ) ) ) 01194 01195 # d e f i n e t h r e a d _ s a f e _ d e c r e m e n t ( V , L ) \ 01196 01197 ( p t h r e a d _ m u t e x _ l o c k ( ( L ) ) , ( V ) - - , p t h r e a d _ m u t e x _ u n l o c k ( ( L ) ) ) 01198 01199 # e n d i f 01200 01201 # i f n d e f t h r e a d _ s a f e _ a d d 01202 01203 # d e f i n e t h r e a d _ s a f e _ a d d ( V , C , L ) \ 01204 01205 ( p t h r e a d _ m u t e x _ l o c k ( ( L ) ) , ( V ) + = ( C ) , p t h r e a d _ m u t e x _ u n l o c k ( ( L ) ) ) 01206 01207 # d e f i n e t h r e a d _ s a f e _ s u b ( V , C , L ) \ 01208 01209 ( p t h r e a d _ m u t e x _ l o c k ( ( L ) ) , ( V ) - = ( C ) , p t h r e a d _ m u t e x _ u n l o c k ( ( L ) ) ) 01210 01211 # e n d i f 01212 01213 # e n d i f 01214 01215 / * 01216 01217 s t a t i s t i c s _ x x x f u n c t i o n s a r e f o r n o n c r i t i c a l s t a t i s t i c , 01218 01219 m a i n t a i n e d i n g l o b a l v a r i a b l e s . 01220 01221 W h e n c o m p i l i n g w i t h S A F E _ S T A T I S T I C S : 01222 01223 - r a c e c o n d i t i o n s c a n n o t o c c u r . 01224 01225 - s o m e l o c k i n g o c c u r s , w h i c h m a y c a u s e p e r f o r m a n c e d e g r a d a t i o n . 01226 01227 W h e n c o m p i l i n g w i t h o u t S A F E _ S T A T I S T I C S : 01228 01229 - r a c e c o n d i t i o n s c a n o c c u r , m a k i n g t h e r e s u l t s l i g h t l y i n a c c u r a t e . 01230 01231 - t h e l o c k g i v e n i s n o t h o n o r e d . 01232 01233 * / 01234 01235 # i f d e f S A F E _ S T A T I S T I C S 01236 01237 # d e f i n e s t a t i s t i c _ i n c r e m e n t ( V , L ) t h r e a d _ s a f e _ i n c r e m e n t ( ( V ) , ( L ) ) 01238 01239 # d e f i n e s t a t i s t i c _ d e c r e m e n t ( V , L ) t h r e a d _ s a f e _ d e c r e m e n t ( ( V ) , ( L ) ) 01240 01241 # d e f i n e s t a t i s t i c _ a d d ( V , C , L ) t h r e a d _ s a f e _ a d d ( ( V ) , ( C ) , ( L ) ) 01242 01243 # d e f i n e s t a t i s t i c _ s u b ( V , C , L ) t h r e a d _ s a f e _ s u b ( ( V ) , ( C ) , ( L ) ) 01244 01245 # e l s e 01246 01247 # d e f i n e s t a t i s t i c _ d e c r e m e n t ( V , L ) ( V ) - - 01248 01249 # d e f i n e s t a t i s t i c _ i n c r e m e n t ( V , L ) ( V ) + + 01250 01251 # d e f i n e s t a t i s t i c _ a d d ( V , C , L ) ( V ) + = ( C ) 01252 01253 # d e f i n e s t a t i s t i c _ s u b ( V , C , L ) ( V ) - = ( C ) 01254 01255 # e n d i f / * S A F E _ S T A T I S T I C S * / 01256 01257 / * 01258 01259 N o l o c k i n g n e e d e d , t h e c o u n t e r i s o w n e d b y t h e t h r e a d 01260 01261 * / 01262 01263 # d e f i n e s t a t u s _ v a r _ i n c r e m e n t ( V ) ( V ) + + 01264 01265 # d e f i n e s t a t u s _ v a r _ d e c r e m e n t ( V ) ( V ) - - 01266 01267 # d e f i n e s t a t u s _ v a r _ a d d ( V , C ) ( V ) + = ( C ) 01268 01269 # d e f i n e s t a t u s _ v a r _ s u b ( V , C ) ( V ) - = ( C ) 01270 01271 # i f d e f _ _ c p l u s p l u s 01272 01273 } 01274 01275 # e n d i f 01276 01277 # e n d i f / * _ m y _ p t r e a d _ h * / 01278 01279