CMGDK r49-rc2
|
00001 / * C o p y r i g h t 2 0 0 0 - 2 0 0 8 M y S Q L A B , 2 0 0 8 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 / * F o r u s e w i t h t h r _ l o c k : s * / 00024 00025 # i f n d e f _ t h r _ l o c k _ h 00026 00027 # d e f i n e _ t h r _ l o c k _ h 00028 00029 # i f d e f _ _ c p l u s p l u s 00030 00031 e x t e r n " C " { 00032 00033 # e n d i f 00034 00035 # i n c l u d e < m y _ p t h r e a d . h > 00036 00037 # i n c l u d e < m y _ l i s t . h > 00038 00039 s t r u c t s t _ t h r _ l o c k ; 00040 00041 e x t e r n u l o n g l o c k s _ i m m e d i a t e , l o c k s _ w a i t e d ; 00042 00043 / * * 00044 00045 L o c k t y p e s a r e u s e d t o r e q u e s t a l o c k o n a t a b l e . C h a n g e s i n t h i s e n u m e r a t i o n 00046 00047 m i g h t a f f e c t t r a n s a c t i o n a l l o c k s a s w e l l . 00048 00049 I m p o r t a n t : i f a n e w l o c k t y p e i s a d d e d , a m a t c h i n g l o c k d e s c r i p t i o n 00050 00051 m u s t b e a d d e d t o s q l _ t e s t . c c ' s l o c k _ d e s c r i p t i o n s a r r a y . 00052 00053 @ s e e s e t _ h a n d l e r _ t a b l e _ l o c k s 00054 00055 @ s e e r e a d _ l o c k _ t y p e _ f o r _ t a b l e 00056 00057 * / 00058 00059 e n u m t h r _ l o c k _ t y p e { T L _ I G N O R E = - 1 , 00060 00061 T L _ U N L O C K , / * U N L O C K A N Y L O C K * / 00062 00063 / * 00064 00065 P a r s e r o n l y ! A t o p e n _ t a b l e s ( ) b e c o m e s T L _ R E A D o r 00066 00067 T L _ R E A D _ N O _ I N S E R T d e p e n d i n g o n t h e b i n a r y l o g f o r m a t 00068 00069 ( S B R / R B R ) a n d o n t h e t a b l e c a t e g o r y ( l o g t a b l e ) . 00070 00071 U s e d f o r t a b l e s t h a t a r e r e a d b y s t a t e m e n t s w h i c h 00072 00073 m o d i f y t a b l e s . 00074 00075 * / 00076 00077 T L _ R E A D _ D E F A U L T , 00078 00079 T L _ R E A D , / * R e a d l o c k * / 00080 00081 T L _ R E A D _ W I T H _ S H A R E D _ L O C K S , 00082 00083 / * H i g h p r i o r . t h a n T L _ W R I T E . A l l o w c o n c u r r e n t i n s e r t * / 00084 00085 T L _ R E A D _ H I G H _ P R I O R I T Y , 00086 00087 / * R E A D , D o n ' t a l l o w c o n c u r r e n t i n s e r t * / 00088 00089 T L _ R E A D _ N O _ I N S E R T , 00090 00091 / * 00092 00093 W r i t e l o c k , b u t a l l o w o t h e r t h r e a d s t o r e a d / w r i t e . 00094 00095 U s e d b y B D B t a b l e s i n M y S Q L t o m a r k t h a t s o m e o n e i s 00096 00097 r e a d i n g / w r i t i n g t o t h e t a b l e . 00098 00099 * / 00100 00101 T L _ W R I T E _ A L L O W _ W R I T E , 00102 00103 / * 00104 00105 W r i t e l o c k , b u t a l l o w o t h e r t h r e a d s t o r e a d . 00106 00107 U s e d b y A L T E R T A B L E i n M y S Q L t o a l l o w r e a d e r s 00108 00109 t o u s e t h e t a b l e u n t i l A L T E R T A B L E i s f i n i s h e d . 00110 00111 * / 00112 00113 T L _ W R I T E _ A L L O W _ R E A D , 00114 00115 / * 00116 00117 W R I T E l o c k u s e d b y c o n c u r r e n t i n s e r t . W i l l a l l o w 00118 00119 R E A D , i f o n e c o u l d u s e c o n c u r r e n t i n s e r t o n t a b l e . 00120 00121 * / 00122 00123 T L _ W R I T E _ C O N C U R R E N T _ I N S E R T , 00124 00125 / * W r i t e u s e d b y I N S E R T D E L A Y E D . A l l o w s R E A D l o c k s * / 00126 00127 T L _ W R I T E _ D E L A Y E D , 00128 00129 / * 00130 00131 p a r s e r o n l y ! L a t e b o u n d l o w _ p r i o r i t y f l a g . 00132 00133 A t o p e n _ t a b l e s ( ) b e c o m e s t h d - > u p d a t e _ l o c k _ d e f a u l t . 00134 00135 * / 00136 00137 T L _ W R I T E _ D E F A U L T , 00138 00139 / * W R I T E l o c k t h a t h a s l o w e r p r i o r i t y t h a n T L _ R E A D * / 00140 00141 T L _ W R I T E _ L O W _ P R I O R I T Y , 00142 00143 / * N o r m a l W R I T E l o c k * / 00144 00145 T L _ W R I T E , 00146 00147 / * A b o r t n e w l o c k r e q u e s t w i t h a n e r r o r * / 00148 00149 T L _ W R I T E _ O N L Y } ; 00150 00151 e n u m e n u m _ t h r _ l o c k _ r e s u l t { T H R _ L O C K _ S U C C E S S = 0 , T H R _ L O C K _ A B O R T E D = 1 , 00152 00153 T H R _ L O C K _ W A I T _ T I M E O U T = 2 , T H R _ L O C K _ D E A D L O C K = 3 } ; 00154 00155 00156 00157 e x t e r n u l o n g m a x _ w r i t e _ l o c k _ c o u n t ; 00158 00159 e x t e r n u l o n g t a b l e _ l o c k _ w a i t _ t i m e o u t ; 00160 00161 e x t e r n m y _ b o o l t h r _ l o c k _ i n i t e d ; 00162 00163 e x t e r n e n u m t h r _ l o c k _ t y p e t h r _ u p g r a d e d _ c o n c u r r e n t _ i n s e r t _ l o c k ; 00164 00165 / * 00166 00167 A d e s c r i p t i o n o f t h e t h r e a d w h i c h o w n s t h e l o c k . T h e a d d r e s s 00168 00169 o f a n i n s t a n c e o f t h i s s t r u c t u r e i s u s e d t o u n i q u e l y i d e n t i f y t h e t h r e a d . 00170 00171 * / 00172 00173 t y p e d e f s t r u c t s t _ t h r _ l o c k _ i n f o 00174 00175 { 00176 00177 p t h r e a d _ t t h r e a d ; 00178 00179 m y _ t h r e a d _ i d t h r e a d _ i d ; 00180 00181 u l o n g n _ c u r s o r s ; 00182 00183 } T H R _ L O C K _ I N F O ; 00184 00185 / * 00186 00187 L o c k o w n e r i d e n t i f i e r . G l o b a l l y i d e n t i f i e s t h e l o c k o w n e r w i t h i n t h e 00188 00189 t h r e a d a n d a m o n g a l l t h e t h r e a d s . T h e a d d r e s s o f a n i n s t a n c e o f t h i s 00190 00191 s t r u c t u r e i s u s e d a s i d . 00192 00193 * / 00194 00195 t y p e d e f s t r u c t s t _ t h r _ l o c k _ o w n e r 00196 00197 { 00198 00199 T H R _ L O C K _ I N F O * i n f o ; 00200 00201 } T H R _ L O C K _ O W N E R ; 00202 00203 00204 00205 t y p e d e f s t r u c t s t _ t h r _ l o c k _ d a t a { 00206 00207 T H R _ L O C K _ O W N E R * o w n e r ; 00208 00209 s t r u c t s t _ t h r _ l o c k _ d a t a * n e x t , * * p r e v ; 00210 00211 s t r u c t s t _ t h r _ l o c k * l o c k ; 00212 00213 p t h r e a d _ c o n d _ t * c o n d ; 00214 00215 e n u m t h r _ l o c k _ t y p e t y p e ; 00216 00217 v o i d * s t a t u s _ p a r a m ; / * P a r a m t o s t a t u s f u n c t i o n s * / 00218 00219 v o i d * d e b u g _ p r i n t _ p a r a m ; 00220 00221 } T H R _ L O C K _ D A T A ; 00222 00223 s t r u c t s t _ l o c k _ l i s t { 00224 00225 T H R _ L O C K _ D A T A * d a t a , * * l a s t ; 00226 00227 } ; 00228 00229 t y p e d e f s t r u c t s t _ t h r _ l o c k { 00230 00231 L I S T l i s t ; 00232 00233 p t h r e a d _ m u t e x _ t m u t e x ; 00234 00235 s t r u c t s t _ l o c k _ l i s t r e a d _ w a i t ; 00236 00237 s t r u c t s t _ l o c k _ l i s t r e a d ; 00238 00239 s t r u c t s t _ l o c k _ l i s t w r i t e _ w a i t ; 00240 00241 s t r u c t s t _ l o c k _ l i s t w r i t e ; 00242 00243 / * w r i t e _ l o c k _ c o u n t i s i n c r e m e n t e d f o r w r i t e l o c k s a n d r e s e t o n r e a d l o c k s * / 00244 00245 u l o n g w r i t e _ l o c k _ c o u n t ; 00246 00247 u i n t r e a d _ n o _ w r i t e _ c o u n t ; 00248 00249 v o i d ( * g e t _ s t a t u s ) ( v o i d * , m y _ b o o l ) ; / * W h e n o n e g e t s a l o c k * / 00250 00251 v o i d ( * c o p y _ s t a t u s ) ( v o i d * , v o i d * ) ; 00252 00253 v o i d ( * u p d a t e _ s t a t u s ) ( v o i d * ) ; / * B e f o r e r e l e a s e o f w r i t e * / 00254 00255 v o i d ( * r e s t o r e _ s t a t u s ) ( v o i d * ) ; / * B e f o r e r e l e a s e o f r e a d * / 00256 00257 m y _ b o o l ( * c h e c k _ s t a t u s ) ( v o i d * ) ; 00258 00259 m y _ b o o l a l l o w _ m u l t i p l e _ c o n c u r r e n t _ i n s e r t ; 00260 00261 } T H R _ L O C K ; 00262 00263 00264 00265 e x t e r n L I S T * t h r _ l o c k _ t h r e a d _ l i s t ; 00266 00267 e x t e r n p t h r e a d _ m u t e x _ t T H R _ L O C K _ l o c k ; 00268 00269 m y _ b o o l i n i t _ t h r _ l o c k ( v o i d ) ; / * M u s t b e c a l l e d o n c e / t h r e a d * / 00270 00271 # d e f i n e t h r _ l o c k _ o w n e r _ i n i t ( o w n e r , i n f o _ a r g ) ( o w n e r ) - > i n f o = ( i n f o _ a r g ) 00272 00273 v o i d t h r _ l o c k _ i n f o _ i n i t ( T H R _ L O C K _ I N F O * i n f o ) ; 00274 00275 v o i d t h r _ l o c k _ i n i t ( T H R _ L O C K * l o c k ) ; 00276 00277 v o i d t h r _ l o c k _ d e l e t e ( T H R _ L O C K * l o c k ) ; 00278 00279 v o i d t h r _ l o c k _ d a t a _ i n i t ( T H R _ L O C K * l o c k , T H R _ L O C K _ D A T A * d a t a , 00280 00281 v o i d * s t a t u s _ p a r a m ) ; 00282 00283 e n u m e n u m _ t h r _ l o c k _ r e s u l t t h r _ l o c k ( T H R _ L O C K _ D A T A * d a t a , 00284 00285 T H R _ L O C K _ O W N E R * o w n e r , 00286 00287 e n u m t h r _ l o c k _ t y p e l o c k _ t y p e ) ; 00288 00289 v o i d t h r _ u n l o c k ( T H R _ L O C K _ D A T A * d a t a ) ; 00290 00291 e n u m e n u m _ t h r _ l o c k _ r e s u l t t h r _ m u l t i _ l o c k ( T H R _ L O C K _ D A T A * * d a t a , 00292 00293 u i n t c o u n t , T H R _ L O C K _ O W N E R * o w n e r ) ; 00294 00295 v o i d t h r _ m u l t i _ u n l o c k ( T H R _ L O C K _ D A T A * * d a t a , u i n t c o u n t ) ; 00296 00297 v o i d 00298 00299 t h r _ l o c k _ m e r g e _ s t a t u s ( T H R _ L O C K _ D A T A * * d a t a , u i n t c o u n t ) ; 00300 00301 v o i d t h r _ a b o r t _ l o c k s ( T H R _ L O C K * l o c k , m y _ b o o l u p g r a d e _ l o c k ) ; 00302 00303 m y _ b o o l t h r _ a b o r t _ l o c k s _ f o r _ t h r e a d ( T H R _ L O C K * l o c k , m y _ t h r e a d _ i d t h r e a d ) ; 00304 00305 v o i d t h r _ p r i n t _ l o c k s ( v o i d ) ; / * F o r d e b u g g i n g * / 00306 00307 m y _ b o o l t h r _ u p g r a d e _ w r i t e _ d e l a y _ l o c k ( T H R _ L O C K _ D A T A * d a t a , 00308 00309 e n u m t h r _ l o c k _ t y p e n e w _ l o c k _ t y p e ) ; 00310 00311 v o i d t h r _ d o w n g r a d e _ w r i t e _ l o c k ( T H R _ L O C K _ D A T A * d a t a , 00312 00313 e n u m t h r _ l o c k _ t y p e n e w _ l o c k _ t y p e ) ; 00314 00315 m y _ b o o l t h r _ r e s c h e d u l e _ w r i t e _ l o c k ( T H R _ L O C K _ D A T A * d a t a ) ; 00316 00317 # i f d e f _ _ c p l u s p l u s 00318 00319 } 00320 00321 # e n d i f 00322 00323 # e n d i f / * _ t h r _ l o c k _ h * / 00324 00325