From 2c237a426f72565dce6bb76f2371fdec4483cb91 Mon Sep 17 00:00:00 2001 From: psperl Date: Thu, 27 Mar 2008 22:58:03 +0000 Subject: [PATCH] Compiles, but crashes on WIN32. Threading is now selectable via a USE_THREADS git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/trunk@907 6778bc44-b910-0410-a7a0-be141de4315d --- .../ftgl_static_lib/ftgl_static_lib.vcproj | 4 +- .../builds/win32/visualc/freetype.vcproj | 3 +- .../freetype-2.3.5/objs/freetype235_D.lib | Bin 2225658 -> 2200950 bytes src/WinLibs/glew/build/vc6/glew_static.vcproj | 3 +- src/WinLibs/glew/lib/glew32s.lib | Bin 799170 -> 799098 bytes src/WinLibs/glew/lib/glew32sd.lib | Bin 739654 -> 739814 bytes src/WinLibs/pthreads/ANNOUNCE | 476 ++ src/WinLibs/pthreads/BUGS | 133 + src/WinLibs/pthreads/CONTRIBUTORS | 129 + src/WinLibs/pthreads/COPYING | 150 + src/WinLibs/pthreads/COPYING.LIB | 504 ++ src/WinLibs/pthreads/ChangeLog | 4821 +++++++++++++++++ src/WinLibs/pthreads/FAQ | 403 ++ src/WinLibs/pthreads/MAINTAINERS | 4 + src/WinLibs/pthreads/NEWS | 1110 ++++ src/WinLibs/pthreads/PROGRESS | 4 + src/WinLibs/pthreads/README | 593 ++ src/WinLibs/pthreads/README.Borland | 57 + src/WinLibs/pthreads/README.CV | 3036 +++++++++++ src/WinLibs/pthreads/README.NONPORTABLE | 285 + src/WinLibs/pthreads/README.Watcom | 62 + src/WinLibs/pthreads/README.WinCE | 6 + src/WinLibs/pthreads/TODO | 7 + src/WinLibs/pthreads/WinCE-PORT | 217 + src/WinLibs/pthreads/include/md5.sum | 3 + src/WinLibs/pthreads/include/pthread.h | 1368 +++++ src/WinLibs/pthreads/include/sched.h | 178 + src/WinLibs/pthreads/include/semaphore.h | 166 + src/WinLibs/pthreads/lib/libpthreadGC2.a | Bin 0 -> 89608 bytes src/WinLibs/pthreads/lib/libpthreadGCE2.a | Bin 0 -> 89614 bytes src/WinLibs/pthreads/lib/md5.sum | 10 + src/WinLibs/pthreads/lib/pthreadGC2.dll | Bin 0 -> 60273 bytes src/WinLibs/pthreads/lib/pthreadGCE2.dll | Bin 0 -> 112556 bytes src/WinLibs/pthreads/lib/pthreadVC2.lib | Bin 0 -> 29280 bytes src/WinLibs/pthreads/lib/pthreadVCE2.dll | Bin 0 -> 77879 bytes src/WinLibs/pthreads/lib/pthreadVCE2.lib | Bin 0 -> 29400 bytes src/WinLibs/pthreads/lib/pthreadVSE2.dll | Bin 0 -> 86071 bytes src/WinLibs/pthreads/lib/pthreadVSE2.lib | Bin 0 -> 29400 bytes src/WinLibs/pthreads/md5.sum | 18 + src/projectM-engine/FBO.hpp | 1 - .../RandomNumberGenerators.hpp | 2 +- src/projectM-engine/Renderer.hpp | 6 - src/projectM-engine/TextureManager.cpp | 4 +- src/projectM-engine/TextureManager.hpp | 2 +- src/projectM-engine/TimeKeeper.cpp | 7 +- src/projectM-engine/libprojectM.vcproj | 25 +- src/projectM-engine/projectM.cpp | 59 +- src/projectM-engine/projectM.hpp | 8 +- src/projectM-engine/timer.cpp | 11 +- src/projectM-engine/timer.h | 2 +- .../Visual Studio Project/VizKit/VizKit.sln | 4 +- .../Visual Studio Project/VizKit/VizKit.suo | Bin 54784 -> 54784 bytes .../VizKit/VizKit.vcproj | 17 +- src/projectM-wmp/projectM-wmp.sln | 4 +- src/projectM-wmp/projectM-wmp.suo | Bin 63488 -> 95744 bytes .../projectM-wmp/projectM-wmp.cpp | 10 +- .../projectM-wmp/projectM-wmp.vcproj | 18 +- .../projectM-wmp/projectM-wmp_i.c | 4 +- 58 files changed, 13836 insertions(+), 98 deletions(-) create mode 100644 src/WinLibs/pthreads/ANNOUNCE create mode 100644 src/WinLibs/pthreads/BUGS create mode 100644 src/WinLibs/pthreads/CONTRIBUTORS create mode 100644 src/WinLibs/pthreads/COPYING create mode 100644 src/WinLibs/pthreads/COPYING.LIB create mode 100644 src/WinLibs/pthreads/ChangeLog create mode 100644 src/WinLibs/pthreads/FAQ create mode 100644 src/WinLibs/pthreads/MAINTAINERS create mode 100644 src/WinLibs/pthreads/NEWS create mode 100644 src/WinLibs/pthreads/PROGRESS create mode 100644 src/WinLibs/pthreads/README create mode 100644 src/WinLibs/pthreads/README.Borland create mode 100644 src/WinLibs/pthreads/README.CV create mode 100644 src/WinLibs/pthreads/README.NONPORTABLE create mode 100644 src/WinLibs/pthreads/README.Watcom create mode 100644 src/WinLibs/pthreads/README.WinCE create mode 100644 src/WinLibs/pthreads/TODO create mode 100644 src/WinLibs/pthreads/WinCE-PORT create mode 100644 src/WinLibs/pthreads/include/md5.sum create mode 100644 src/WinLibs/pthreads/include/pthread.h create mode 100644 src/WinLibs/pthreads/include/sched.h create mode 100644 src/WinLibs/pthreads/include/semaphore.h create mode 100644 src/WinLibs/pthreads/lib/libpthreadGC2.a create mode 100644 src/WinLibs/pthreads/lib/libpthreadGCE2.a create mode 100644 src/WinLibs/pthreads/lib/md5.sum create mode 100644 src/WinLibs/pthreads/lib/pthreadGC2.dll create mode 100644 src/WinLibs/pthreads/lib/pthreadGCE2.dll create mode 100644 src/WinLibs/pthreads/lib/pthreadVC2.lib create mode 100644 src/WinLibs/pthreads/lib/pthreadVCE2.dll create mode 100644 src/WinLibs/pthreads/lib/pthreadVCE2.lib create mode 100644 src/WinLibs/pthreads/lib/pthreadVSE2.dll create mode 100644 src/WinLibs/pthreads/lib/pthreadVSE2.lib create mode 100644 src/WinLibs/pthreads/md5.sum diff --git a/src/WinLibs/FTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.vcproj b/src/WinLibs/FTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.vcproj index f947b134b..418dba573 100644 --- a/src/WinLibs/FTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.vcproj +++ b/src/WinLibs/FTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.vcproj @@ -1,10 +1,11 @@ diff --git a/src/WinLibs/freetype-2.3.5/builds/win32/visualc/freetype.vcproj b/src/WinLibs/freetype-2.3.5/builds/win32/visualc/freetype.vcproj index 6e5171f03..b7c06f122 100644 --- a/src/WinLibs/freetype-2.3.5/builds/win32/visualc/freetype.vcproj +++ b/src/WinLibs/freetype-2.3.5/builds/win32/visualc/freetype.vcproj @@ -1,10 +1,11 @@ izuY7+x$gJ8ov||F(zt@Gc z(7*fM{~`-LG_~2+cBh-^-|gYdrhZ)>@*ko7aRY1lb@1s-|7O3)oXK_n%h%-Am2 z8+SMRhIO>F|LWKEHwA=0a)|xqdvQ7o|1W%9|BX!lL7uMvN~>C50oQ-0TU%WL*MH%h zwz_bX{eN=)qlbhr?{CbK1V-Q34=4V+uW~ZSv2Coc(WG<=3EVb5@StH^M#y`C&F4v_ zON`xhVIN}$wsCf8xq+|-bPQ$T*M+hd?+;~D4}~)Koi-M}-Np=$+u3yPU@vAnSY5J{EfP+4_Zv=T?-<4o zJrd5QUkqm~B==y((5r|H5fj#$S~wTt9|el$}@Ad%7qkM-;9I zc1EOSq-Q3_(Wlg$&rQrf=Ir48a~Yd2&Y!i0@d#z!n;osy1&qx=J3bk~C-pCFArG{ohu4o;tBqv z!LOOi#IlvaZT%)ARoPt8*vsrJ9GEvKw>W=H{?PtC6Y$S~f-wUV;(QR{JifC*Ml)`u zQp$UdFRrbqsU2TkQCBg3U`6e;x~l5&bv3hRP8(laQ$GHhDKqn@OsEw_j~k-e&zUl_ za%Npp)r6_6C+lrxag6!1VB``r%A}*n{lS`$e9Cy0m6gw#*y;j~6hssmbCQz9yn8|; zI<~S}%GQNp;z-Z9#*{G=;z*|>i9hUQ3e@<(f`IK0l^%5%lZ*Q}j9eD%Ab3HRnjB)00L#OIpZ@*ENWUTCCp zTV9Camq6v7yd*=hO?f5ns&)<=PVbDeYMdF1_2T8rmtPNMtg>omofIxX*sH`2O5hij z{)5UX?fOAUhHGrf`-27;95#_Mv2ABDl0P^CktzpMBr&UtEkXHiaDZW~P5Ia0 z{uDDV#+0z)EmN>kJtP+qpBeHP<#x@`B>so8XlNh9-cYgi8-q>xaHx%^h^-4E5`9ZB zXf7(wVY1v?hf&Op!}?_Ir5cu%S1>E8Of^gi!DUl1qpId+S?LSjt)Mv6tTZKNcspvv z@LNL0xQY)@aZKj*g?BBf^G`#F zR^}9RrKoX z7Y)q)9`HBdr@-HVUjr`zjmYE=pabY{WbTf@Ho#n<1y}?O0L}mg1M7hyKq@>8_$V+O zxB(aed;;?*><3&5%mpgIJfn-bUjP{lVLxya4J-y;3!DH%;qK|calo0t8-TX}%Ye55Cn#SPwxa=UDN5q! zl%7Q++Upk*4M7??UW3UqDvv5p7LDf@x0y#7Ii(IB-Ni4+%vii_Ti?-TobOfEjOl3i z8sB#0bpm7HvT}S(N1i77or`ulMzvvVr5qv{(iZDs1mi;LQ5?>vC_{>C`HjlX;vqxn zE`m=0VtnxD<;(HlQ<)7%g@|v$G%&MlMn%cQDK%2e*2L*$Gbc&WftcYCEjFd#>b?;c zBtYDfikWpaH>a^Mgt`%GwJDEZofa8{(CUh`)RM^+WfLoE7$xqcCjRm2zF|~aO;uH$ zp7A+U$k(O}xu!cV(HpOM$F&oqHlH*1Uf>Ae=fIJ`FM*?gmw=;ze*%kvW(=llfZ@Qg zz*OLMz#QN>U>{&9umCs#I0;w|oC%x=tOZU2&IL~47|jbora{0%9@Zhuy$o0dd=^*@ zd=Xd+q)}Z5q)~k%(1Bi_1H_1BHv@+NZw1mQz71FdbOGf(9ryr_mjd4b-UIvqcpt}T z4#lW?7(yT5YT&iNHNXw)(HHv)G6HvxA7w*bEaVqNC`9=IKN4)`qa zN8k=%fG=au18u+;fZ@QMRKrY=SAf;P-N4zvJ;2+6uK`~K?gtwDFs}jqfd_#O;2~f% z@NHl`@F*}9_%1LP_#to}@FU`3;KYHjCNHEA3z_!4zfQdlNX70|wZ-G65 z-vNgL&jag$KLVEme+C`^{ss&+VI~BI0Woge?SU9K?ry-#z!abXGh-j1A8?+DxtKr5 zA_&32JwPk)Fwh3P0JH;t17g6rLvZ~?0NVqjfPH|`z=6P6;1pmSa2hZHI0KjnTnfZA z?0x{)8MqqQ1^9TIYcNHEY=n>md~rP@xfQWqywRClpycx;yP zbV+QYKHpxcw%0m=Ce3~}<;Rlo{BC7rX&g^cs!RLwk;<0R9F+ELsp9$u`MrwyoL0Yk zft@h7yawz7d>x4Si0uPno?!=ovw&{`Zvq|!;__yPfp-Is0apRv1>)*t9|3VSvX6l@ zw;cz*3j7rKKJWzHK{1HgNeCB#r+|L|zXoEAu+zY9z;A&#6ZN)a2N0r@GamU#$@LH801d~bj!XByZ~fASUcbZ7=ckh zKOk=N%-=`+@n&$O8P|aP;9R{uA<1w(7ETj#yGP?h$u$}+TIfX4uqtaYt~_TGKREAWv=Vi*wiuP?Nf*(T! zQFuAd>DxgD@2KdA;Lj=&{U~?=6V>ZXj-WWyyH2mMa^!Wp(y!8oS15Uv@wlueRkq_3 zm4?bhK1)V;-oVqg6|Qf zzgg}41(9-6;Zq~{7O|$cC7Lf1Ck=)e zo*|a4c7~@>x+y4W(3q0Z>e(#8qvoKQb)zcEv4}QVpTucJ;Na;uS5KD3ZxgeAw?^lFq%yO)7OxAp*X<9h{LBywoI($ip6uGaP?0ylTUsy$M zNQB)Von*3h4;9P&;v;PvuVhjpb2t|wtdE6;@vWk4yxr+|5rZ4`A33{j`jnX!B{J;; zg8RpZDO;xd@b{J68*M&lY>6n{;p^Zxi0WJ0W*eey;(ULj-R@MoW%dWR~G+aQ761Yt?j*Ini#560b1lNhlIz#L~WNmAR!7GSC#u!5O7tFo-x&NqnMK!aVxtv37cKgF8E*8Y5$ zXiBq&^U)$M$k2t46e*85qnuPcJu*|Zso!O{trLfHEMW!*PWozdm^g7mtPhVBMLg6N zLxY4?yBM~Gc_pLpvSi?t8fw2C0qsO`NABRs%B(37^8EA^xxof|PaDGadG!qq0KAPd zS^b;mR907(N6T*+PG|o&CATJ;FJHOCWcQ^4mWwmz!a64QQb%DSJ*(mcP7R&`Ox9P? zC;0C2Fspr~#A9YP5kxjYe!5EJJ73rDWp9ZnCDU(ekI%%BztY zS}dC02@f}fhKeJ5e8YGTvFxZdCYJiz+`Qtl3ra9Co2)&BwZ5&>*{D`AZ)SPb#3^{< zkj)(>&OL96HTZ-oPuC_2pA(Tb5z;Qim)|9F_xeWgBVy|drbs2O&L_^ddH!AoPsmZq}%jz6FTf}Esqj-OD*cjR+afv!+`uDH8sf2|f z(kAagB(tqltg|CSY57Ch(ISdk^l_;8?4w8r|58|cTiW|k$8ei+`|L17=TI>#BtDW) z5M|lca8X!h_c5HdDu-t~BQB%;7$XJOl?;(jOf*C&<*%YCBtD#X5%XR)g?FI`K@?S> zzU!dElGT1w+kzK!7$}tND6XDx!w8$$Tpkd|u6~|CBm zOj#M4MH%|{J!_(<{#Te!*lacFpqh$`68%2nV^ikc9A*fzDfi#p3&S#HuqA?@5ly|V z4*s<`e67R5-NKs2ZE-Yut$$mVY|(C!yxG}7-hV=D%B{CV7&?dGmTT?KYee-#yTks2 zT0Gv))|BD(7-ctFcJ~VH%zqZ= z4_Z49-J#}tHJV;k!`KDP4)o?23sx4w+1i@06+T10z2#S>dhlGwTE_ZIJz!IMt^cA; zjWw}xhOO=2ipLW#6Gis~Ia6ur9m3l`wbCz_tu$_EoK}7^V#51)8bXF4{QX_Vp#9R@JRL-T_@0!Io<#VIU`?|;d5V}ann<)ufO!(iq$c19k}5LJ>H3vu?DB%I)kvr z0iQGo9uK^1P-1U$8b%q#)~+E=!&63)OTi`|!IuR&4dZ-76GeN_N1S}$;f(wNO$y%oev7X-nSl64KT(#9&A-M!@%m!Mo->Ixl+M~l zq)@dcwh_7QaJ&P@?>U^@DoWpTgc+up#j<5VVMFo0D1=Xa_=%T(o-+OW3DzO!rjHC) zuoAV9eox_qm$&SG{>d}fPr3R0#{rA}{P691yuZ9IKv=t>t(yZxu7b*$0tH8#BPRw@ z{006e{BGdsgYQ}NWuF00uqlkK4HQjFgPf+HaEeQU@a~jn7`n)}+l^0|!xLv;`CVb+ zUw&7>N`1QgUE!>+T?twc(s?rdQqZa-TN45^MR;6TxG2pqsIS$xZZn6ARU)W^EIp-v zXe&!Uvco(^CaG?9lA_Fz>{d4IW8WUFim4RUW4$ntTUr%cEc>FB`QoGpc2_PhYGuB& zJ`K-oRSl@VD<2685FZ>fsXaa~)zG>gN7B~yiCEUrkdcg0LO(eDgRv3rXyw^CGL*Nj zCa7`;5i&otO{@Aw)>~A6>Ko9y=tb)IceE-te(s78jYXEg*2Zq#`NS&RkkzUzMSLGD zSV9Je2DK`>9N6PdSXCca{Mz`v; zh&47xQtM*ke7Ev?D(exSEj|r($O%EoT^iP^0^|rOj1M%4y0Mn2uDfwp&c@xupM9V) z3p=hcGt0+oX$rNlLXDZ(TCiN1;+)1T?1IM3tQs$#Db&L1G-hV|z-ZCp&+tSqnT3U` z%*D)Xr!MZ+n3;{i-F$#dvRY#nwpL?iM(>O%)WR<6S{z=>s#>DP%wnx{3 zv6xWP+B9Zn{WOO12kN2;>(Faaus<84F$<%I0n$)cFl?2es%p&4>{#1UD9)$G%#7X+ zUN3XGR$~@6USnpq9&CzCv5A-q)Xbg(oh-!{HD+e7flZRyevO&gF|bOheV{Qj`y8x7 zYF}&2%zgx$D79ZSW@a4A^Kz-t^DQwm3$dYmtbkE}J49k;77JD;wRRdavm~%msikVn z%&r2XAJr`^S7R7bU^hsuP-ABN`c1zLQoIt4nb}mZX{1%MnHn{-*G7AgQn3*lmwZ*!27Hp18ksYlv3+t^hGrOoV7bu-!oWsLtx#haO<);Po2fA~o7)~w5K?n%%w=W|gW@_x zFFdL-oNX{%B+&M1%*?(3!_b0uT4QF`p@X`|!@{~~%*=*?VJIQq2#uLp9T;u=u&|pn zW@e9og{4aIF`{7TxQ_UtPHL+(W@gWVb&=W&#I{AQJZ{3?jb9(`#Q&wlJu-~1Ri-`i zkipNWm{*VM*5-Md)++1sK4>WTqOzeVzp}pgSn!U#V+(iBZu5c~R&Z?Ukl-D~#}w-t zNBe+=yyFc+0_Hcx%|E%jq4;?HFeqOH?-)|rbkYyUIl}^OAEe~24HG?P#rQ@eq^Pv% zlpj*n7X}3HC^%L$bqJz0^baUh{#ZRADQ!0jKbW?^vcBL@L-FbQ;=PpJb3?|@|E*wl z$Qyb4X3nT7dy&gZ79ZR;ZOvO;9C*lX5ue`QCP2x5ELtoa6%eT`ee6Q-wA~E_7c1-M zEkNY7qYZiBjf;ryZzu-8YcX*x&RyV8gLm{FIR6B%YbR^mcyEYr0QROZcBWTDv8llz zjx>ZgoN?gu_N<0H3Yj(x@hNI34j83aAAgwNs%&{2&(m#`!gUeK$;W&1KqY3KGmL)4 zM<<>_dyg8M>ht!c9Yw$HR)(*Ok=^3jhb+#HI*lyZ{Jp07ybJShyTE40QO8r7u1$r1 z6JF>0%>omuop-iSOX-8Y+uKlZw#e)Fd7P@}7apB$ICDdbnA?%{^YeZ)x$#rQ?9P=9 z#oMV;6iNBlx(vQ}Tgv(>LmN63OO9jzgYx3WwrvU??bUSK*d@horOT7i%9$sE+7~pU z?suan78fola2HLcHfY7$(~i!5uOV+kuRJAYV~n8gRB|`k4aIJ8ai8uK zCo8d=W1S0q=$tgxuQ-j;Xk~S1H8kdk(zvK(b ztGLl96Dxmi4CjT)!<%CR>yS=XhqkFGdp2DjB#(~a=uBv3!xAEu^P4#OjVNlR!oq>b z7L^_ZP%BM)p|s$Jg(qaCO;qVD+D_82A{r6ZO4sR?#*PLy|7F^%VhUb(Jw;nc-D6xB z07>{;J&Tc@WoxS`?lw$i7KM*h4q@tHgLs%_sqGtMCH&TnHD z!E2(zm5I+DaSg(m8-rr)>}D{UTm9HPu&$CV0vjbmx9IT>>a2^eI$!y*WUwL`Zy}hP z%M!3|GM9V7)Liy~T`l7o{1_{wyMvw4ZjO;s90FD>*=(@xGVuzqB+1r*^^oj&uw=-)h%W$0sI<7CN22+zf2ZmcbD)SPUn&OxqdK|2s3_Yob{;r4m;k8|& z47Gr%X=7cWYD==fux>-v{lL_Mx9Xw$!RUtT$Bycu$-$nqL%`IuMPO>$7xd60U~1Zr z^w4Z95vW|3ofU$riN}JeiJP=wJNpn!O?*lZO~z6}tu*~YLHB$=Rs^P|oeZY-*1cfu zWvBpCTf7TQ9Ut~koa{~rwzCePYLXnV4l+p}uu(E}B!!By)mB@9Dl8{KMtTs8vhZVT zz|_!pzy`^L^n@@?hMopfuZy3->SU-vS@hDjiZ)o2sCikzQeY;nV)N6KcIQFH<6vx1BmGM3VyGCkXDG%=)*LMPQINrB!PutL#GGP9q%(YM3zQvX{ zJdw2WT`cWDw&f%zRZpD2&i5;?no*rJWn#>z`76q7U3rA~%n{elP+g!jy*$2mYHB9C z3G+Yx$2W2G;H*^q-Z;I5lEF$_DCyYgDdur=q*A+UohvJgy2C4%%&e?z{La}-$dW+1chwdL|3N^5;s0ax&VdvwqE`%w#scg_5cC-ks{og25Zx;vJNg zjIR2ixsshqTZ^xhk(G@0(4k%`lpNYV?5&`M_GU^7^1)VNuQ?a2-)%H6RW3q2JoCD1D$@RJy$OFaD;|;q`JpdD~sD7aD@Il5y%22bE2ko(P(u ze6w$!F)K4eG(KdAP^ywFV&hJ0wDRQswjHyR)3k`0*%?H!v1npR4SxH_o+SBGVIod; zx^jO1L1RjKju@Wi4{%J?yviwifAz=QXkxxz9~4Wb6si^rJ0I zIsB%NA#Ir$?`uo2V*4`ta|PzD`_w3D(pbdWE*a~G2k_YYrYeUkDF>tcCZT|7?}^f{ z?CtzOZ+_3qWMuw(tuPs>#UkTBF&R-_dCL;{?`%a*{6AX}XGpO=>j;2;E}oGa^)(b2K54WG4)ox-n64S<(a_nlM-|#8J<p+WORoXam=gA3B>zN7{qU|VI;*Wp_2IYryPNm;Rj~md_Uw;(J`A^F4AAe@RIQ#f`5`RE3f6^yI zFOu@7&B#~s_gF0HgNHJvQIewE_DLc#RUZ4~cgpRNPm}mV%ArsD#r}p$sGCWpkptyN z+j{EiX2`8!awDpU8f3F8V?P@xlYW-OA65>1){pt$9a4I)J&#C23 zYERB{l%~(qsS+=pno3DKex8K)OILs1&v4l$j=vKf*XA!VfBjs>{P=i6;B1`JD10a3 z`?zxN7k$$80x21Foeze<%&LhM^2(&{(c9v=GUq5hU$&`5d-iS1Y?X0eC7>s6|EirlQD5C5oAY%N-=JLm^#DV# zU3uVZ+1;;vExX%zI*E@_Qcn-CQErpuhEJ+Ao{l`5z+X9Sa(pSzrg}wFjj2trl{wu$ zifUDto+@h*#B!`tk&r&cp-d#d72xnA11dBt>zkvfifGCXN>I9g8^DJvJ-;1@U4pJ} zWpy6=b|ckvGcsXi?XeNbQKWx_)PnWoe`m5j65hQ4;C z>TIOpgwM8yv#Ff2e&xF)zES!9yV~pZu}>XI8LviJ+T}(P?X53IgJ-DQtVp8vK92&c zDl2O%)NS%K0QHHKy6hN)Lc7>{z|bMWtM=3>BT)!_df1gezK=$&l&BvL0w=)#mm8Iv0^Ha)4=eruNF^V3C4BcJv=u>LK zS6Us~X~!I=l|G(u7~9BCr51i#J1*Cb+n_P@@x&)HHTrn+i$D$O;|Zs?RrnO@!gei! zCqrzgmmg1pL~XjIW4ddx9}&D;D}`cG*I_)Q{nV4Y$QqBP?mL0=fQ`UAfGdCtfvbUc z0?8a{G4NGjJ#Zgz3Gfu~ULfu0SAge$%Yi=vR{{f3IRPZ&yZeFNfe!+&0j{BYPbtV_ z5XkCoEzk`lv!i<8Iv`o$Z2;Z}B(tN}ft!JE1D^yQ13m?W9fLGSqW6eojs!aeX@+D* zZ#;)%8<5PA!hyK&xRZe|ksVY92)22-`vZ3YhXG+Z;T{Qm9XJd42Jm(unIpM@WRCPG z5SO(3Y2aJHtw1tMdIv~mNhg3ufTw`(0Dk};1O5htMTUB_RKEQ=impljUy=+{?Ml`! z*U>eh{355M_kW=a)$i8_L;pIomF>TFhKb3izaGcHe(BpsG@X^PjH`S=kp)Ai)O11u;d|&9Wui04D19< z0(Joo0+KN<>|&)c?ie7#+~q(#8oOr#Gk~`OGl6#ivw(L3(Ua~*U@zbUz^j0;mtuH; zcEc`;^(C98!yx@3d=4B8q{Z}5AelD~13H1Q^mQiz$v8I?NXEG%fTMt9_J~TkD}cqo z=|D2hrOSRSa4v8ha2;?wa5M0FAYJYyWEH#@qzuAazzM*QfoPrk6JQ09uK!8E?}1Z* zzW}EJjW}(1@8qTnYz8nG2;)t6ci?Tn@xa@G6M!z@B;W$zO5j4^gTO@;um+?7_yO>4 z;HSVPz|VpA0wZxg6<{22Ij}u&74T{xW>xoi;Qhcd;KRV>z(;`h16Knd1g-_X1$-Px z@6^`;-vzohg7{%TYy#4&^Uc5@;1(dgY1sy($zVIM<>SGPIAt`4(E5cwEpPj89 z%OzR{Bx6RZtD06Jmc1C~6xDv*CjiEw^r6M_F|pNT4D;Q9!y)29Kc2`dMUx+owah`X zX%#omsj8VMmZh2;EB(1ipPY8d^jGEry!DVD&)ksKV)DULU9<4{Esh`2j?=Zto41&I zw6#RCKKaC>o9IIY>T7`yv|K2F`tyX3c;BB-a6NQ*k^6m@V#a!#mRQ|J61;$*|Baerm&S>+sjx`;~P# z4Ntm2=GetbGw*B|V--zi-Y?-6Z3t*@*jR7v_!q>bPj9<8ayZQCHxzw^6WrIr_fWaU z0FH-2ks84JMR~3EJx@BGnuwGJXSiP}@cn@_yHQrKNi}J#w{J z>L*hz@F~?QR;C{6$IDtA@40d;;!lS-{l0^M(*1+@RDYTp0+^2|JssCJXfgumX@z!P z)!W5mLA-Bwufjd`@p>epb$bC~(+8J=IC3X?hO$BaU4!{`)Ve!^(YnpzxnMrPFvli% zfoZ51=`{L^p&{JPnYbZ@_YyDP7HQHgQjzHCX9E%fS0W=ck}byfDe+MV?=F(-e1nt| z!%TdRh_S*<@JKIT`%sEU9}~X$lF40iZb~}>%kXqyA#f0I6p)@EM*|lC#{d@ruLdp_ zCpHF$iBH0eAyo07tf=_YA|aILne_A5v@6)@i{Hbr`o1d^EkeAvLlJMQ_!IHui!b@2 zg&ZePU+xseHr@%%yxqo!Q|vcwi2Z~3-Npx-JkRK2Yg}Zwc)`X4#0)#9_ZMQD9nrQ? zrjgS#Ei#VAg@{>B zp6J^SMx$Sd>IlrV&k{JqC);_TAKA599b#4lw+B_%mdJN{5zyL5&1R~_3nqVSm_yt> zJt#UR&Oxu?$E1`D8k(0suw=|w*vJjf8;hSJ{jGrx5u0Od=NpJPTrA5m!uTtU2N|Hp zh4ENJutVg+Z&C|G*N#ZpD0Wq~?Sz2dJ&hdz--U6&iWBkevd9$pJvyJPf8L;xqw-2d zkI5Z124*p;%suj$-2VA_B?E_!!aGF-iJ9Tt>3mrx9Fv~vZU6hSxIdh?=P!%hfHo8b z4N6ay7Qj71k(l-tcGFCZ@%{lL@!yyow^hxKw-h=ee6Lv4hV4NF!&Nz&AaYIDs=l{{T^Jfq=aTHXP{aSlK-ZBXCd znn&9|K%UfE*gDc1nOKCJ6>It$;|w;3C|ce&T-sTBS^qlxD0PTKoR8(s7`)hqwI1>> z9E}>(PMI`QGl8VemIlI3X`T9$7}1tTk*#o5Kcj;m67$;fc6`1l+ZS&0*auVDU&92~ z7#&Tm?XJ~&3~bP+QPrg}mS#09LT+j6%Ri@@MvA^M+}EI45cg_kK}@Z`4fh@zgPI|& zYMgZwiRgOOCXQatSesiKzOIsU%NA&HF&bY-c%K94}vMpZr#?9@EySA_|rn7U0 zT9C(1lTI4--&-R7Nto~_fF2eF1B~qq4%ws8q33Wy(3$i))w=V4H->H}@P^8VZx<$t_1`J+X&XZ{KOkcITf(EMqc>}rd6f|d`Ay-zH7K4}h(8i| zw5L#p)nuo5GMv3BL*a($rxas z^F9W@-jv8w!;ypWY~qx%dT1wLoodINtd$hU0XezgJtQ%}~;O`aiKH7lp%(KKy^S z9gm=%d>pmJxz`fc&cRGBUj_ktabn3(t*=hzYYGp7$(X zA_qbFF z<49Qj{;g%XIBzpJ`LCiZ&k_!A8%4H2)y;rvP2QUp;J5-bYjT=rO=_RX$y%N=8t(L) z84U@w4suW|gK4-O2KC9JX$XtdB? zH1wc;E2cc9&k=hRRd}Q9gDZu~5vZBXTO$yNw9<(Lo%BOAvxkX(#YTTIt_P2|omW#A z&zyoai0t-0;z*bw>fagKubdPbX1L!be(1p?9Z%s$8I&>#ci)N{EQrXk|2?s_$rK?r zTy1np%kc)A*b;7t(9G`rXdo}PiMx_{E`LqTyvCR;4sQE359ki>`tI2W*P<5AL z?BTWpQyRM8_DJO&{%V|0=lN%wIP$6~22W=u>+Pawtg)>eAUBAusd(IYSiDK_H^%y5 ze6MJVGT68@%I`v!_&nMWDHojNIL0m>ghfApNvyff81_Hd=hH3z1#v!&$D>C>#u=UA zZnce`g*G)(H{y@%cB?){Xti8Rp)@Y(7jcYsPa-*KbP-F&8N(d^&a}V1h#QaF(yL<4 zs3jLu483ht`>pG? zcdNhdn-Te!%2Htw^8izg$A4wgU_KSwA`tJdeghtox^3r+?=HCGiK|M_4Ug(sJNHGr zD}y~h8QR}qkjCYPEe2^>A8EmhoWJuUfX#u+DE?NXSQBS(mIdG?@89_qz}qJ1fAuG@ zRO%VA``H6Nal;-Rvu$+h`iIvt_L-W`*tI9t%rzUM?i%vvsL~O?G3|IPB3a}$>|;*GhVbW^~Wi7iNO zIO`|974-F2y%M$7Z)MC|DvO>Zoew;_{;4we;t|l zQ3Jk9Xs6G~)fvPiuDS^_Nf#KCa>1)B@3=(B8h( zGpPFWd!F&xP1!hSCtM;sFg3M$*DUOJ9V-X%Ha%#=N=;JvKTasVy{fg|0$OjuOBVOi za$R&B!d1Ke*86dgiO=zEuRKxCn;7a0S-$Zfu50S03P1i>aZLq8T2Tl=A9yKM1)h~p$&TRm7LvHIj zOnL*To?>iW#?sci^=>ZKbZM%0j3Ll+R_prmyj2>&Ck zG{o0Wenm}9Rn0#*`TxLQi8?F!_rUNUt85QqqW{%{!hJWw9c1`*a}xMV#{c& zI(=8e`G&ZwLzsH>-*Ba&U%}P%4(^{^UfOCw{L!nmH+{^V-Nd;}Ll1Hc(rRZM9)Cfa zGmgbr0prIp=Fe!?F)@pD%R$V{Xw$^CQX}`$#LO%PtWatR8Z$H6R6%WHET{K`bg{slE3$+)LbS+ia7UY@)_g9~;wTwaCW?F*DmpMvL@2q=h}DF*ADsY`WB5))@SmfX$HFL5-Q& zJ76=V_P)l6^mxl%#3XBh*{WlUE2b7qnbivNP#6ZX=YYP4EwB*WQ;B@2Ad<39Mc$v zqsA~C@mze9OhNwph+#N_seT(0G=|{_ruuD2(U_S%2u3+uJ(~W{WJ#eI=XhP zu0=h0gM`NnXkkv95av4I*%pL=Ct&!q-P-15G4A`Smdro5*aP8ErG2k?2X7B0R zN4n;d=!s|2n3*N(TDq=Xqif?_x;RM}r|H@pUAtA+?$osgT@$+YfUd3AwN1LVL)Tu? z7(A4`p^IDd}H!+pI+TcB&tgRPS(eBj1}7(Cc$3=W&XHb^Z`W0+*Y)=O=S#xNYgo{(C3XOvGA z;}POUDb{Gr%x(tTEVbJ-W@hzZo20fxV`lbS7f)sW&=}kob@gbe8iP9>T^sGuT&zSF z%RM5i(zRM$bLrZAUAsru6kU5n*B;Zgr*&#hY|-uC6WCwYzm~m99OgYa4WJv#vd_Yddvq zpROHL8Lj_5(8c3=#M8QVR@W}-+9h2xrFyzQKx61ZU5nPWPP*1j*I>=eTx$3C*2N)u z#C%=5R@cVsTD7j#>DuZ{#-5g==d8vo?3~8TtWy@Y?aGtgO=D)3Dp;syP#_qbuHj3PudWTnb}^j7m=So z3+baWc$(7~+!N~BT*=UWGdltLl1$RAugWYeSz~a*r)&4<+5@`wh^}qYwWoFMC0%<( z*N*Ah2YoUBQNdVZ^ur!WSp~PoENp?s%e?k;8sYyVIA&JJYW*Oqq5;caWJTOE+yy+SYqciu%#Nqq8kkVqma$Sb|jSYU(Eqz zbT01Rsow_9>aaw^|g|a{G?_ zDt?0@6W-hwZh(b$WxYMOVF_7vH!Qn^f>iYlpF60|4NE9W!-{^`Ti)PvSN%e9Viu2a zEm;c{-nr@}X;>jsFC?+o9pUJw;3YK5Jh?_gX^^1}0e93dSuS&=e@8VeTm|rWUNbG+ z9lUUnSHg?L)k-$Vk}B&1`lB=#<#30rtX4nDt=_)4VIh&i$w=q%pN359($!}4TCy6U zw*@q;phnfNpd&T=UJD-tzdb;WSHFag&iH=gK&!uLq*z)DDMkGqv;g!pZUsfHUnU36 zLfH*V5|OHY@ma)KvV!dANA2iR%L@asbM#g>kA@M=HQ0o4?!GEAK+>7^xQV`M+1p9s(IY{S5Pe ztDN1N-0nTMqv8(Ujq_>ZlVip_-d=n#pARse#Affq4Lrj2&51wIkOI>i^T-_l{+C7N zU92~JLu-2EJip1>tKdRyhp8d51Cgg^R0qIwVK6+Iz2T;`G#t;|EE5E)38Xmy^7|hW z;0k1MXNJfWp=t{2Uy9iA>jG}|=hH=-yLlh%e;IN&?{ECcSJpm8Y`U9IHB9yuAxp8z zJ!J{{v7;EVgePzxF>47==WmO31ow-Nm!J=32-8xYmSvIsc_R2Z!~BaC=%j)Z^P7yl z3Xa#NG!#Sa&*xv9IlDdN;OB}A)YTCUdEh%{E#=2J-?w8>BQG+DRrm54{hKJOf=dn7 z`r>n#7=oWO&Hrss@WMXmj)vlM^Y=vb!Wo#~1BX)s)u!d0^NefsUNFo|iWELLrFIUY z%L+}Ko!C%tZhn(*uY!xU5mSA&4ms!D=Y}&wMAdwrVEhtR0XT~>z9|08yd4S4`77L% zLMIf%Mesw|-2dka9wY)P!Y#tSlH0}TJEA&^Zalipj!`Rlv{4MT`gG@`#6$P-_|zmi zQw@0mo(kd`nH`Ct(XebSwI}Zqu2bFp;TfMZB26@%G&@Dfuo$z5y`P_O!7@mie%RSW zuxoLC{n$xeI}bKWYQKP$g4r3F+LcHa0#+nLqrnO#>jXAZGI}FiEE&BKzDBZvU}Gd3 z0(LdM5rIoBP+G&-*=u0cl0lZQV(hFJ7%kfDtPw0hCMJh<J(Nc9bR%dRVt=HKhodpJX8qy7{v#fMB*lbzV zVm)*#*j#Av%eEi%RvG*u*ex>2r(mU0`xZ>?nTudI%TRj7e3N9EU~1ZYu-j#d`Cw`a z@?xik9t3mCP-BoMbOhKPE-6-mUMJaYdhm~6cS_9~tiIXwWB7wkTD20u)I!KR-9p5J zb3m{KlHCASFVjxe<2?=5AhlDvmS#oyYBuCyZix&Y2X?n)Gj%pkXMcjJDGEY8Y%bV+ zGKB)RN-}aj-5tzNZX*#=qrafFQfddml8Cw35m0q3lk>P0GU6pLHNyhD$6hWqa^tLC z8_U2HsnMpx8p&uA#XeFWAhL&>o19?90rP_*C9j(|QalU&f5zr&+N z>Wqvc)Oh`LwhZhcnc+&XQklzIFtv}ifITQfcY-}2nbYYB?drt!-$RPY5Y=ATr3Zhg zvyd;|xOb^e>Ai}!$K$cU?SZ5vpo z)Sd@ZtNJ$Bqf$EtRtjckr@+(-o&#GWLob1?mh51ZC)5%RvrnmofVtERvq06v&*RRI zw#9i^I#_QRF9%GGcL$hS>CIs3b+8v~BctnJKUgW4oxKmH#`^;7321)o9M}dhmmj+X zx?YM);yn=`1iMOVYrxdvKF~uGaTiiE9Hz6Ub@r~#PJ;E3xqJnt=Hk;18waJ<25h_w z6eAN<&9F{qYjk!4TSa@^=Q$st04U{R8z|^cOz|{Q6Be%*<>a1Nyk5=Mg zF7}XzviEcr+{qI$MQ4xb>?5!|S@7pzkI6Rq;Z~;>7o)Qxut753bzo||TlLU2lDVk+ z-_*sgbvCq%C&Q<}y2)%l0^2T&`w2`)X6dTFl(DlxU}_bn=ja@2JEYm|* zcg6g-RR(W{xJ9xyC`-*o(b+DY9Rhn^#(M{>6wJ;}=%Hu9cF53+V9!a`9(SR;WxT0i zYR(&U=K4^lZE!()X^V{y%u>?{VuY_FU%vt237)LhES zkbgW*Z+%u~W)3?c`+|~^2iVNaGB-s5-Au_y&1Q?mtmwEXG4=`G$(5CsPJe*jD@|5f4qMP%f$P;(&6I46g`Le6G<0us z1)Tv8NM1Q-XC%{KVE0yBX#2(H5{9(N&@2+%%|Juw{SC?gR3PO9eAY=bFxwyIX?ALa+2ZDrMZ&IHh3%9$*2%HtI<5&rm!*I7h-mDRyrHsT**!mgEsLw0qrn9(Oa>AgNwU~{hN54tDCR4 zZ(CaOq#rp5}ZbX5HSamA6-(P^;WP_#J&J;g_eoTmFO+eDv?e0 zR?;b_-aGEz%v1RILRn}Wx(r32)wp}N@v3|(+Qx=8Q>d!lnkkfDqORb8ZA5pRF^M;q z8)8J(Q!qj=6(gSF89Yubc#5|hS{gt_P@(jR!SEpO>Z;;tDeY6Dw#$mimR^!^G)1=b zf;fj<4IzPI*9`v{-zsF(D26=^Gwu*E6Oh#yg)VZHk%T=805EmwLw{YiBvaHe@Ap5bO-K!)xp~fI+rckeS(-kUr1oA#6 zR&U|=WYJb6Jv&*=-43tpWHq;YE42P*n?>bT-p+Mc22hRBneuGIl+>#;(-HLo9s;g( zFLljXT`8%ptC?9oqnfhBn>~hZ#phq@+452>7*+Hadaj&GxTs;(E?uJHDQgz*T^JQ_ zZl+KJPse%3p$4AN6&#S$8uoyu_>n;FYS_Kalzvp9c-*SaX9;5>%) zlZw_usZ^mYSZeA0kxG?b+f1P6-+`1C! zEhvYZDfCiL{di6@z1*Y6Z#7j(SzXn1PZWJ9_@bv)>v1SJ3d$BQ1&?&J3-qv;gx`Rm zoM@(y<1M-kU#a43U(tA7K#YB|UZ{sG@fGJ9{WHYo?Y!QYo}4POpXJ{h)6z0`bbgMn z;l`}ARPojhm_)mu=b6Dd86HR9*|>3(2v<3|H@U&bKQ=2TD~*-Z!3tFF&n=larM!+M z=G`=BBkId9K?@vl9T&`ziW~AhZ!WF^Jh>Wa^ zoMaiH)SS;v*jsjX@S1~kF`qwcg@Y4i-kTk*6K}yQMh=ICx2i3wkgmS{oapaY>!qu2 zv)iAs50~K8>xz{x@fho2JWq69#n^9q)D+)}tjs>j#W%$_-IJlvg+$6vI@UmmVi{Z_xclL!7= zFW;a2KQG_^v6pXgb~ktaBRAjuhK7ZOuEDsXJAg?YDC`lNnB4@=KL^CxCSG;@VB8RN zpU(k^lLJAHe%0YExt40-gqHl$J|BW7v{pHxjS)-ta8vk5WGgQxat1X+s|(zOh%GNh zIQ*!R`?%P@hkt881)qIYR`82g`CQxIR8Z9J^y~P!sjC?GI*&7aU=&Bzhoy?AU*{nd zrRjA<87j^pN;`5%+|0ePUMCw0rtY{!6uki_37bU8X+vkjJcqdJv?1C!-@(Mmr+mWw zmZ7~U;LA7oEtGfJKIA<}H16Yl9ON#be9FXT4yMA0c6$n%;K+Ub&F}&j*nIK#}++pXU7AnmRQ59h6h?)Xx}(XAkjVrlE93 zW>2UQ{pP}x6TD3a_&tdQ(+9>K6>oC`58aDpQyi*-zLFnQ<>tdYA&~TTP@V(!5gQKk z5q2-1)6`#dp+*by5uWSta=@=w4ujJ(~wI~V(U3`!w0Bz3!D$cg5F&LgdaiaK6o=w;F#P3KMs5v z2tSn4E%0+<%Q1N1Lqk72hCY8unBL`g83sGV@^^U$doKFR%m4La)FMS3dY31fuS`nf z&xd@&{Kyp{=8K5;__zJZGbi~z#EFw1ay!%!(;Y2V&f`nIlw10-q%?SW$mnToGJKbv z!Ox~+-{&iOUMUE+3u-@mbv;Q`jMsqB-F=HrAMhs}-=ZR)AqGAanKl9RbBM1#;Mu;< zAShI{`;e!U_r)2f;Z5B}ANt{ij^TK;+3`ayj-PFDyph_7k0+oylU% zM|`+zJ>nJMN3|y42;e?o5%3sr6!0V9Xdu=8I^Z|JaloH}HvmIX{c<3^7n%r60#*X4 z>n8z60X4b zfDypuzy#n5U=na8Fb61rgMnCTx#72#w$QuB0#^fP0oMTQfsX>00UrZC0bC1g0f|`w*ixY+kyRn&jH~)lit?4uLeF3gl|mx z9o&5@5HDTbD}XNp9|Yo+s{3JJ6Yx1;-X4%cAg=<+mTNEYBj9VmQ^41OUjq*Se+Rw^ zB&#m0BHiJ@w}DaO#BmX%dl!{&vqahsgPa_X*YS z37$)>zqrlc*sTp6(j=QBmc49nn$IA+AxMg|we_4$JpM&sh_Lwa0RFxR`jq$J`J&IK zyhFD-M8k)sN1D*QJj22_jnOIt@ej@jyHzxP$~(eq=e({V^%Y`;;mKn-QK9l zlmWE@^G?cV{0Q;uD1ILZ6?^+Hhj6tOJ9 zWM6p-iwkuuh}cuy)>~gXkWXEjH~Y)tFkRTyc@*6*KlI}@h11+b9~`e-WODdXMfdR? z^{03wr<>9L$KHE@S5d8P!)sSvr{1n3B4sDKxje&p+^%0ML|QP2uLR=D!79o zNZf>C3=1n@IrL@=Dq=tcL{Lx=yMU-5DB*~Tfb!kXnzdI7cuw@Z=e@q~`u}}Fo_p?D zeb%g5Ys&pR|FzcKht8(_Fn;)J?eP{hN?L0QP&L^UGX;Ju4%(ILPiQfTp6k7EKSOR9 zsxH9PrDA)%LpRct3{Yau^nhDh1!dE{9FVal*v9pgrt!urpy%^Mcv1 zt6*ssupV|Z>;~BVu;@btB>aqvRl#A{mtfDrz6$G>~jtf;OnVPXuVA zrSd-KwC?)a;L@O@@w9LKIW2>7J$DWjeV51mQ|m+1t?2WSQG7_JfN-BQ6fVe{ulT2S ztG0~47lQG0GjI9RpNrJ$2)+I%tNDb4YzN--JS1e-^1IGMtPy)xpSSk@d|qqreG4uf zgLvZ4+8Z&njKb8~a_-`p#mZF$-_Soc&6@`O?Yz@3TBE9KgA+&Z&~I0+l=CUSXyN*b zFh1%1z{pghPk^S^a7IHHGgo>^q50Sa@KvWC zd=y=K6#nB!!8RdcFPw1`M&(Z(J7SvPo};``^1P9E=S>`8dCu7at{K(lj!83WTwDTh z>TTy!f7KecB%hTdrccFSXb*l8;q#HlM2tpoOoc64Ki@ryFQB18nzcKUEO-aJ_Fki7U!+FXnX*hjqPLn@&)Z7*F|It;czi$!i7jkYtMr1 zf>Zbb*j}(MSZMSMhbDB&KZx!7VR6AKco=pL>~h#5SenT`1WR)yH|&1c`LLhEmcX8d zT>yI#_7S?+1z=1l1<@O}4E9dgC9uV?9M%o{IP7}ZCt%-)T?YFNEDeIc!J>`@0cbNC z4C}+vU`Q)~)v%ecG#Jurh8tjiMhhp3R;E9=j&w&!vH@+9#7R|l5sNkA!@>E&{*&*# zsJXQtdG;l(MdNC#gsPR9yxT(kfUYZ8Wv#fRwXe2RqY;M|%x(Gim$X4z4)1nZ%WU!@ z4hMb??A(H#bfv+mluN72X<`kx6)Y|%YcJ#6SuXnsT|B5Gy`%HxCv|7Am4--&N{y~l z?|1D!*J&`Ap%-{#|3p{^EKSstVJE|Og{6sle^~V5f`PEpVKIlGPo@hnSD?513hscV zi97m%n7HG3i-|j$lfIKKpgI)7z70DM_CwfWS{WP%co@W4*b-PTlz$;?3)n@lePI{F z4uPeKxeN9&SU2qBuqK%FC zSq);5TlwNB+}pXPTy_1Lx|WM|J>nXo)eSUDS+WIb|6QeB9SCxLh!735gl0(r@kKu6 zVsKa(i2zntYNU#N!Y3GdR0usO8C*OoU~M}9bqpu+c9j#lM{!tE64WZV^wv@R^1UQ!GXd$8A)XevBZEk%>FH-)bd*smn6X25){;|3cd&Gjf53=@ zX0CE)AX+Gm$9D*>Ats$zf^`a_XJky8VJXu89sTHdeNY&06AEVz$9e1d^_|{-Di=Nb zV3-phKftSj>{=w?E>y$s;CX4m5j;E3;iaDpuBIXF;6c%mUd?FMs_H3**sEltDc9&Q zz5wFTx<@N|E+0P7aJEUR-5LL$Tr`ge(>sOL_BcT<7uND)3+lt&LkLg*H9Rq$E&(&G zWAK-SqiJORkpCE_M~3&17Z!2;iGxcgUM8PCI>aF+GE4Y2hkqo`cIsZZ--z?tVO^z9 z@N*06M}?(Xjdl&CXebO_Ln)d%)KJfnp*g(BlP=hnesoxP5HQX1X;`>X%<^lhNZZ4& z_OC%%J&ab7I~o1bbETy5^%|ZxC=>c51lLrlLrq1vm+v2JL}}IKs3UN1p#Dup zR46UCsdrc|NvR_|^8Xn@>b_SCQd2LdMbePLW~vS&Ex}E z?_=2s?cbxhXhAnr2dvx=;#Ie`QkgMT7F*fA)C0Zuj5) z`&aFbSK#qjGrJH0*XP(RW$7>NmeO>xpQSAA_Oq0wzrnrUYbi@N_9yTOhtx>J0n*%8R)e6*Q z0el68`w~`<2u}{AV8dH|@xpCm?>+aK-`qbwdA}GB)kX?_#j2^P2?JjG>hP3Nj;^DA zjl<0*2v@g2>zL4!Ck^w_mQc06CCJh~H-mW|_^3e`d4sgM+NH!fcgJq3_}xFK^*u{2 zs|x8vm&MZfGChN=w^{2bq-KDTSBy%)~?=DHrMNds^` zoM2PB=fwW2Ma*x)O=IjA!qzsNHFegfP99^_Rrz*V{V?9MnI2p>g;J$7%=@6 ze^LLq?()5Lmni-VLci^U(s=Hxrd7$!FPaf`YoTL7A%jWnlP70{{8b_9zbJ8AXT93L zq(Y0pbyH*JB)na>Mj?&Yx`jN5{+K#;2z%Q6Rqmn8vl2QREt8-Nv>m| zISJp_txrt}3#scE-B)YOgMRd`TQmO$8qReb;zW~tnx@;e5ggxlG#A6&l*Zwab*s3D zj+4TVC#C7$b&G@RP8uH`A1O!U#^H4om-ZAjh+iC_S&{#)!n8=LMMpiL$%szFrdPd_ z4W}@*-pRga?8Nc(PBt!JtxB)Vt)m-*yt=w#;44DI>ZVpN29)f0|2mdH)Ua7&-LF~Q zJz;p_)N%gs7hOAu)K50ngLvey(0IX(kO%^!KobNvRU!zC0^xxq z;?9x?n#_3qYUN=AauGCHGex$N$YfcH%Te4I#f?`So^lD93|}@tB0I~L2(r+MTduf6 zKv*B3!f~X=LeS06DVIK9fXwvA&3D=WU{9f_l)AUC~hkuyw!;8Y*-mh z7s(8g2-?CDnQS4@-6H8yiI6l99vvgQXCyM&dLTST2De!vllf!OL@C=DX}S}h~nlbj&#i_6O+xy?KnIvN1;EK2=d|*LE#(=u?Mi%&O!x3 z{Y~}-AVsmWV-lGxEX>12N`xXPZiwQ};MD~@lSg(W7EZ{{x=3WQX+TASyGJ6EJqR>M zaC0N@RxLr3Ee46DG$NNtWU}Qz4+-u$iA=T@XrACUN@U54%ZwwfBA`=8S=u|kEMFo! zn<0_OwgSx;skka6G}*gAC4wZe6GA5Y6lj6qzLdyh-vBKX+$o7n_A?M(EI{#plgMOn z94th0?97zNWO|HMEIaeD5RHE~DDp;$Fmfqwmg0&PSE9Jb6!(6@~#XY9D=M}eFaTO9lpLVArha`yCKTxOVB(k$r5}E8c z&@+sV@wXD0>>SXug8Nw_jKqoJ?QMkflE`Fspyx%nK#3qf546H1$ejd%AeAbSot;oz zrQ*&jjy1AkAQOq8ORTsU#Wihgy|9e)Kq8z65}9mMW8}X|6yYV1giQ7(&`QC*C6USA z16nP(4uy)(oOo?zvfHt7~zN}?S z3qjyjA}IJP?oq`Z0NN;G#I&-IoyAFHvN?*I*9zkw1%#?D$W0+3vP=<=qX8_Og@mv6yoDl1Um~#w)SEOP7$9ZxX`S&ww7`XRLUhX*)YWoSKO08 zJdrqE)ixvKwCtN3W;#KO9a;e?J)k)Zabqd$q7MA7wA_$h_Oc^Na;$1i&F<{FRqFbp_c(|6)|>_J~u%-+ar<5ywk*2 z7vSni1jiph6(U@OL?%lBdQ)&sBr+MqK!g~Mok4L#An5i3;Vm|#mnjiu)j&JIVf-5; zA*R(pZ;5~-Br@4Jpq+x7D3Qq)bo3PZ5s5ImD{hD40y=rZg-B$wdlYv+AsYWo_K+go zD&TU(J*T*cuHv&2^nj5P+1VJ0Fkb-LFN*q{L?+t^v`=s^N`#^Uy(hRGU6DUQlkErj zz90`u1mSp~1A_ZpB9nb}omB)o`&uHC#dq^?jU+PJ1jS8J+$_b-_HZt?RFO}5NY*CZ z;})r{L^xA{mWsj@N@TL9fCdY0g+v&>fo>AqTN0V<7|_jv`$i&@Wn_@zF;*gW){9_y z&p!IE;o8@{%W%EE|JyodQkL@ZYdT;5qY>_V!3QavdZK*Ja6Le89sw_C#_))^^4t;nEqWBab2~0} z4AO-_s-HV2P6?Ru&qwKLcqu+?w4Sf;G`M@Tek)$#`F6B^i)%gw7lOG$O7+I+?Z?%# z(hyR+Dh();##rG>O6WVf7TckpTGCTDi!&=v&pO@1(inz*D>QMZO-~)?Vuqq#~24sj3u+|vqPNV_bPLC-pHq+JL^E;D}2plydSy0eD`F1ilz-K?>JR&rSaD%ApdoD z$J@&9pQf+y)=u#H_v-Cp+rEQ3qjOGdTY)-{E>0is9_%PQu1ybiXF3Xx@+tS~4p)gA zuhP#exq`n4y*s1N`26XU+~=*1km=ZdA*k?ZV0PduB1FzO+&DlmA%9ElnB#>bPG1IO zyG!Vk0cd%<^(zMocP4f|f089uX z2_;bq|KU9DKHb|@HUnL%xQxC{a2L%aTy&CfRzY#e8Bx$V#buQQGUpW+(U%SGtog+y z9}_rVQbvhE99xv956&sCD<2f@^pXXF4zs(@%)(O%y1?=qU?>YL z&j=`VU5JKwaw z7p=ly6pEFI#zNmA+H*dmfoaoliL|Ve7WWI0(yj8SWG9R0Puawbw zQuIN7y}~z!BM~-z7DU)-&zpU82%iI;Zs0B>Tll?JEC5v1X|uv+Wl{JB?PU-2beB*L zIqou%v0kkaT*MS>?lQ^~9a#kEd6=I4rVoHj(h%_()Zy!&)Z^MOeCvvF(-J*21neJb;0&C4HUX&N_k1o)89y3j4fA(b_pBgO!js zM(mS9tDTp)^d>s=#b0*me`tK@G_4-D&GnBc|8TaxQ-^ZG(mDD;S5Tlw>N5uDF(l?- z&46g$;KS&}g6;yf2Pyz^F!GAc1-cLD34ypmn}DpiTY%EB*N43UR3O69o4#cNJpq(~ zQy05e0$Ld#1?nN9oKaj8+~T4-Iv8ml&lc!@phpDy0Vq!(Z`{tZP$Px9Dn#$F_e3}! zyo2D$?QtMirXZhHo(l0be@ zmKQ$<>jY#q<}jc#u{Rp`%&d0n05nr@n-uy^p{N+o-mWpopKeI_undsHMU-qHE16+H zbPL0WkuN|R)_hn#5Z&tVVS0T_Hrm1bfUFqpfi{U$dMNHbAgc$IDQ>w3x!8Wdr$mA$ zfvh@>Y~VSu_5fM6`%!T($64!YANCs1aKv@6-9T3FIRs=C<|xpM*o(sn^nySO;;m`D z4=V+F9p@h+KLwbF-43>(p|vdWVF!UMPD`*j2b%Vt()PS zVS& zpEjykV3Jr`%`mRiRMxU4)wUgrtI4FaXO3D-60_B0l2b+bKw8!4&;f#|7xZd{?m*hJ zCu%XSBu3x%RYhx`mdy6mWS|OKQIl!kzLwx<`}Rp}Rn0JvJAJYy1HIlwwU`u$ht#Cn zwr4YHF-dHEO$OS5!)r3hX)L=Ilft^xWFS-8v=)=ZTroAMb{$ihqb8G<#^|fbsupSo z_jMPv8cc`w>`W~N?OKy*pIS>bwjJbOU!pHMt0j#t1O0&NOlo^l9H_x0u}5n%5VoCH zlfm7tf?7-pn^BWVZqLSR7#XW&58c+0H3KC!y)Q%~&WRFwR+Sigj zPEAW9Wsd5xAnh85&yTB9xHIRd8K`{<^Qy_TYtJr-K2C{|$Z-mkndw(mpp=v(7FUx& zuj*ct!HvzyV8&L9hO?7KvT6)^^_*HvTXB`E9wtr9m8vmNI$T~O7O52+y&deFLnD#Z*dDD_{Eauk?13BeQHJB6!+Gk5mDkYg8 zTC9)qBk{xUQFhi~{?_u$NAx+mHjVFnRKL{WD5hrKqE;Sx(?c~F3_on2Vkikxhg!-n zm+8?ymY^lKFVUl1aSS|u2VnYQUQ3BW$rE~W6DHj~O6>A9^|Ux!%Av z8@M|rlHMqz(0;{O1YIvo3RQC@cLcMqI)fvCyT^*5(v~6}a-UIEv!^K+!N`<_s_YC* z%~Z;%7(nq!cnyk<#PAvnoghOLgAKL;N#|gySe4nUU|QE;c7iDou_$}`9fGN>!JIIV ze;j6XR_!SeT`03_Fy6SBlB;OdLb#qGp}1=GfTT8KCu%U%ik~Y68!Q6ptdoon5iG%r zrgrh3q=`yJpr9H|CYZPy%U<$$#YcOnRpAxxWEZakrTYes5n8n-{GA25>B()gE8>I009?UGB| zL`Lw;r}RW4B{`+kFDj8g`IH_On}SPfF1}s4QGC{kkBIU{vc&W|^Ttk0?2wX@Qkvd6 zod5Ea9?XA#)EAz)wrEb?{%L(^v$h?RSuROKOhpW-50Tg_Z|wNQ4rvg8x5R8aq@^VB z*Phmg86A^4^2lZSV@7KGj-?fQ8}im8ydwD7WqPiWn$ni%EY}n3)l#%gPEJiuX%~lI zm7?vwr5anzU1fn%(Kh7c!{|>M^r?u2IcmrIPlxxzO-xT!DR5b@U7 zMn8na?{s6e(=ky3RTLpA0bYZ>ZZQ=HEMcRC4P{ zcZ`Eanl8aCjvixTfM*Q`+LYz#XM-Ciefj@O-2Q!u+cqopu)i#E%b#DV2kAjhUcORq ztp_^!cPsTCjeZN0QY$2=;)g?}XUdl*#?8k;xJ#U%Ogg+W)Fd8dYWDk&db+14H@F$0LDC2NcyH z2|iMkgmhp+oP5C=yQ7P7+)esk3ff|`6?Euk{Q)azdmi)xzJ?V+oAK*j&|B%v zoqWOzdO8(h(+m2mRK~kr)EkO2E_}&K;LVrxiBk&o=2z1@> zqVDwh4C4%n`ct_qYWS-tLpvw${i?n|hcKI#Weerszp6Kjsg)1uRjGXV;=Zw={LKQJ zAHV)JJ(nuK@il#%sC@KRRjU~O-fdncpR!e7bafxCRyFD?F_b=czYR^{PEMZl29DBM z(nMT9oAKN5wHWHsahsk-cG@;Qz8mT!B!8w`LnrfWlP?bXHO79WB{fC{q8&My5TV2$ zZqx4*CBC6TmH5qndkB`IoVA*UBxF_7FggUJTZBVUyj`DR)xyamcIcscXD4s9Lk|z} zoQ2fU7g2%^e$x&;hpM)Ehu$#RQr|Iw< zhY{fuheU9)-TaQ;kD@;NjurL!?OH6KzA3ynuUHyl`fh%#C=VyIH(Uh6;wzN_n6#xIyxb;nMd3=o9M<3nq@+a)gIU!fsu%ZpMR zEJD~mSd1Pw?$hrIy+&K`gZuOZ?V-~BmGPcF*lIt-Mv{5@e*Jnq$H5ox*Aw)?j?x9^ z`op=ZKGYR2yVbX{G@fpz$wTYe54AG!8!f}1l-u--fT~+hc1utA{nlzlb=#A2+q1ui zHQjBi#C;1bLOgV!1j%Cq{X7wVQrrBx_w{feY7+Ffq3`Rr>iuXMT+f>oWWm~DZ-DiK zodW9*`v7bpYyoT#>@%>zup43V6+yvfSWLGIUiaqOOw*a+KxRFW`JWvl(vnPOfmk_L z{U{C{qg|*ej?v8@=u7@>S0l~LWFGRN-V_Igcli(_^g}%NLp@d=J}rbV`A{FAE#_Z; zsJBoDYo^TA(>9OR+Q#fu{5%J|k_>S+F4D?oIuqd%b5 z_Q+b>Bwa>7kAz!_>>Zxoba%CFF`f&pTHf-o?(akGjFY_EVSR^-?!gVjaf3c68$`zu z_9obUutQ*J)Ph7~!712WSPl6Ohb1xQJlH^3c;YB%0y`46JM3uKA+Qja#@ikEyaRS7 z?08tx7M%u5;>~`Bd`l#>9)i|JQyrk1F#sxI@m{HU*;i4@GKUi zU*{tj{dze0T}Slp=uYd7;LL}%=)og;y9CdHA1;nU)x~9&+{S)5MuxQiS0K>Xy+76; zr!>F*SZ{4#>KUz>#*YOAIQg#CdN`kOAf|t5Qf@PT^aI`hnuF69pXkjaNSbHFq>-a? z^Ybu86e{8*XPnGqKh+Z>Y41d6@yNY&t)we0&W&N8>Nn%ucFRrB4Lsx25F@$o`#K^K1`6yVB3oGrOSo(a+O!XIR@V z6@Yxt(9aWrhNSA-57pX!r`ERJx~rn%_pY^FRBL;?*v1_gPlmtO3P2wrRWHC(wYJ}_ zwf$SI?RIhy^rSzz+O|43`ORPGAv(t6yI{SjtGJG#`#t958;|K-^gQU29@85~&!kn0 zP-~)?G|baoIr?qjt&i)``blrz|G0h!C9v^05*X#=Ume%`w$DSKtKt2j#?_C8(SPmz z;n+vgPX#jIU*nR241W3=89eUf2`BWiRKnmFd?R_#=~`Fm&@qB0^aQ*tu! zIRE~H9&N0Gw}pyVqQZPCPfDP!*d5F=>@H98dM9j+&yD zXqM{+sLP`E;lgnPk{a=?)dIhbgY0kMF3A2qjr6|Lo!tLBy@fu;$%pNN&@Vy`{mz;s zE&C3cE)#*$6UIHTi}7#$c_8uKC#@RwIEBP-b@FMa^e$N1z%xV> zN3H2FO_?6xr%&lkp?B!`9uxYL-sRoC*Hgq)aN21rfoD(aU29$vsdU#!s*-!3LEczr z%|3%mBL<+gXY`99boCyBM#LZ?emI8ZKj;kuh^H~B1?&o}kAKjQgtrYsBZ!+zq8X^| zsTp|CL9KI#YEC6+9YRO-0o*nhcR@sO8g!K33p(&r!M93nhw6(C;!Pdyq0(-LBKh32 zdLRzplCyeC#~&Cw?ACZfYi)7^62m__i-GF}-nvpxanUPI^{nxM0_>pxDCg8kI9Sz1 z+|Q%5xUEV*%AA%KjSz0cn7pYI@+OPUvyS4T%p=C<-FF}69Z>fL^B6G*k_&p;v{9C) z5jxexiORpK)I)rzwQzKPt<)RpuC5r~)@Tqvg^V zFTiereH-?5*mq&!@u1)%Sj-X%K8A&8cEMM$+hKozeG8UcsO^NM+V6o4gngHUZ>gH^ zfoKT}QQm?S*u$`$VLyWH33~*#KkO&4cffuQdl&2%u;h#ED_9N-p;h4&;A`0Du#KyK z!8+J)U^l>G&RRfj1Th;Z*arK(Hk1|Y1~?7k9oQdX55PjHwcr!jO4#GD=U`93o`*dR zi|J1R-NF3@_IKFdVGT6vAF%W(Dkj4PQGDuo>q7j*d367YPX6wBeO`NYF49V44qm%$ zjh-u)`_w1$K`lZD7v5#4bIt(q05ASoPpGA$I}wv3JC6W;c-c|UL$5Tr?;m&~ z+q2O51;Z6xA<1_f{g!Y)!-({u5~Iai7{(gS^(fMshEBHx7WYJilaRY%%dt&*)~~|O zfISF%FYG6<_rZP!i>KaVT3P^GiEZ4DF8CRC9xSOnKMWfS>xOLtJ0F(j=?h>x!!D%L zw->-75I4X=$Xd)}OJPT08bJ7Jf==EIVXH9e@qt?hz&u$Z)q@#RU_71(|nmZq^Q zVBd#*29}<7Jq!B)(0t$u{)QH2x2p(Kz@?lnFn&mb`?k#61rFg$)vT z&+-d4qe;*uYcGvHbX6J2+tf3f4)=7=u4pj&dA6xxs&5~V(@oF*U#o3f)5Cuv_!v~v z^P}qFlKx#iW1MRl&hP+Vv>I$M>@I{0fqfU&2}`#P@U?xxFR)Rtc9bR>wmvMHr=SIF zJZv&-L)gBs39tiU6Jf~-W+T|4uq|MR!?uKd7&gTh9rzJ|wjjvYP%7+8u?87b}8)Ru#dq$2m81S;2!`_z;1wj8g>)x3fNa+pMl*5`#kIpSZJda z?1Wtn`#J0y*l%Fh!hQ$44)!$cMpy%fc@wM+_C;76X7&>7&*%qsmyLo#A`j0Hu!X=0j0QuChsw8Gm8 zzv6EscK3Kv!3ZIK@SGyX+GEwWt2*y;$x={y!wFZ{5dp>vVs4vGt~oje8Gd?}Q@G~f z2a3JyeDV`sHq4bD3xWnZ`ugiZ#v^nQz9AU(x*dz7VBg>^ zna3YSXuJB)_3_?YA{#BEj)=xm1R zr$2{`WS|ydR-hZg3~?K`GzW*$CP|w-Q2SggpDEK{*R+d-Rc{Plr9)tk~T>x`GOrfoxmY>X%KX2gR(GIP#9uq|F zRib?;EaG?V5D>+uM;S@f$}6Lg=ZpNKD5G~(o)I$7MG&tvnp2)bqpdtwMjNf|xmEe_ z$}lZeZxh6mr+GPf%NU~(g}yPy3cV}_^<9g#U5wG0T5dsOTYKJpWsFVR!u!`Z8dKP5 z^{wM|q&~t}mIf`z^OckAftE{)j zK?mmX;M3H*2*4(JRg|0B+5q9bUN zc&iT6;!)#S;%uiRHGbd@uLS;nywO<36b?_QY41fKTIY~g;jt6%6eqD*U81?F)@RnL zmS4ZuE7F_hNPGA)c!1z*KlS(XIfYb^b!kK6VJc;80-9t!PQ3)+nfjZory-Hsuh2gZgd21=a))pSu*l5xW6Fu?s9DlmmNk1Ha(LWx;z%I7= zyj>`>TrSej90z|xG8JiIK0?G3vUwlC~v*#59@!4A+^ zd3IAHU5wPF&Cn6XJNaA9jBb(DZaVnOou5tc!%cJY4t>N^z>W# z-sZ;qE;Od(C+CV`9Yyy||)3Cm$K zVIPC-4f_Od&<6A7=14LLRP`!2S(OvMxu|>XComKTH5FrdsgvK+#()owoT$z`$;%PZ z|KA)qYIGWatZpFA%tLexz zCCxxs7hb6^z}lJJ4|_W-`fkD9v;(#fwgCTD!9EB}9~~6Iz5+WJ_FLF_us^~+4Eq!8 zeAqu=@!3#;Hww8B)`Z0YD`*5;3fmg?QP^(u^6(M>oQd?!f^edP9wgjkJ_&mZ_+_vU z!Y+q>2=-Z6tQpyJur&W)1G@@#E$l{E6jD6E*$7MTE^LPV4)#UZi?A=jqJc@=p}<>5 zHBp-aUl3bh={e+^u=Gm#cGy(d9kAEK?u4a<$lI_}VRysc54#6;7A&3}6coa~3rj2N zeXvi$;uV>Kr(qAm(({2su-jojf;}Dva0Gx}ip6;)+{t|gzszwqCtr4ZfFE6h>}@gh z%)uj>wnj$aV)Upy(Osx-FXr>xVvg7*jBjXbB-EqMG&yhV)D$kJV>ciK#-U%^TI0~r zRHSpale<$f6T|56ZmQ9?7d@lCYt+<~q(a9fbZ}ik+_`deW5X!P~2P08$6~+g2Fyblr zqz=ZC>}M0{#Pbb)!AW0XL4X<#hjRPgIdRg|QMj*ZITVVOo`&+1>28+@?iYf^o1(?w z#~Q*>&C$!G$Yda63QmzvZ-wF2o#5M)$~%-Fp|PNLz3Fn%1@qy{%2hl z`NShhxG&mh`7EmDy2!f;_AKJtCe?2W2O(WLVS2QP{}8UhlpT#vNTB*p52bq04_Bd) za1}FZs&%)QH9+LU{6HroHiixahGXkMpt1?rMVt<fF=}qnN0>8d9 z{3yM~CwDf&gcp#v`IIh3RK%Nzi)QIPDnB7P20R3G(Q%lMS7F`|M&d!*KG}i51Miw`&m?& z2+$U8z=P}m3%^Kw`8JzZzp#0$C^ zUeM^wIT{s?zGw?R!&h{}d0f*0Qu=jvhp5@>)KK+(gqZ!(()7E+Aire`4hrMvVm0TV zJ4A~0A*U>_I{AvPq8xl%ccb24@sPw1oQU$$zT?U1I17ZQBqu(Jv<06C=IKF^@P~0< zeQzjgpxjZsTLaBomp+mj*YJ@2-?Zs zK%2pHQbIy`0iijdF z8uTt&b$<+^mG|-n8TJU#)h*9U7!v-6oh&(OI$5I57!t;h_BJBhG{hB)#w&T~2jPX} zTuj2?e*y=g+74U;Y{4(fGoni$!>0A-o40y9M7clU6+;Xsf7Px>wXWrriTbRMHHu|T zAD=%KK0fGO+1%>BnOgmXODVmSKK%~Ml^VIZpjTGGRgWZ2;~EZ};>3wH$ichyMYpf+ z%*h!}UP$N#H%cTc_olq5!qd`!;>^i%pOTL>(J(#5B|x~KXi>U&vIGA0(*1P@k6Uhf zY5yI6PRUlz18^Ou7Nk~^{+#H5J0i^K<9=OEu7k>AI z^QgKzd^%kj-lW-84xearOGN5)np@u@NFPx4EF-#8v~}2U%yQH5!nEb==bTj-H7Mj_ zE@umVD;SfN9=Uyciug6$MYR&%0Ijao1GhG^@+Q;BMi(eVqJGhLVt#Ua;aKFq>QpM) zhkOFT6XCE210r;0FI#!+sPQ8QOd64wKX%f@T+!Db=IJ}V zBejD(Ju0$6xEz&{Me1qYrJ`u$Vdn4qpK`XQaiE<%;QcXc&cE>dpYzroD zy;N#)CPlsaG47fZ5Uw5IexW*^{O1^6VWv8htsX&R*j3)DqNu{5H9L?+)dg zBH*5BK0n*R9v(+y%sf;GL&P9@$IogwPvc^xnS8U+MSGi1yxBpTo1@rUnv<6seu{U|^WUa{!L#z|_hUxj^$4;cT3DF~K477q8W!1*=>SfI;e2^e2 zIAH8Fn$hNpiJcz8wJ1G2^qiGK#@Kv%*@ot&hxmKRnlp(G6KW+76V>S7`@w1%N>8g) z9}^v{E>5u;;J&sk_yL}C3l?OSZ!EDe`u9Gt8t=4<372PdZ=d`p+k)>$AyD6*xapiL z+N6Rft#dZlaf2AnX`{p%=&9NsvGDfDQ7ao(dYI7AFep5_Udz{2HoZiJ zCZm;u@SRCLj&8!EL8_cvQcdZ`xGbQ!G+gb{mD;*FFBxitH~qvqpuI;;90f<_R)r!| ziRf}Ij?7_xFfTM5i;{}YA|nOYy81SMqB)*;>hjSEzmrH?D%TR=*$ZUy=CO zBX1v{zQKIq)Q!R^IryucZ_!=!pldka`c|`?R<(n(EpoawPq&uF!U0+IFKe1+pK@;KN!C|qA< z;~M$nx@Z&rxU%Z;v)@KJ^-cBoq=Vj0-7xuf+TGK%{BLnn_}_~9-lU=%$L4<0dBpJI zTc5q>0dr%-<@@4{r16p+>!o3@N0VKtX(_*e|HoY4Q#+o=qaVSyUpHge?#FI^{@3{%5_TNg zyaBJt`ElXs>jLcIFsC*U&NTG!$PNCKOnGib@`LmH4C}pR>Vc5Uz7=>2kuSpTD3X#7 z((Zn~bFXlx-c9k40Yl~a7y#g(_ zV2=d~w_q3=Dv_L?6~tpd^mg{!fF6Am!Uct0?`KE?? zcnaN$3%Z8auN=W2PxJfnjd_>u7`yR zvnbn-`Io`16@2K{*ACBlaCO(=mHneTO`G`|V?W_6rYDef^#(R<^wd$K^6%wC&Ugp# z+ea9_{I@#|zq)zFsJkPv70vaQyzah$a?W^%S%nE2YnXK_%zxs1>@PZe`oF+c*|J%TWs_muY+{53s!MBxi)w(Yugxpfe> z$A0wJ{PO&FysXvTc^Z0d9sRM@*~^;n3sh%cX`H;D)wu_>YfaC2T92vg=)`fVwW;zZ zI6FnJV?X&XxIg1nqtdo}j5@m8$|;6(uELPIg|3#vxEXaFgsYWmMjcC~^6}yRlj=IY zR^@{+*}GYt4CcK>^t*UXB z-CNfKS9ce0HB$Gjd()F^zyGRlxH=vxx>)HGCh+(^T1(*$?x0h8zl2}7Zi3ldXQyp7 zoxS~Ce{G&74XIo2`7gL%vwGx)kw)E$AV%dnyMGj+>+ajl(;B|~%T<^G;%GIaqf&Qw zY8a*=WA2Ek*%_US=8}(r50U}=ig!$HQh8J&J6kG|$=(N|SAp#8Ly1iGCD2mj z5ArxcAd~$7MDGsS**S?!b{Xh#!J&)-!MP0(-bg{XK#5Fxvz+1W6mWQ_Tp*Jj0-|EU z!JI_!#)g-gR)B+xt$N6xAUsk?(qwN-WM}Uv?u_Cp6*mkkRJ`x4slJ1EmCLufP zBN5zR0ny7sb~aZcc)tQ#O|KKd{gr^!{L6vXh=9*Y1ou}!YX!GaB9rw9^kmXoBKX}> z+&zj5!~)eSOsGUA>#4XtLCBwW!}khStm}Z#m=d8eB{JD}K;buZ`83b-K5Iz-1#Tu5Noux?xUnxK@32vrDa2EpfqTt*T znc{2V7XI6@|S9_VGkt(FKrYk*!6+!l%8G6SfbUgxs2w=9UrQ?MYm3Nu|Ilf9_8 za>eaa+yTX%z~UEcUDPQFOI<>6F(VO9W1!asH%%h=IRbKR7370}giKZf^oHOTOJqX# zz~l7gNr^B90BsZD)=6Ztj^Un+yGjJdcZ$1Haq|>6-=)Zt5#rS@ls`4nLO3K6p{zh} zTSb)!MFrYv6;&d*J_LG8aLXk^2L{?9xQ!B->@}cW;NXjfbfO8G>>Z%pBH(_BaLxkZ zO)@m*#}b+Bktk0Amq=u?6N)>jxW3Vza9I-JEK%G&glPOTS)n2yQUOa9#}&6uaU@H< zUBr#S>xJ(C`LZz*+1YrBOtuc_JyCp;2_$5)*Mas6?#=qhpCG(rf!rs^_arjeCqVBC z?hA=<>HzH(+!={X_AAi)g1aOUJkd4q_^~l1GFdRtK@l!YBKRUSVy*JqnXg3fJEOQl z#jR1?2F1OmxNVBttGM?R_o?E(RNQ%iTy$hFC^A1DcMwrRUsfTJ<*SW2lWBP2?vN-y z-dYjJWI;e53eF*s$zp*H3obz-leGr=NN_0<;e2U`^Z$q-yMiPH4@(JF5$vpqL?&yi zxDJXNptx+s%}InjCQ`wrTq0b`B{Es7M%G?COO^;N-A9oF6j=cDiAZLjMDRx?5nNa` zw)SFpk;r6|fj$*6wn}7Y6%v{363}PZYiCy^GMU)~U;J9*Uw{Qs_eh{GM8NtI!ATMj zC2eO1B|;}u+!@7HHpM5yq6l4@SqKiZB*KsmbX24=Qz8uMK(1qgbORE?m=1JYaF0s_ zCwI*~3C2i-0Yq`z6n9c_XB6jX;fWg|k;ytMuA57d{S|qG;)W_NS8;bKZj$2eS6o$k zZpAHB;hs?3GKt`eb*&;ds(`O6?oGwLtGM?S_nG3pQrv09omHGyOHV7EsG$Ygf|of6!A62Uzr(D#BX zmI#jY+93baf_xMtA(Le%c?vT~B9lF)xTh5NhT^s>ZolFVD((x#9aG#79_~hVPLaQR zNTwxQMSw3^iQr3CarG4!ueer9)Lp5i7bZi?b&DQ>pnN))$P zaZf33h2qv*h$c3h6}d+R+^4uLZ5jIkE$+*_QY~a>Hi=ADrntux_q^g(EAC~*y{fna zKrTueqn{#&w}TRZ$ZnlPcD6|(T*83sQe3g(N)-2);+|66YQ?SRPZt~YUGFGjzY6q;;=WMa zDaHMuxZf1_yW;9~^t6D#M7TI8uD;@$S%^AYD@8(!UmR&W>#DfEipx^mEsDEMabp!X zL2>sgZkFPT6;}e}qK<`8LXl6YfU6a^UU9D~?hVDgqqzNw`$TbHDDJ%CE-3D@t1HC1 zQ3PMs=Q<17*#L=5_Jrb=DQ>IcDin7}aUUzLWj8$A6e-V;2yRLx!g{N_wHLGKdJ>u} zP9nG$SKMTvON^| zV?Gqnua|}37F8m+;8ffQ#XX_8Ws2LQxP6MN>`k8sqW-?DOCRy2APz)#iA?sg;$Bsp zZ(mP1yF?~SRa{yX*AHsfqR<5r+1VV4F#iGy#9pl5`e7DL5DPevzJlB@5gcj)`3UZF ziEuvw$R@bc5}^|U)f3!Bi7?^sk5mQcEfE$mKmmdalL)iuctC$aHj>C>$v~tLZD;Ky zf?HG|yWlb7$eOYU$#XeJKHLe z$$kQY;s;vrSBc;<{bsx{A~+w3aNL2S1Q#X|hB~17;4uCrN@%h+Kn+B|wi21F6Hu(+ zu9L`Qdw{4|@Z2jAZUHLpgyJUO0`Uuk!`LYi#!iXQZGjS9BAJT>fiQU93VjU0)sqN= zCs1R-MM#ACFAyb-;YuPCD&~we1Lw;INMvW(5}9m1Pzw=bkwmz@48{51T#(B^5;EBu zpq7H$Ad$&l1!^U@HzdL;0EoUjLgmFe9+(noL zi0_P%%xsBJRv>(X3~rG`C@T=YPX@P4A`}$}-!6mOAQ6fR)Io4>NQ46hgm0J;Zl6RZ z`w*xTjemA_L_n(h*FarG!0#k7*?FLjg1aCQZbaXXk7xyFlgMNXfvBE#Rw|Ln4k+%B z;=*%1;i7Zd9U=<4nIf-~$YlK#cfI0nRov~08>cwD9xl_nPjL_Mhf6WfJAViCQcyZy z)_sJ9;MiLtEV6-mh_cU=2#ai>48gf2!WtVWU2u;}g!`sI_#hnhUM&&sn*#L|+!hPD z(70~_W(sn*M3@`{^%C3%5+UP}o&vfhGT8>jy`Z>n6n9E-F{3$g4mIyaNfwBenkVGac1-e0SoDhw3CVLj}dO@y~ z2zSYW=)-wCE0@S*@OvQYZfBz?K9oCPTSVBr`}NI~yVqo)9Q*o#IXc z(Z}Ps$v?$H$XFsgs!`m0#Z>^^Dq{Fe#XOH7=B`sM(qzv`WM``scLHdbh>|qTLbz2a z5vC@Jt594_K76o>7-J;DbX+3DP@Jnmk>`PK7g4%Tw-81`iA=UhaW5&Z5-3;1=yJD( za0QbHOBTf~Roo$<;UY%dJp$1@FVTWH4<3~Ws~p800?M`93*y#SgfxFdwD@$Wd`R6%|#k;%>hO%dGB5}8mffa-wYyd*MNAkZYi zg-T?y20#-9*H9unD*(zDT(U$a>r#NErwg(>NJ1v-4Rp8Q`b&gs`D{;3R!d~E!;1Sv zag84Igli^|$rdQ?5yd_2;auz)MQ-qr>;=W`QQSVoRTROCrba`K-&_k}{E!HX4aMav zZV%8b5ySD2h3qUsAk-h%I6yiOxW-9@4g&Om;6_S>N3K8xf}1809%BN{7TkjpnXDLy zgf#4|L?S#Hn&-*5t3)Qdbsok)DwmzzuE=pJ;6%mUr?>|c_o(8QD(*}%Ucp9szAWuw z3)xv0iA;7-afcP>x~xd%wxXD9B+wj@%qEF&jgZJ>r+|t?p?{FbWEX(u3huH*Ci9&S z;XA?EB{EqE&^*C8EkyIbxDqQnjB66%0nI`oWQm%LlnARp>A)9RlTBwS0sJQe_mm% z@cD}|%kcu1P5TRx@D^1dZ@xYpiE_^O*%&G!Hpw6l=@)lLw7QHM2bV z17od@4`IJJWMpa){NqBchj9omD;;oak^I5KMzrfGw2(XNLgDt{&ROTDH69l<1_W~t zzToi@?^jeYJxi)v zr;lSLSzB_(A^awHhM%V;f?o9%!LllLXRZUn?n?KA)J(;htK37PcI^0q%2E4wq1LAsQ793%bBPG$+&xevgu~%SSU`zeMrEaF#xqR z(zA;*_ndl*FVwua7S5aKUcIyfDx3LlYfJ=qXvR6~e#Gtiu;;;2otkZy3`He`YF9tbSzO68>j22cU5@=`VdlucnQ z|G?Mluw%eDe=FU=XH=_{ziso1Gt69QK~iI+`|62fH&Jg-7-2^>!8AgLJji zz7}8)m(cdS5??58BJS>tKI8MJPja7^wRLR25L9?HFgx%S5dvqujRHOxgdU!av4u7k z(;$JvYs+@w43I$vmK2ecCc<2xdIVqjpm1km=kuZl#hI52XI*BvG#x?1?J9bcN`wM7 zV%Q8U+di*k6s21xQh(47sTUXJ(lE`Ib1RnoKtjKT6;(G$=(xCI-W_pj zdBu{C#i`X5RhJ>~mm`!YyG#&**Qo3Dyt}l6{gC06v2vYrII3Oe^`+R z#}vbgY;>5yR29XuA}^wH9>udFJ4Wi?&o=6Qq&J$v{+wgBiYj`YY2`fe{}K^g=Rmih zGqf1K-_D4xUSzGz;N>5q2;x_KsAEIe(LV#Fjf&g|@*%CZi>SzMg~Q|7qKeI#<;TjS z(4%3z_n-5-ZB`ID&6_#<6g`}cv{&TLoc%T>kRJ1%ga}iLS}x&!VM=HNk#eeYbB+|d z8l-W~+muQ+sn(pgDV3}|lAoEOkG6~CqKfSNFB^2uOVo+Vc_Ms~6=u|dfO&Kmva%|M3bSf1+*QsK z|94g@meBiODZihhIZDO6nRG~%VhqdB0|AHg^c7X~ zKG_>lmGg*me!wWd@DH?#N@01xxnB4auSy5%HkD%#aYZE%_qPVyq$%m^ph5lgBz^X0SjA@&{c z62D|K{+HFJ!l!cH9@5R*N;;AIqNWQ|^T=UEJ48nuR*}n!Jj?~eVdn^RMkGB7kDAoG z;sF!}C0*w;}ex)d(e1;ekK- zTk-6_Qupxz)Jcmzu(IRtm3~iE^teZ}*77!(v0|h_`C(jWd2CWbWygE2s;ac?=r<`+ z^p+U!-A>S8rNYh)<;DuW=PREG-ue*w`P1tHz4_fbN=w~f-Yiz>sq^Pg#wr~{Pf%6r zcYV$=ean77O!hn8@pp7{?8m)2o*1iG`Q2EhVE`>9VNNn@em-dfDrE3z^1xO%*u9~`4$ zUY&C!u%hGD8%yWRy3ERhD|=k#4=0#HV)Qp6#h@`Jkftl08)7OGSlKSlmE=IaE>7vh z+kRHd${+rPnQi(XK4IK3#-#FHgKP$VJ1ZdZz^Ho47vA>2qp_@uunbI%VeA`7X4Vwa z5TQ%cbVDHJ3*AUfw*u1FLbnFeMo4D18PWzJ?SXU+l7YPi>8g-o>$uMLm69D^iZ$g< zO*)}Tw=^j{*5$b;q@lv#c)^(YQgCyhM zN|P2sS})AJ4C$bd&S+(r@By|N1T~&pRc%nSHD& zbq!pn6Eta6LznI*B$=6sja<6%kcJ7<6Cu&Xy_ubXBy;NyB$-?0#x5VZnlu#BO}p^2 zT2p=rsZbdF8j>_vFW%)jUz0Xz(l?qE-NfZ?uqHjNNf$LKpeYv6MHnrcB79lelc1E+ z3z~FZlWHfp&UV(MDUj$|#lU7l+6c+a7D2i%q}7_cjgamNcRL{cDx`yuej&*&w)oOT zkb#|p^0tt|n#nz5W|j>}M(Z(6S^{a3aJL@PpODP#takQCO=_IzvN8&iw6XvaUF#dz zVn`e5!rLr%?#k0!q5Maj-Vcec91VHZ-C`3@3I7|bjp$z`ySCas2qn=$aQ1(J-` zDedf!nlw0ByviBwMkXWtslrP!l$%8$D zP5MTYe44wg*poDIfF{{BX^SSE)}(uy6rSob(-RUcpqp6l9Z_b zyP+vtq`MqeYSIBsx(G>{PR_u~Iz+y;ghUr>W;O^C?hzqd$3ij*-9kvX^#dK(bUPr? z?jirz&+ zrYAxQfMj5IG#zU#H;-YYfwU1;%q)m@Wy&M{u@yVL5a*NKzNuPQ1Jvx)&imC;Z-nR4)Af zK{~roZfP%Xa+}%fkZ1##fgOUhQJg&kX@iiyfJ9ry42-r(h6w2%B)TLsuznp}?w*H) z1VXnRQX`x-vy+gJD(F7abk{o|{Odw_6Ur+%C326$XrozljNHVyEkYsSHAvF%Y)3ijBKG&p%-La8Km}v@0nofm; z{DhSjnr=NB!S8h#4Z2${=kNQE-BL3Vu$oI&YIa5n$)_lb{5h|;deKr97NE}K7=Ie7PI$r zH9&tzv^mPa${}?T(n3hR=_WDSC&WARg<=9(x;l_^MuP?OHJzhgk5g!F|)@sNtlO5N|8WE~+s z4heVmDG;X!Ge;rG;Lbpr1f79hfV5E0Ev@o!v5M?^gLXw`pfaDNoe;|iKx(A8& zaA2;4?o#$<9Fpu4_d=3>o1wcrA|ky9QYCzt*$bh>s*~*#8JwAzP&#}V`z5QeWL#;&=;2Yl=TsF0$K(F? zm5`Xa-j^>TPF{@9z7-kF&-v>NtFFA=(C+7hVDP&TH`^+uxIQ_VDXGcKR!e-dhj}rf zNl9czPfc>B_`r}CygA)q@_)zZ;VU_v{ZLJl#y)<$|9<1QkdeVvFE^068l^AFrAdi?o`tt9o00c?2Bre6n4&2 zlh~Xc@zA7XX0W&1HTH~@%w+MQTP+(iQZmvQy_v;blZdaUd1%s`v(=uOv<$YenkJde z^wgxLv0@L6J*9a%8|tA-Ny%V+t7(#1XHQLX8q2DtNo4eyO}9uVC9yb9O(JTQhbGyc znZo=$RT<6ktc$y$QM8^ifea zN6nKNeV*D)laj{PR?{Sk*Y3EvNp8-{J>4W_uu;`C$!w^nCNa&<`c_jVvd$iwq|D|l z%Ttq)!7|)6>B%TW`e_kLPfkt3SNc3P>3CzbyCx+ugV__SsWR~)O%F$C_vo(NOsAkJ zF07`>5btPt6nskaH1P@+cTKu@LB%6YYI-8OWA`wWnw}({sCeWk4OM11dO~+irkDq~ zY4DnU8ucD&($mt#_~53=OruYvySvFuXP0S`@yJm|QZoD7!%+sxzKPz$P4f&k+*6aD z%9dBtq_M4@nhf*})ilkS*$ad0qu?`}BlB_Sra`SP_0(h}G5WZk<|ZRCF_qC?5;sj! zIy>U2Nk;IVn&ye@Dl~RCZ_S&td(|9eFvY#1Wh7=KGFvqbx>yfQ5|R<)sYy#^4LvpK znJkese6G&N%CkBt4eiZSQ`sQ5t{FXZY9<@*sYz?jimPcd7`+1eQ97EZr?9!zH0f-$ zhb9$OW~-;ho}9?;d8$yb*c#|&IyEDcb@$Yu_nzsYNke(yi@R>V(lDIh8@q0rbab(A zd1}(p6P@r>p=+eKUOh@#I=X^5k6|$*6T@OPO$r-YO_Rn(d1x{dlUR8*O?rK{)>DOs zzp*;=Rm1a!S3)P!G+GfBE{;i^50#Xt_=a zV+V!Cnd_8zw!>W`MzYPChRz!mOxZO%qzQ#a{#;RP3Qbm$D=a#PLDSBLdZ_x4w`6xm z1<*JUtw$*N;fOs6)Aw6RLk6nf zWQV=$uA#8lHg}E4v!(7Dk!MrfHDdUub!ZtyvQa@vrTl-?EY^@p{9Ku~`(K*(p&2R+ zQH7-_QjC6Y?=npqiuD5z4aM=Qhlb*KnI5cv6r+z}dcD(;ta?|V3G6^_oPmi3x4)Ci z7Xrhj0alzmG!&t?Jv3BhmV0QZbua9MkMBJS{uTmDb~-ZPH0~Vncc0eRwTF@$@pENM zBWTVEr_OkZI=MW@EnXA=o9nKjo`KEOG<1~yFUvjtr5R?2YNPPx3``i>)46(JuexiJ z&>GlU4-G0hTdrv+_{p$5-l>r(p6wBQ{fGy^D(!yVm^&^LJtjh>m!%mh{Bf1;Wm2Bzn$_zBGG;+7%k!DQyo}#YLe5C5$Q&h+tcMY!W zkO&VACG=BgvP59Xl!dgADkF^pmV^jx6dELqU#lNuwP#ZtA16nYR{G^ZGZZVCk2FQl z-0{#%f`%S+f8=H!G=Ux(dV8t-xr&)4d|4iD-ozR+JK~}G0Ge|inyb*<@zC6dh7EEL zp59^_*%~;FSN}6s0v$Y-?(S9@y1u_t(_Xv%% z#*i6i%XhOwW|*J5hRoQRqN&KiSQtta8dq^FgC=IEE3K~Xztu=L(SfK%tR8SJ|KZm*y+d z*o7;Xqr3ldRLkhJqs=X&p>d3K7H$?jiuCKy1eW6Ah6{@V zY{8>kMm3)06Fvz{Juq{i;;-{c%}nA;1}U4o($dp;(qJXaD?P0_FCVNl@K43sU0lbh zqs!ycQxntpw!uoeg3G3S9{qxsrMBx-2Bs|e{OY@UvyanpMtU-@H$=(hbDH>=c-0Uk zNXbY{PvYB$C@s8_l2cb@pGxGmeB~W|W(NNeF3kWZqFXbGH7YXGJ`3lebkDx@z_Z4T73u;d-17uUMw#ZTyZJ__?Y8i{T#HN&E-= z&?fJ?f#|fOFX-5+OVUXl{!4m{)l_jGZ-V?p$3~o$mlUgbUXc>+9fuGa{)3Mry{W6? zos5Gt9IRLq5a~@-Ad3!K`h?_m=-4T{U-!PT&i~rj9=-VNdRusg(q-hZPF`bDb zRM=urzllX<69<(Rl@|@_P&9FDc}eM@^0GGM58^Tg}kXDuXDZ$OOP=nz5CPFouapS$H9A7${$n*?1o)P#;XW$9g5+)+QN|PWh zbaFwTl0V6#OO-IMc%*XU-`*jH+Gu?Ut$(Qu&1(We>&ufTC@szL2(7$)VsS~iuutJN z<+CR!*>QA6=qV@3Y6KJ_CtZ1+X60|`yh5?DR|%ukgqJDLQ)&*E!G1cwRi(N2x2@pK@Bmil?Cz2MCB~rJ=)k@b|$yMj^XVjD8 z=Q{SHDFA+7InPgU9=pzOah(rzIyjDe5gvH=SxTsZvI`^m*jdUx`%jQYDa>I;eOv|7 z=Bm{o?T)GfX=ej;F!n;0xdh za3^>QY=LY)gY_N<<^Opo9tSUi<=`c7I*6x?9Cq+i@Ocm!;dmeX9Q+N${Ub+xWZqX` zHuw!lYkA*-Mc{Yfli>H@bKno)Ti^}w9q^`NXO0sPeu3gI@K;cW+`bDM!2f_g;O}5V z@DDHn{1Z$8{|1kMipm@xfClhK&>OrB8o_&@FBpJQ!HqLVFz64)f&o}da5RJv2sQ?LFAfa5;zB>W?2C~Z^U$d5d^xwy&Sv?t_116`6@6H z#7$dA23Q650g=s)!QeCCOmH3e6!0XKmMz!$&|!Oh?`@I~-%a0_U)qh)S` z5C?7tn}JxzaWn^C1$%)gM@L`qAUG6!6D$Vb1y_OZfiHn4!EGRxT^xJBOW;8eODv8H z;Md?K@Eh9T&VO#SHizvsEi333&{pOs)6{yKw$+27}7^WGZ37Kq*f@ck%03RO1yr6 zl|QIZGVp+Y`XZ&1fn37coJGp>9XF$|Td!x1L*NGReegx_BKQ(`7sOphhY5bRfvMoj zAa#X1K?-dbKhn)7+y^NZKSXF*B~nyu<%cVk9>|f}iYFcPIB<@&G*D3n+~q|}l+GbJn4FJvJ4MrhgZ$VM<&8kf?9wDLgncZu zi`7)k-^5#GR{^7P_(ght-%Pbl_1{ zN;>6h|0?A(JMD2wH!#OiFcW+UYyoZqv8Bav3~U3Q1BZd1f>;D|Tn9&j_rX!14=j!c z!@&|T4lD(mf>F$8A=0 zcMa;uYUf-ngCjvF`FO6ZqPd#aT4f~_8(#}In5!LMs}%qL&ehIsjWEV(lUm93Hf^m;~46YoERpr6OH=IfL;_1tPD*`-u? z%p9re$MZ$&l!ifC;km8=Qh3n+vgozh6(*2*WGQi8edS>>5X_X_QrX8kB4fqs#n zeO8G=#vQo*tTIfO{WioH1cK`W@hb|UzEQzHdHss3V%&lX5ZA9xCye}1|G5in!&k0X z3PV#6QQX`tDj26t+i7}^3zWd~x|a1@;gX@WpsZjVeMwr*-aYd3j;Ne`?@IxpJU2hc zsJqQqY*4Id;oCM~w%U{byg`Z7@3wNkjY`92zd2`iO`U0?V@juZB#3rFx_%VVJM6&3 zjY^O%dkPNf=$K;$7z@q<<3O5YVZ!HF4Ps-TVM&=TK@VpXEbujz|+fW zLpCdu>Uk8gu;rPplub$ed|_AwKX?lLLgN>eF8uf?)j#N}E6JdO2qTzPFDff>*;{{$ zl24&6*djw)wjH6J*`kd6A2CnkvtCk+`b!pG@FE5=+9nQTFT5l#rCe5!bPHdyRT=ev zvQoHBTJe5a#%04v#HHuU%KZOk<-3>BFXD=1yYh@kBY%Cn5{Ude@WFN^S#+2WcVI;Q zohR&6IvHJA#}mKShZs7E?BIN-GK|vx*G@S6j5pqew>yYSqY-GNmv<@kkW>8OE@e77 znz0*>zT_|ORyswxHA~l3?xPyc_r`?T3<)xb_&rLCpt;B-8a1iW&=1z8>``KClb#yZ zWbg{#vIlRKxXf?vQL+tm24Sb{Rk{w_0qHBu(awWcz~8`YAidY*8!!v}7NnZ}9as+j z0Fu=oLDzH!-o%e~oD7HL7Mm-35gXE@QnJC|74E-JDMf7T`;<}j-8&3wpB`g{8Hy9A zco=P8QI1Eu<{y4g(?}VEU`oY6Lvs~5mC?PxefMKLna?}zS6Uhjz6M5u z2f#)k_GUQ}z&Ah)iR?|VJ@_`*3p@h$1>XS&g71Qq?eFR0{#{->aqX4pSzZ$lqP$2? z<+UEX!k<5=OwwPr@be$)!)wuyL!ChmZ~Z!!hVJrNuPgO+wfN@OmEypmaE~8V+;eav zrW^GPWDPa0+Z)PH_6?{x4-qBg8`EK~h2$|k_yK4DFN5CTw_q*s7tj~9puPBkbwGcR zMsB=Q!_gbWJkBu_3qBaUZnl*%(I{B74Jlj)(9L8CV_LoG;leX308rvz-PhM;CdeQmh7{0-a?m?9mLxn zQbPD*DD8555(`MK5!G$-P0fIE*khRT81~5%Ekix(7{vO;V9I9vhG58~^^6(vko|$8 z6oZr;rVjF+31(kIH{|RcTqC@Vrh#5#@4Ap!em2wJsHVf)@4U?+rCqqIYZE0(QFs(0 z|3&e)7&^i&`sf3Pl-??h-)4UGb8B?%QmCo-8755)FX+zEqwVR ztJN?-ruDBQ%1>nQ`=ipJ^_cRQ9ura1KJQQ-^Om0TrNN57{uM05_Ude1ra_dbpUoVD`w!a zSv+ZqV&hw4O(w$=GS%TH;Anm%$mG?k zl0F=I8frRW?k0aau6r7@j`U+n;F^B+!&FcZXPS4Sr>0qg@d1BZgtH;e(3 z!E*l5Y1s$-by`%Q#%Gk)Arx(_Gt;`Zs}4Ksf>?Te`V2145To5^T=}5ILdz-Y z<0&^E)kB_&I9d+3tVmK;62Btswg2^<}=^2$$?c1}mhbl&T-JfD9VvAf8ZUPepN zdLvgJB=M`4G3kSI?@#5ehgUv@x%F25&8JFnOU*si2x=BuS=FznoDX52WbtruH zs}aHcxzCggSU>Q|XU;C7+ZTw#36lc=v#ngSP{CSw4v;?Us0O*CO}8On-<3F@KBq993wuTTv6KDu}H{HqZus) z&w$T?*cVTG&p0_-EW9Ddfs6Ac%Llr8LyF=VgQ(z7FtvTHJ#`&+BV?m)E(igsOQ6 z`aAwJxoO2Mw}FAY?QNw=oxg)|hGr7Jrv0dI^wHDdMI*#g&mM8i7vENF_Q&P*JM|em zpzaH2g$2dMWf+QS(&1VKh^HjtSAg?0M9*^`4{;uUM^yyB{?6klf6rqxH3IzTyqwJZ zilZ!Tg^tc)2@#o=az`n%zlOtO;h6t{?}C4V?}H|k^>NSwo&c@n4y5PV zJ_d1pz%GH9_p?txx}WkHi0L)E0-gu2fuDn4gIB?C!!g(Y3Bq?!+yifbnB20PU=Vm0 zOavc-Z9qJ3;^+?Q!G53u7J@1`0rUoGt-uH_0e!$_pdWY*3;=%uO(4C{C@2E=R}7el znxQa)7LX>gpS;I6YLMR0!MATmyCnw}4&1 z?O=ECO|S=e1k44`fqCFXurK&6XzvGsZf6Vt{{$ZgAA*CxI_RMWgZ06oU=~;ab_9om z`Ct(^92^DGUY^n56tEav0FDC}gQeh3a00jwEC-JmaerkJg!iDB3SI!GftSIV;E&)e z@D}I*{{Ux$55Re#7j9E51Z#s8U=X+%OaPaFDd2Lj4Y&eq53UC7U==u*KKH#A!fGg< z2A>9>1-F6EfxEzs;304m_zt)kya2ukUIw>n~{s?{pdZGWj4jRE9KpXfY7zy44n}R=s$>1HZ z9rz2F1KtDYf&T#)fxm;R!9PIiSN{gDf&WCH{eK4mQ!Yn3`Z*og3RJ)~pbD-7Yk}KA zA8-#?8$1H~gYSVs;6*SP{0y{!H$W?R2Mhys=r_Yb0~iGcg3*Oz!b1C*cprmdw>bxFt8ao5=;hXf+^r^Fb!M-ri1Ii7T_MRCHN}X20R6}wL>@y zp&h74Pu?E%20MY7U=G*@>>m{lWd<6X3hxK=33u z1pE}t2fqUC!yw#(Pzc@yM}S_~$utr)f@44%I2Mcq$AeA55-=Go0}H{4;3#l1I2W7( zR)EvNo!|^`ANVAA2&9C+6M**r6ohk7%mFWg^TBVy1>jHM60jb|w54EUa5eZCSOpFQ z*Mhsir@>di=fHQs_23Ec1@JPs8T=A_3B(Q^wiOIEq5W@%&;bg38QakX+zn0y@qKK^ zRPYt>d2m1Y5_kYS3LXUC2j2uQfp3AIgNMQYfJZ?368$@%85d~pf}!9^Fbez-Ot3>Z z4Iu?Q2et>#gPp;T!2#e!a4`5OI1c;_ECas;p8~%E7l2=b9Q+1+7W@v}0e%ne1%CpM zf;YhT!CRpH5`^0jJ_mmV?}B&1-@)I&Kum7#gCXFbU_J0Jurc@mYymz5+k*NiEUkfF zU|$fQ{C4Dn-rxk#2+jm+flEPr2;A;?8iFqr+d)6@HLy1LKIjjg00Y3wU>Nu<7y;6( zD+Z)%uR35D7zZYS^+B3$#e?I(rr;DX0h|dYfvdrkD763QAvA|#KbQ(00@J`#U%bCl16T%b1E+(#`H(;5RrG>CG3C9@U;9&O?JX}(3VGsl zSl?-az7{h->tDDs!*qGzU&7s@zvPw1slSx|Gz+i$xAF#^zVbItzsvpqQRb)z&~zsA zBX7XS2x;V%f0W+j%KHH>g$84dujPC@%+bK8#O#h>LeP zsw5?hoP7u*L-7K~hf1c?h@~o5Z3;J4c9on|y`z$gs=I1?HwRdtITR3RXfC5PLnoZ_ z!#d%X-`1(FD3LV_&-ut2Xs9n8kJU@ZyYDoj3xZDy+4f=nj)s-5{2Rke_#`>HBdj6T_> z#`=#&Txb9+!XG@mVo+Oa9$I*-R`SrtTNM{Yx4os+Xrqj%%W9BeD15`=J4R`_S1sw# zUdz*=A!s2Sx_-kTz*AixY5lN|^mN-t6_@s~K8QkJ<}1&~`#IC(r*?2gQJjD1C(o~| zEzf^YTWzT&A=h6GAtNLGRdG-EFMsJMK0p=Mwyq=?`0D{`Ai4Y?K)TEigiD)^FAG#Z zBy)pJC`z2?CRNnUK0!DiW8-sz)W7Nc>|nJ!oj)6_ejU^cQ+7-d-Pg?CF(bE0k5#^G`<%*c`+fIZFkx{>89e$B_+Yf<3_&U@q7S90s-qOF+z9#dS?v z@JSrE11mwyV;yV3j0dxGDAx!_$e4`fK&<6si_ z1V{_|*f-?p#uKcnxQW`|iadV8$`@GGmd?xYLa_*jDHX%MlB7^Ii<@n-h~sVQQ&jhN z+oY!}Hr2JfQ{7WvDyRjaY8kozD^znI!n4BEhW{g^1im#)4JDuNgsE~7-D}m8U88ws zxavo-M1UcDQ277bK!~9;;tnHM!d20Gb&Ev3Xb2rr&!}gRmO}Z=2({7wjLJWes@Xuk zVCi9m+LaOlOCq-rk5Ilk^8fAIMhUS-NuPyLYJ%@$xL%h(9e=J4OrcVruA?^Olj{bX z40Ou^K76C4kN(lGQyXB((d zl+xP`)MtXW;Uu+h`lBCG{(U;ik@S?1b@+?2@edlRaXhgc-7fNSLR&SQ4{fX(dE-WE zAfKP1S|20#S!fQmz`ppS->(6fu7SUS5#aA&Q}9nP9sCQV2aO(pJwbgSb1VcEkiv!S zf1bu}7q_^5-Ux|De0&=_ha+cHvME6?G?wka8ZRB?#H(o(-#STZG+!UDrjVlx@#@P| zzV;@_?LYXgCTeek?6`R83?HlEE&_(Lx=o#Zc~fcYc2gOk%T_I(m!OKOH#R}G*4qiv zWpp#mCAJ1PQ;lX?#ws2?Zgja=*rN5jOep-Hk@_nLa zCE7>}T&2BHy!E^JG~yGI)YatFJ6SqSPgXlqGG`~N(Rx^Zqq!QP?`!2plF|3zSeL4r z`9H~GP&g2fqWXwx6y99=?$#W={eSmu<9C{?0ZtP%Dj#T&ss;()Ez_j$v1u}z2s@k~ zNmG?j_cc42RA=J((PN6u&<1@wviGkvH5ShpM5U_-g7zcF|63I#JyoAQ_(PFfGi1AP z)joy4-4auaLp@b*-n!D_XCU`f3*gQ)88U9uJ2nD(a1XzgA$wwLri^(`=KnU=G%d`} z@BzG1eaV!?+rI_s%L6{Yh1yD+2#T!{J*2zuTc|C9sMc0XO8-`9O{Ax!aQq=Dg)L>% z^+-xX1Gz$oH(IJKYK@1SiHLKa(8@W4w2~2D(CWW^{3`J1g} zBX|^6P#ZNS*tO<)0^!gP$2{5?Xfxcx0U}Y@MtxpXvbNGpdRtl0Fw<7^yj^(3B{4h) z*i?(*H|hCGTbXBtS<>^WEG-U=_`NJOPP5Pe)q#E#{HB(;yW3ONkDP27{EcjBA-tVu zY1#Oqc4{}VV{vk_=-cGp(Qn(Sjoh_YMUNNNUad>jw|#qO(*H&^>%0JD7uRraFEl{ zd}bHfOKk5VEj8;Z9p!h`9Eq-2;csrnr8rK_CPt?MRTe$Y+2M8{?2G2LaDExW5v zQ0emS($VqmGJAz1^jQjz>VaAZb2&ZaaOm4px@_6gE#NPEsZIEio^samNl#hv`t*`6 z=k$^ja8dE#GKXeQTvdIL4DN5v_*GeADD*kgMH8)_P6p+`=C2S;otA0>P6r6 zS6?{rw(O}Z?T;}8reE)`4i~8zpngq0ydIZ6 zQXcp8A>x5lSa{th&;k&~z$awsSO-cUIRj;578(EaKy>7Y={EzN)%5ltxbm^_=)vmy zoc}y*J*||`Q;iPP5JYQaB zbsH)z&KN3dsIYi$sM?{f%fjo@pk|TAN&1mR(Q+G0i+u`Yb-rI9EjAdYSu9U+-Fcx` z3ewMI99x|{j!!#}$#~#gJfNgtYJm)>TPTa@cA+#LJzOoKvUf$-#P zEb-orFt*+BV)~vO0mXe8Xf_ zZqE;%3fCdH(x0Y=@BvfRCVGE-O>vsqfbX1&r3To&J5?P+f#*+y%OK%02aXQF(Ow*&^|R22qgpp<85~Yt(w|g&yS#|W`I~mlbu_m) z)XDk+bmk6KxZdtipAfFSpOQ&Se@a$M*967Lmv&JN{JE!8GsXCor{qdZ+d0yC$sFli zn{fvHd&bGXoTD}nvu3(2%(M3BLk(27VJ?0yrrRC)V{_FFln?jk!fLvWH<+is6s&E4 zpdA!+VP4O|ugz1V;}bFFjF?})U=c< z`);e|t7*Pw3zj2U1oJZu=a=TA&$d{&X#p0xQt*kD1!@N$*Y@d^j2|6^+4|E9FqsR~ zAK1P?4f3LR9$tiawz2Wsi`1F=lNR3WRecg)U#S`!x@|uSV&0}!h^n5AE1X;|9#$8( z&Z#Zj;%6$=y2*4J&yCaRaV5h?kC=vOsq}>Vi=-_pD#xSm!W(s*NKna2HHv31Mr;wG zk&D&oIIwr8=782oC+q3bkNLDrXx{rw(w0W(LW+7hgUjVP0DJ_?0@IOR;x=8^E<26 zsOolUW6~`iTcx(ty~c+SQus4fYMky8KU{^2X;`~bg$tUXdnzt=kQsChKtGgRFvt9# z^pr_>fQ(@)eS5C%_-~uQb!*l1>S4b{VISzeR*lwS8%Oce>R{a>e(GtpsoV;`(AjBG zXcP*fVtqz!p|fwoiQNiz4}h7TgGaq~LDEE(jk(K~G`QQ=Vr*db;y(ke==|qHp{X zq)h-7mZM;IAMaxWpStaW}#W z;WsGoASJsGHU{Zw&NT2J5YI8P2VgPy5L^K2@W33N5@dR}2j?hj=||fr8iJ1smv$^a zdU%8`ZCkq@9^q%6RfF{%Z2X&N)pAsq0ne#j&>+T7u}1JVM*@ue{pT=k4b=1S_3EG0 z!mS%n$#c-vZV>L@+MuSv{TKS^7=CWKQQ_8&YA14^zft{(+;`gq_t`c+W0TqrP3+Jn z^-VfG<9YS7pl=L}IS^BfisA?7BVRx@Bz+h(bHPbg&RB6v)?ZR=Xj@ z>zh$~Zt>_B)k-{&vi(Igk`x}bMIE7AhPMHzqYPvOwe0Q|^aS?#C`@{)atpW^+yO2H zUj>(e^a)sc%95VErKc-D0@r|7!L{IB@M-W5ke;rjCv%?zbtp{iZFhKs^i*X6NKaAr z1Gj=BK|Dlhca%ZErgz6;a1V&8&Gv$*QEVTG8YP~tL``A`aEtPviI<@DfN*VO|H{SKG@C^z=BUf^0bjMuQ)KcxH^90Xu=% zeDCNEUI0geAA@)nj9msN@?G2H1wQU#B*~D#jYhZlfS1)CRLC#Atd6(W zu1}kIYMUnE?w$OVm*>lUV)=!|1rsNta(bKmu=;0ZL$Qg74rqsNyQ zm6fs(=ZR45M9Hu*kL-kL>eAwpIv5FE0fcKOMovYS&SGH4KZx5iykhj=rVOtrLl|_! zY<$H&HB1lg+^2>%ABHi&3!69d3rp};fP(QOi}K~e^)x6^%)2`c7vkM4%5Y({U5yXfkI@yk`TOQ~EGx_JH5NM{yiNOg{&sZCr8aKgj>|xB<94-f?05v| zU^xTwJM_)((6M{p>^}L~y*uVV(Xn?gJoM>p8gJv@l6%mw18W8wtvr5*T0i<}_>;ff zlG6O#NfSrqw--?g!8yE5?yUPX{Q?FO@555FTeJp(d_H; z5D3Mc=PYJkxl{Ear+g>k4<6i!^#JhmoyZ69FQ=)PUC0MAyNsV)P&|5gey>t0 z23AKzg%|CT{ul0&{acB&vtZSMGA+N?2}g(Ky_YptHPik6K^1oS)D1sskMTCJ1*q zP=;^u5BI2z^b0XZ*{ep>E*d{_G@c!~u$Y^Vc4#!cWaC3$ zQLVby@#a;pDBUrhOL&W~2-DfH#ldLuLG6aG9zF82r;eVOj}VQf_550xE>yKad~KC( zOejLw)XFzPH=keA>%%Mo(C>5$44V{UEmk)@x7{Z~MCVYqMe=+gA(7=#JYf&nwNx3Bx z%kz^{^HIHxra3b7KBWcYJ53s2C{o&e)zPtL+}SspHrTjhT4V@rtJg^i3Ne_V^0M%d z*HGlwO*}g=)a=dbLb<@kj~-Q{n&N`aXc{Gh={$Vg)Q;oJ@xVBx^5sY2$n3lm$W1Q< zS#^8)is_LS{R=k!V7t-U^bL%J$i!Zg%8OC1`RM43rXMgNgRbBB(dD>vQeIM)kFn8c z!t?CS4xlx!<2vs;@%Sjc!?$+xY>L5)G6sDMh7}iy@}n4hh~h!&g%WdVqv=_gg`$Jl zk1m`=L3@?w&Ww!KN8skk%*ZJHISXGgGt#W@kDNGTGpm$mSNXt$YSZw)rNQp>rm5`l z)AB|Bh2s1`8()4pEL0yJ#FMgpqjXbwUUE<{zjIJka?VOmJqo7gmX(YcU0j5&*=VB0 z1VkmLs64;@V|}G1(x*V*r&G_q`CX{nr)Prlh5JK1?@X9A;&GYIZbfC|6Y)B&(PbhP zhU+Xm_iUI&f6v5czoA-9AIa49 z>XR%AZn=$L*<%dRudrbgg=$Wu?Y&55ANOQZN#sgBNn5dWnUzI)#gH6;h* zQY>_MCs3`~k@WJI#FQY5-i9G-U`Paa_X+hWFDNg<0B1CXqN40G z#^~1Yf+SOL{cu^uIw3caUzmCsP4rwPA|@k%6%L~*f`3(47aKz2H}Yg|`|f>3st)sB zZ>g40x^BU^k^NXfS)ZbjqHCp`pKaq$;&dbpEHtc4DlIPRGJbf`)K0|(Bhf2RSCYf` zzJ(6xIJMrCP-<08WSsioxetmHIWkzdhKPrOkb;wa>OLv!!6Q>F~ew@Yg_Y)&4#WBkByiH@S{pcHNryA5xHXg1ij~hVjRymp0}CxYizt=Zluk+QdTo(&*aL1tvtK7 z-fW}%87v*N>(EJ5af-qNzUiE)ovtfCnqso)`tTTkePdlOp0vRd&U3qYDY`BE&%;<~ z4hiBbHu_j2s3)P@hloo@JPOvn1WjscxyYnwo~H{676s8qx@eEp2#N*;)DX{Ny=IKm z)#VTSn?rOhcy@r^98UH2jI0@*OUg!f#(D!<7Nz@-RoP_`VQ)!8RHFGk-9@$IvxTEG!#cS}v+(9SmdC@uBtOP3x3zEoC>FOV6z1 zWo>0bnZZ{aRm~ACol(cspf}CXWKS0dUyDTd92XZZ3l$~m9HRVi@*R|2_xAZ+I*3tZ zC7->?Cj^@vQ3Yh^GH^=nA_U;k4~yj1!;@&o)NpfiS^K(=o>)#fM^)w$Uvj|~oLPAu8o!rQOdpPHG#5@Q`xuRriw_5Wx343j^iu9zE8W+XiKtWMZ~Gu&=VjC+7(l-yBcN*7llOc)WR99 zj}y7Qh-bfx9``)DVq=tUAU|)?htWWG!4%H-ysIjWmx|13pD(MI77RUUNv&DF*?{6U zod@2thBQWAQ?Jv>Rm4~VGn)LN?9wkczkf;DSX3D*8MBo~zK4aM3|=SQ6s~K>&v^wk z?y^KS<96*zrsj)CPnKmv-M^?(qHCnZH>8C6Pf<(hu`WbLHhwWkjKI@#kzsnBl_$Ju zj5X1NX%t&}sEx*uKls&3yd5U-eN}053&s%PcEv^Ghl}2o_GH3wC#vB2okkZG4;L{> zaIXSXzo@VMmYZ7n)@w)UKk3Z)q7gWWcRtFx73^8zMRZeQLMYr5(2(LS#Di1B#Ug9>?@?7%#{$*?4Y&S<(Ms;=cszE!YfF(9ze1>+iha+Mxy- zbmDD%)^V(!(W)Qij(m3x&0FT%_}=4~w3ia$ zkup!tW6^OJiaL%(<)$ap7?nDlRCI6_TsIvuD)A4HVliWIc1YA|(6hoq=QJW}z$_b| zc|y(BIsH^lg3ugruWiMM6<$b&?GFcl%c2OJd z$Y+lTGK-lpt@~1|C>oJnR#q@gnCng*wz-{{gl5P*a*oKd>K%k1SH%!EsV09d;~?sz zbC_()lcq+RMcFk(PQr`Zh%7u(v3gtAoI)aFgLuIaV+cq?{Q$77CE8l)vZDczw)BR{7o-eB95WY8A z7a}GLzq*=@Hu)AU?*>2G$`qpeo}U{K5~6c(-42UYKNNN8U1Nyu2v6K$so$Q$qkCnD zUJtxo{n3Qp;>>Ngu|uSp-j#$LqMla-l5FGG&R`+`wuL|WsVy20NMC&q)uD`+4mXDk zxGi1drL1KIxW1wa;~evFQ85OWNHRc*1#L*8Ou~Ey6XL?LqL2MnmaQ1U&}v7IEfRtL z#3#IuH1y#|&#GYs-@7|1EWnit4REKO)k02ps9t_5%R8rNd=XybnJ=#P@?_D_lsR8i z3LCspFDRyyvRE(j^98}ykPFhgEdP8Fj{qz0wl=Z>7NU%%rYQUjUyDkO^gsNU4^54N zX;(IE$xA^opoCD<3De^fIA_;JMj1L|!A{3`vyU)K?}bTBpzdnVmsjo%ZJpCKMAv5C z#x*&3aEb4U547r49nX%@TlD#OhJ1y;MZZtSuYD3?38P1$19fb3nYBvk{L}RNt4ecb zhHOT-dS2jVv*@4JV*(6+5A?iFLZBt=39N<&>H_w)d}jB>=co6*d1rP&>XMOo@WP8n zUr;S!w1gh0yY~4XmLu(dDt+#*uIL zKbtL9!{M*qt~G{iw#IAg^09^2LWg~V&9qq54Agyc$SX16g6~V8Pp*AF<9hrsJV>VU zq&j*_*a>ld=G)_@?%Fu`?@Lu1qfVb1avrxh4SaSq;yuW~O{}qZH@XCs2j6>+nfIxU3_bp zsq>xUUbaOT?;UTMfW>H`zxP!4efpHB-F0#&KI=a+1$)mP z1oFK|bXZ%|_(0vzreE$GJbKzMpZm>!@afqKByz5axBUc(`$(LxIJKfhG|;E=(y!DSI^Syx z$*5U8@@`^-TKpB&r)JJ69! zl)~Oud~AFz_pdLGlG+8;tV~emaeP*y-kUe*tdo9AYwDLHnX!E1>p`_^l#f)sctDX? z4KroMXU6mz+2zQHm;}0glThQvCgPIVL07}Lh^&76dQEHMitB2#8bzI=VZelAWXX75 zr?ak!D7)Fo`kIv;7Y(G%4>hf3b=v4^+Cc0wW#DtKb8parP6jkq* zTC=K$oM_AwzprV8f4OEFBwG1-OHdmjOsH>dD}=rEtu2L6`XinWSXAFCyW?Man<8qS zcg=8vyI^?DJ3{Ki>+vJERF%FmQKQ+%rr?l-nneixQ+!i=RN?eN_T{)N zqNl*T#aD?*@}(U}Lgz!&a6O1?F<2Sklzhb}Qc35-9%wqf zw{+*jlBHxvaP++?>5x8IN|GDBpai`=Xz5s5Q2Jb;hk`FyA=?o;xDfzIznr?umy9cQRKD_Y`94Yy- z4o=C3(Q7T}tS^gjNI#Xz`OIAC?Abme93uN3-F84>X+~>p=e>b?+W$ z)!6_4UwfMNn%17oOzqC6>8O;p=$`qwoaifWlV?~+} zDp3eY5<(G`qCp7Z_q^WgT336!@6YG!_uuzB4|zZL>pCCTwXSv2AzXEep@^zxwT4z} zB1HLJ)z*qR*5lb$>uR+Nt=7kCBds>ZYMJ$Te-2r2)EGk%HO`Q$j#=$EFKQBxR2L65{AzBfdE76o0is-lGh~}!64Sb5IHilf)*=pUaRtDWBu^cfJQ5A+<72}-^s#Fr@ zB@IGE1I-hyn;}p*L1$W`6i@HqqgIckBSh+1sORqsP(63d5%T=fOCOth~Jx$1l9LD7EF6a$%FPWPkc zFl)$FFIw#ttNm=X->lZMZ4kDNAx4hX`de-P8N6GH)Et$SeJfclGsN&TiJO3D7mhFoqT4+YI4;|=q1sfHRP%n zpqE8^*^sN+o$V(VQH6$FHQZ{WtyW^SSymg_iTkIC&rxe)1|w>nAy@qfZIU?|2MX2q6W_*fMl9W~JqOG`tp zdKP*E*N7@NB$3n$d}6s~$W`Y3*NCcO$W=A0R>x{tKI!={&x#e$7gD;jF7+v*IvZjQ zWVIDmI|6+vAqx8Y#M!YSSFN$yI;$mL#v2$VL@^Z8$Y3*~tKKyfQSV#rpw*68ZR-H} zGzGN~z1*jWs%?k^F7&m;+}{wV;MSjK{cVd`QGd(&D}uP{$t!r+Npg7HP(+rtmX~!iK)pDrCdMBnUH~2yaj_v+r3?-tOf|$z4prdK zQJW1#)K){TYIC*k%JgE0x`e)$5XTKsmxf$5a|r2c=ZLy>h)=G1$xuXXwAyZ~?Xgad#fF{+T!s% z0VE;z8e-AsQ;f1Vn1EYIcf!Vo=*v(@v@Ao6d?-n@PKKx>NJq^$Fhtl%JV}K=M@=!r z%Eu7fa8RE{SD`6v0RJ1fht{MdCp+xRo6ndigvvrcD|rnLXLX~nXrCH#)nTYaw4*mO|7mp9ABegyM3l~w-z(Cfn?5rC0)KWvPdI}mL+G<10yD@OMh_4#r1QHr1+6RVQ z^(8b^v;&4*^%FEiv|kOm%9+kfZbge2a#bB@uxJeoxvDiZ2#xdKGYm58K?4yZs*54^ zeW9yFyV#Jc218ehHp~#Gq0kkgO*Z7J+0f;p%{AmI4;moazcu+i{Tc8w5!V{x$Oh@} zCUIml#3mASsc0V?qR&8=h<4Zz`y)_4(M}lRv}*>psft$BkgMv>pi5mWVnaktR1MTe zv@;BGRSfDaT4zHX51?YvdK+@pRnSGEU2Vu!W1$O0n_!5IX{bnRoc|hR@_~AZ$GZ%1 zrUqRg+9QV8h=9%)t=tf`1)V3_RznOisHbQj8Dg^+>LJ=ULX_WCzkvE%LJ{@5A(r1W zc@L^+sfOrCP&d&U7;@EV&^e;DHN-*%>MB|%L$2xtbrG%DkgKko$@uRq;$TEguDTBD zB-(gG%u>+VqRlkKIRn&Dw8e&8wG28-w1*9GDG$?M3^|5W{X3Z=n?}Vu%ASlqXt!L#}EC<%)K?PkQ}#CYU4Q*@j$o z0hBG;MTWSj0A-0b$Ph<1=nT=WH{`0Dp|+yUFyyK`pwmTLWQfHJ6l){ma!?cVH`H3R z=M1sS1)V0^>xS6xhgymDp&>5XKrKZ(XoyJ)I#sk^4Y?{jn|H#B=Ee+i;RtFjVm(7# z4sc&JJe9L zI}LHPgBpnTkRcY+P<_$X7~(oHR8O?m47q9tR9CcJhM3Z!I(q(#r~?`ycDkY3qWxuv zWBD!qB8@9shL}LCHp^suE_6>Nz6UzYo>#A1lDKP;c9C5`@u zD7z*-|FJV;#R@}2^9UDYC6TR$xXr*2P4cMkN|P93dkuO-LbP1r6ITrkacRP8>#f%L zF~&UKFtoq9#|hfL;*oG(+6?1eJ?+rXg3I3#}FHd_&yd06iz#07G1q zgw}{Q+K{W(L%Keg|27!p^1@R*ScB-O3PVgZh8S#5`>qT&LtGtM#TOnW#4JNpx*^to zt9@54IvHY~fi_8qJwECAZ?6%#;`5B}%to>ydNuT_1ZnxKPxNX-jA*N^vD$HHvxMlj z#wV^08)AFPYTKch_Q+=0b6j4PAcG9Cb!3R)X|)QgwOPx>R|zr25SxsKXzg;}m7}5| z?jM1+NQec7xb_+|$T^!8Pgt#B9oI!A$Sgxtupzbte$7$SrwfBwsS z*>`5yVTk$a6)vwzkmLMJ3(8e+yYMD=g-UFi#kxH__l@xNVy z97oi||2vM6<^bBgc@ddT#MuBdV7n)=$s}5+Zf0PpqE|alfe$<>!V| zE6#a?%gqvGry=h6F+}Hj(|2VKFvJBF=tBw7>@A-ns-+<&BxpCT5jDUNC!f~embaMy zbYO;<6)Oy(ZR0|*L|yQZ;cgOzR$I4 z2{O?TGoc~&IIOnSYRNmf;w>SH4RN*05SJ#bw#{lSKTv9~p9U1uNFqk0(haeqvDy{8 zxTY;ZRv2RU-VjHz4}I5&s$+-^Y^$}hT4$?uv)b+$_=QB>Y`0HzA46O+wwhXc7>il|gW z>>ya}IjenRwePH!xreZN{$tkD2yp`TDObTI>M@2m7cfM7T5X%vI)BEcb_p@h5Hr3Z zrYox*vD%=|x!^4!p8TBguQ8%l8Ihf@y@8f$i2e;7lpxy-anGnBwkh`ct{j*RG5J7; zBt+^LJ~8RYTUCB6OWwv9pVlEza)kzi6K{g3;l>|M160FXrLcN)3-Tj;<^Czy=ZBM*yDvN zL~Ce>Z8+$dXtC1`vYLZ_67eiUR63-y6;T@uvA{met7Op}wcSue?KDKCAK?nRgs5+b zTlt~mqO~@}k{0^azy5KikL3RaNJkw}FB@W8(rUY{w(VQqUMpFs{hd#=u_2D?R$FDY zF-N(AE+N(#qJE*67O7zHFG=`&LsT&Ir)c_~3r$oo^oM9^hNxiZglG*7QNa+eo~9tD z8=`(8{S_|`VunZ~2I?$CrZ_bG6? zZHNmJP_k%~4RK!_R7td346*)O2s$F(Wr#CeC`Gj8hRFYqL1xY}#PkAH!5@1j$9&=# zXNWn#YMW1LKT(eoBK2oTe^!}^K_kR5&Jb5UtTyo%{78@uh9YXSAvW8O`>xy%WQg5k zt6gNZ%dIxhY7>v^@h@4JV#WHuay?v<8)=Bm6+>Jru-fldbAIzfL{!8O+qqV&XSFP= z#ZL`{LtL?GcL8~3Hn!Y_mr^d=si1O1;;3<-Y z)IWTpNepq44W&tta}BwwH6lqX8sfIqKLf4CpUi*SnH_8^ zUTBEDeXCt>wP{wHZngPVTWGcWt+vc+Pg!lX)nYGMaibM?TWyckid9HndhMwD46%wg z#GTL~-!;PJR-arhH3!QRU_>o3#FaVMcaEsRhPW@zY8$Qgw$>J|nQi4 ztJ^^2aY5girDe5{%9J1z4UvCCT&Ak-yGGQVhFtZw)!wt(&sO`*YWYzeR@Q$V1ob!= zWQg4#tL?23QjH}GZEE_&4VH$uByY8kt@fkUez96=tsrc=AvSSqbN!`>L|s-pB*cwW zhL{uU1lom$Ts6XK*I2E@YO}1iy>3V~m6+?-^C_Y-4YB;TT5O&bQ|gCQGYQhy5aZnt z=fqaqV>Nv_P>0}PVu)c3HJ4aY8~VgBHpIgyP%8;>flqq=y98`0;s8V3d;*;++9*SG zDX4{LQw(tjD|DJ@w;FQQoltAh?l$DA`=K_XEi=R*Z^Zmp%tDP(4r*e>3-uOlgCTC6 z$P7wS)ezV6tk%(Lmso9p)rMPbwAD(iHY;YuIZZ?A407nGorXAQ8sebYETpm||1}J` zDig{Ut(hV2_)#F;4vI#WDOH^eRVEko)e zX_6|2IJiPOs}XgxAy+N7+7hcBYZX!*@W*4?r}@O@l_Bn{I4u@ZXGt_O5j8QXKpjQ9 z(-7SUI$N}5hFrA*>Ll8ehR8zeAdw}8m}J|8_}GrlLeJBEVvaS${@*QNSBd5}L$10D z>LS`bhS;8m&Jk^eA?}2Mx`|e9$W<>x-9_7E$W`~W4HCZJ5GSre{`s#J_nZ;p1#CL6 zEwg;$T-Okn5}@-W>d}UH03Yfp+Kq-dLxg&WHpdWKIneo{d4{;TCyV*-0udiU)WmIK zP%qI|8{*Il6^XXd5Z8Khf(%|_hz@MERaV6{offsS8Pj=hh9eeQbyW zb9*|WWFf;44_iU{`^rqMhPZnQ>MhzChPaCw(lK*A#SqWG<%iV8NvwZ)ET}*b=PX06 zx*qB)K_(eu69(!h+AKrd*8*K4+9E?-?J5l7D=@?bjx$5*Qv5k;kRc9nP)v(FcGbam zX7kVx*9FcBss0jVsv-954RKElbh#w_x*=}dg9eE9fg#EXT_)OoL);q+T_M_!F@wA$ z0=iPfq>er@@j_RLR@D$UVL<~$YhZ|*u%JPrwKc?fAv9RDPKI1{O((xd5jEBj=f7L6 zxXlpfzgY63gzh#~ev4Kc%=hui%>>%Aa6|No}E=Xi}C ztW>}Jl{3TNrG~EXp6(H@$+z5I>k;mBMec^-bGvWPePj6CqRqKGhR^M{PLwC-7p?0( zzu)#grQK6Xd!|p{r+28*7H>*hyQ#ReD7ANKzaxFvo8->!&C&VYpDdnVv>7d>v}<~E z-{;1(weOV==o$W{N>b@xUhh8PC%s$0sb1Afx;VV1TJ9UA{i4I?x~1J~mlmZAFYVpU z>wR&!M){`~hr^Xa+r0h#!v&$1UW3cR1Cr9#dQ&b7@Apoh5ss9P91#AemsQisny|GL}_WO?}9E@RTx_WNq%7va+G zsdI~Kr>!m8zj0p}KXcEopZ0S1uQ%=u<8N-4%(R#L9SFQN!`s2YTT8qh3cR(!+c$x? zEW8~KyycO=md^P-Crli5b!ky_=DzfaHSv5%(jA)ia?v-E=*YuSovfsZ+V6n4k6hIF zxu{pMzFwMNmgk0re@zM%dn-qV>xItn-WnNhm-K7MOBxkEKlF@OG%DO6bia4aD9V1B zw@m-);Jq>`{7&dX@AlE*hFND2>C7onHL+P~(f-oteBEX=YHDfEXm8ViDYG|B48Pv} zXy|a#;TOHHM~Az3D+eUiEAM$txSAVk=UqN2Ji=K*L(T2d(z|L>xW0E_Quy_|D>rn! zi!QAa^Q3nXqMBw zom0Zud^aw9WB8`fWN*fe;oQ(U-r5_(D?>}X;r|Ms8M@M2_OEbb3i9f|!UG$B!j|XZ zYNh?Q&D@kSx8JtX?z?Ah2+i%jyR>LqhoY@%Ggo-$+!Q`Fw8*;#Q@fBhUODrN^hsHz z-H*@Qkkq03u^TEM>KF2!h=m)Hz*{#F^O@z}-W1LXdDRz3>w4{`h0n>zuEbLm{f^Jv zl-!}84$#7zJ1zW4x?Y8p79B||@0~pJi_paLy(Lq_jl4xShno=9x|_qZl73a**|G3t z)gPc<85C*dU6Y%az-hDQd5_1K@|JkpV&eUKjI(6p-lVzR_j*so!u4_LP!jIMyNhos z311;~?v;$rNLf2Q{7&VDxjQK7@VV)_7h}&)D($}W_0G-7&d%4nwD7LKxk~jWGpFrO zo|azPeLv!sZquWrs}Ap*-|u*z(WE(;KZm%*^=aae^u2QI$xE&B|Ui0^T4kvg}vy^aE`aQG(5Yl_FOT1 zZb(OiEl%R+mM+OU6Q%tswscL=q&*$ciIw-57oHO8u05X^K6e3Is1)VI^o@$<4SHg7 zX}=StU8gd`91Elrq%B>i`cX~#oFJtO=Xfh8g=&nPqecF5cTD<-NVjyJsDI&OOP47^ zgq%^Li9hY3WR}n3XZpP0hxWE0_|g5u>m@A0C7#!(vnuAzAcMDs8x+_{)8R4C7ecj`@8rGnUA}_uxV2j4@&^}( z&rhlm}*&bTMsF!sDoNIJ=F{Xt!PYEj2E0Ms?0OG>+50Y0xf2cBE-Gf0&aEgePa3@s9P z?sU$D{-!kXmDgu*nxR5cFRWGNZg?GJ%XHTCy2t2XTe_wLI^C0%cUw{FoTAjyV>nZN zDWz29D#q|%JG{`nOkCR+hLfdoy!0FE@do!ds-%{8zn6ne*Z-wqw{-SfQYRl&xFoNa zQhxHfVZ4mnqqS<}ZaADt!uknR|Jh@XkSSir!HqM$wA;dMy#<3CCwm?53qQz#t$go& z;ZKsPq?M=Wqgh(Hw|Qy!A%13%b$*tQD+`xqc#rh2*~-hjIO)>=^?#?7cU%*m9*G5& zEfvpL(`}+FKIjIz$^$>TpHq;uwNl$01zJfJ>r-3(r^`4)pRdUeUCa7hOaC1{^?&ln z8dcgO@QJ^)R~G74o&KBZ%;QdJ;;hec_21#PzK3T2qlc=JQs7^*B<)Y&L%-|%cPD{4 zx>VDDC4rclR9hG673pLf_ofqk?sR?je|WgB>q2*wtmw4|nbWni@e5|rl(`GUV@F?? zUTR}cTlt=!l=NaP%QTU;a_h!@N%K<|68YTQ^7I~|?@fo69O)wKiVSL%B1@z?p8xKl zDjv3!1pfWZ{L>n|yz_t7@qekp|JtggH2ry91N?QKbeUgWx@P_As_%8#6s{XP+{Vwp zu1Ayqx>CUZDbAUGoE)e0*w^v@vU_g#C^N9A$gi#_8=4Z*fKq6 z?$WQWe05vD@~1b2E2ns?F07L7ZGMvj>($BOsBL4L|(c#V5X=&x%k4q*; zQr1e_b$oM%f?7{o+bbiamvOyjoH+b4$_ac{>XJzz=XTB1dG)eC2v2M#YwG_ojcN6W zwAh>eAxoxjJ_x^5)a(D8tycegwo)^KT)lGF(~(Rs`eFFIf0T=Ia`AFVFB7_a6mA&N zFnE7Bk99QDNNrXkt3rpkjH#Zl!vE$^+Fd#=`s2f;MYS1M+lSB1AXnR|yzQm^4wg>Z zU)pU`a_esIB$pm5)*>}Z^&Kpow!buWYwOexneY7hd5-Spf4w(zb83fU(t2~dZ`1vR z*>TPqoMyiFxh>08JNBRd0W3+=+#>&H0WHaF>TAKSU~VZh7~ z8~3G?@V4Nbfo_sImo_xLl2wPE4s^d}Iw06K|KMAN%#{|U&*eS!y*)kywsb-`wfyC; z!wr*|Z0Ry94mVGGrRYhC=SlLAR^F@UpEEb=h||hvtU_tMm9wiAfAf^u^KTxOQ&G!B z>pHQ+)|(sa?3DMOID5yTYiA-ZVM^21^2RLh4qDDA$243y~}TvRrkG;uDY zuKCw}`Q3-ZHLI6(*f_D?X!5d#0&UQ3QRcNe9B%53UYwCyzWq@6lu)sp{5>ggu8_g7 z!VHELc;{cgCm9T!)1;IZ9qiC^>ZDYpZKSZG!*=54u)Ky^-OxuXx(<7nw>=zwUOLjD zBjKGIyjQ*pKdWtUo}=Nm;`~NMI3+2WaL2u`Q=P`;KmQQEr;_e>3x5s|Ob+~e z_^(mk=J)VKi3+z<%ilN=9vpaRtwUTEa*j&S^D8?`Lm5(-ZCko;*PSBmmG0ZTs)xdL zVspFiDeb=B}_6|jRCO4HvTY(>hw6#&XS@#1?w@-@jliHkHwEgf0^zIJ*_N3kV zq4uQ%bK5*W{nYm+B+VG!Hk{%xA8ymtDRPHR zY4aZc(;IwE3iCL54Ax;=?-5i`x0B} zoL*TA=k!oX`8zF~xgkE|*T1Fnfj4(=qlV=@S~)KzHPZ{EV{&eiN~mMf{KpQzeMnb= zJ~RBH^TeKBmzy)9HIC2R*Qv0mBG!rk9r~qCYpmz+^4@KnDV0J$dT*ZLoEqBd{cwhp z$0rU?&2svMs`H9_XL@M1_g5C3bFsHH+qorF)oYRCoE4ICM7_y5PG?=16aQHS|Ftk* z<~U74)62uTPTQnVAFo|IXSKJdrBlWGzMa#{8#FvU*(+KXj(8>OqRHjG+B*}IVnb5= z*Jei5d}uDkimLCR2}0j6tLq)ys9Ndru)k=#q1i&;TdK<4N50m^(nRPg@wd#<)v1A2 z>QjuU^?Pe?6OYe8`fMz!ezhLkRt{dzm2k1s2{qEU2g)*!8?{bW)iy*&DS3uJx>|p3R@i*SOmOv%qs^9zS zr?CXmo3&xJ9J*O(RScXaxE|6cv|+Usx=Cm!^e>@-)q{lfOJn^kd}%3(QxRXwsS(uC z8pv<3{m>o65|y{O-Y#@QO~1BcQFXh)sM4PlTOiIwklqvut3Hrlx>zVv5DC8krEmz1s+sH{`?1`@w((+JAyIWr{h;k;TDl!tB(9HI z?G;OJTGvmlR$-|Hd**(xD6}*m@-z4VvV^Vs@MdV4 zIB$o_gpM_{uFd_oZ-&(yke}&YkRNtGqz`mqRRKLJbZ!ft;ew)S4D^-IKIku@PN$Oo zY(f3H*Zo5GK<7eX^*!WA{TI|;wB(jS_1A!&lo0KpCxmW-{1989d#uak_brqJ`E`Zg z*ZZyOdT&HmXK5_2V^HkdpuKpCs;4^#)%X?US6;s^0Zp(p75YL#%z?fXdH}jbXa}@I z=%A(AU3rm4l1?KRB4$0;4*`9T(|i%_HOP1O2vp*wRMGZ^eU(A96%NqNnD1`ILPm!H$#4ic@Vd* zl7%IZ-UJG(Zy2+bRpJEYA7`m&rom%Yv@gVnEgvf3u5R)`mK*X&4U(5Z0iRqc>*@7DxkN~qH4sTK)Vm}wb0-|>j7;O zf8|#D!`JkD+5hUm;}b&y+5kn9bkxzI{%UzDzs>1(3sy^N*?7uW)@X-pfAKI}$lrryv)qK$(d6uK2U0!8IrkKYQdM*B|ab;u9<3G|I< z70`a6%43-?^bMd*Z8U8GF-o|LNkex(|AbaAEZXr1$p1>P_fPp~H~x z`Wy6yXwD3_?S!JxCZR6St3nq-uL+HXHVaKH&+g|m4#j$x@=|D&sJb5VCy*NR{6}e{ z>R*treGmCF!}|Gwt8;tc`X{tQV(EHEpjBBAl(Z(~$MUa*fp$NHrpLbie&quaxC7*S z?7BFJ@D|9|KE2C-=99s5cc9(n1=@>{?{CWoXbt0gc8u3ivai^uq z&jy-)e}i8O)z<_x$I=6kKh18i^o6C!b3uqTmOg`)N}b=iR=ZOEsCrdUQ);>YWKvjV zKz>6sg8VGBfzqXd3n2ZZQ&|0GT^FqjO82IvLC*(aH(8qeLZB^sf%N^{G6JjMWhu*24@+9Q_MZ&C7uM^t?a zH6mM4m9aI@+FKe1>4!{MEkl0cCPRMVWJbeT6=N`U!Ze+9%vKE(PusiGB^mjMYM$wqYT$apmQa}T1Y?Tz=|01v$YlS zv$a#dP*pz|5mtKYw$@>)qNpdt*j;>zgBOv zt{b5Z5@LVg%3FQ+1kvO}_lxrY$ZxyHAV0|akRRcfP@!b?Amo?nXUH#8@~3QXiEBEf zAH!f10MZX%gjGvOKXMUP3!&!vj)kcD8r&oa-|<;64!*RM@;T>^1mWZj`dR#aZK?iV zUaKgsXFz^KoDb<|Aj0Y*$j{)Fke|UZP)Bi{vX}W!Ujh!RKdf`@eL>lCAipxZSh^9~ zq;zIphc*ZuvRbPzf-GEY>2ApPx5m=P&?^!)b^z>_q_c1Y^7Hx|urp$htlOT`I1ttm_B9YmC63g8jw$3+voqe~^VXke^5% zbeZ@og#1JmWoQOQn{|A^qe)R8>B}+g*inAf9MITcr2uW=nFvSZaJQXvMQEjfG5$S?yj+ z&so|IT|m@f^#SBJ=a-P*oE6ad;;LV*pdV0S{g-lxmA!~jsE5$?P#-9&mRouk+9X;1 z(`wDW3Ccd&(!G!$cE6>1hnb)y=1j=X*6GkyF^TXjuvnaXLi*v6uzC{mlluhnBOG=l zNbV`f*Y-iTNGz4Vr4ve67xELS3HfDj2I*%)!YT{uE0m+ZD&ddl*S`zsGfQ=j23oeI z^C3UNA0a=37gYok*UgaM9oIs>>nE1<2C1*rg*NC+^HgVmY7FFekQc1B%~Itbg0c^T zZkG~!R@-jr1mt(P^L`BCn+5qD?g>jLpxOTVulcc{6W(O$8B1S5eg*5VMfg#guhTH6Ri~>}jT#?D*W|8PkbTa~TiP#QS^b-vLe%j;{Vs3g zE^dSBg;{OK4ZT`@-+9Q`Ysa-6HMC)$nRgAY-a1sr`@BYG({SD`A+<5=9jzK^7(3<= zIe)45-o`Oq|24a~M`3nujw-IiSq#4`86{hF`Pp&MU^i$YAPn9M5 zDaevf#l`uF73QjS@tz8@vhw6Ymi1JSMGfdiiBodg$;WHrl-%}mjV4aXYbPIvIH}}j z7s@+?qjIe$E zciA;gw^(6z;goo{?Cipv{F1*Zx$WlsP07n$oS@`n<>%k`H>DtN`QMbnob`!HcFnAu z?SGT9v-Ub(cE=h~@2aio;ncaznv1CGlC`U9m-ipz)J}@+uEsWu43%cRE^L<%eUhNG zNBJf}X@_z=LCHf&t{xvxE=op%Qiw7uK2&=>Ax&*&C4Q+7=#g1Q2`inU9Msxg^|8)n zS7b?inNszfi_!392}%Kq{t|IzCN`$tUKeKT(oC%tm#^#slyM1)&ezCV-pAz`4LkHE zh6Umpq;fS%X6+zOysGQ9pStnN44tmmc%0KNe^rCPf#h>^wVcR|OP)^5&R>F}tM{Nc zf1EQdKfQ5W;B4)%vuRvlDb3adMVDrS*X4Sr-Kf3d5M=v7-Nw!0qSLXdW6k5D({-Z` z#w$8Dwbv^8*R#ZwiDg?^P~m4Oo` zj^{sdp;GmpBY)NL_is_(<02HjP=`$aqA9nubeq4Z-yIO*Ve=S*}ii#71Q;Xf!= zJCr#Li<4eEqs&ZDEI*Xs6XX&}`gU<2s)JEB!pfq*#If48I5p~5=Md$bo6{B?S z8m|mNS&*RIfTAzso-Br*ItO)&SISU+=&qHZZJuyglct{=c+wLAO{Dhp^ga1ggPvEm zCn&Up+G-Vks7*wDhf(~hc^jod6f?!hxaxL(T+A}AVg>P%46H1x=%_y@qGC~kiv2+= z7X+Esev(t@Jw@?KJ(N`!#w)E*^tR5)8p=oM97~YS)t=-pXpY_}gL=mY8;nwxpj?kq zk)Xu>Bc6Ywr1y!B=V_F^eQ5uaIog2K`QmtGCrVj@@)gRezJVW_Oi#<|zDu>D%xtcY z7Yh;;-K=x0!VmScj`>nG+$2v#ddgLu`^QBjZI&0WNSn2>iVl%fh2{_?XrSsS6$wgH z@1`kEkNjL5HnK-?vIm}x@_d4F9*X}LG{L3buLO<_!{Lw1;{#7d8N~WpSD-&f&OoU$ zKHksWD1TiaudGJ-JwbUD<$0^<7(t>|w^soN5y0+dPdO0KT={t1d6JRK4g zJ$PCqDEi=+k)Y_7IKjE1Ur!{@0-W>@BuKg`b|fe|LoX#Lx^JwASMqcg7bPgVYuucm z=uF?3ppfa98jv9ATz5!Nbgo+@D7qS*1Vv|Y_qA~)Yo{~xSc0N6G$BFJ8H#mGkaRV+ zOi*-&swXHqu@}e0C#LJ;ws=LBR_7-uI{9`9icY?1w**NiUoAn=$sf8VF0uByKDJtg zAL>KzubZ42u{*6u)3(=nnij9H6lbB8py)hZoS^7Dot>cQEVW8dbe5tCiq6v4vC(n4 z9-OU zGQCz5()W|s%l>7Fp2+pQM1@>WPE^SB)rkt3E=p9$bU}im=jNuqqPO97uJ!rpDT$uQ z^{>O?OO{Kn_a`bO|4^br@{1A`k{_R-=y`XDQCM>78=OOXAZbydpB`A8j-j=9Pi{*(5S?rpqko@~s+nBE=c|Gg0dwFsu z$j&FCR|h93L{v3VA)*O`68sR))`9VgzTta;cX+zfsCkmh`edSZ3|2LJW-iNcDjM(cqWZe=U_8-zo zC_(M^LP@_pKGY?tRDbau@zNkXWiE(UMx)GM7$5ZwD62#XqMn7)dQrTe1t`U$1b*&C zS+F=h=0{RFkQd(-FX<=EGVhL8UO^d`puCBa?gf4Z>Kf{Cj@oV&T^}FdXTy>NKSkZt zhI;}<`}rI{v2?Dyo*dkVkt*(sSAIe%xj$a{3nl%5c%@2J`bUCN9cA3oct4F%DiV}4 zQ1-^k;yral%3Kz&oTrrseq8Q9|jK*2(Lr4?YqfN+-W3L1AK6J0CF% zxk~)t6T?JQA)a(Zrex=gTM=I}=4w^{@%X3Pf_$YhE68`4NB%qfuie7SN_lql2$CP%k=jpqv$SE zY!!Z}pNMFjC^|7|p!14V*~TDhQTp{QUiDgna$djU;@1O3C$B4i@m5J*#r(F{Ihtdn zlf9wDDmbf3rzlk>N>J9CD8+9CQENYEpbUB|Ug@Bfx8s!_I@G&H(e2OGeWZ#&5@j$- z=l6nOh2k^BCitfVAtfCikc`~T1gu5C?^2c}i ziG{VGrlRPWk+nqhlu`WT zH=$IB5+8M&PvfHIsxo&?B`CVAo#PcrJ|#|x`N=CQ>Ew5k*vH(UrK{RcelJR~_%X@n z=%}ae{d@A`;uR_VNUIP){YX45j3P0|)L%#oL<*wTt=R0#_^5R&woOoU+ovWd`6$U& z;fKmd<2d+5d@&lJbQV7*t%8`Y{Mv`&5-ZRx)GR^KqoZwtqGxaY1`yjBx!%o$Y88H{ zGf3*SCB6hy=i^&*LFH;P}4TTmWJPcRM|saBo6^8aQ#{z~O_33>!FR?BJmT$BiF0&csuY zm6zpR-_EV>)%KjmRkeQ>$KEJ(p2q?-;9$sK;HH7Bc}9d#v*#(qwAw%5DNnR;3d^N`eF zcC+l9oLudND$dbA*uRh;x%x-@Ebo^xr%9EZtoH5OwQrYQ=oR0URz|r2uWLv?&fB-}P=vGW8!R`O%v z-DwRR-Cv*AKRUQIio10`w@bfXeS4kP^~@&x@0_B(-I`=3rC5o__AQe;CwTy+8fb)&v;)PXp+}>i|Rl{{--swWxNkx8YIe z6e(QiJF686?E4`j$J_phlM(9T?RzbwWx&Oe>P@}hA9boV`$r9;?@i-nGmUput6S{` z8iH=5()p+VeyZusT;a40ec(N_!nru~hBx(br?%JdF(<{%#SfR}! z;}Ux1^W+i63~1#8=k# zYCY}TbitoQF=6<16aQP{)rn#cQ9MOyM~t~~%D{<(M<^}sHsYAELwvERWb@OfooABX zs#(5prL!QUQ);@JTK?T@_+WA^Z`5k%%=oJIHm`OHdGYU`tDU^~YR|eRrH0r08E31G zVC8duJuQ91spVb$taDnm|Ew(UfoGi&+Ox9;&(GE7#mC7ty`nWv_y6X3`5LE5((2k? z@w-mFa9y(fY;Erlnzvohq<>$Uj(0G8I4jO|U~@8q=vrpek*rQjp;>1PLe9=g3ZPD!RBEH zVR?R_RYw1!Rq^P z$6!Zd$6{~8j>pc&PDt{uf3;Ti3{bCCgn%qbI-AaJOs0xErmC|TeQ0O*-Or)q4T`C665 ze)nak_kXL8l@BJ@_c}jbH`zU1%F6TRHN8QLtJU!)z2Xe2_8ZIA6F9_G`GHrca;-N& zzYQBy`RN;++3ga_@V8m@6zWmW%j>Dfu@iE5$9*KD4Znwb2R1lu>%8pC1BZ_qHfHDq z8IUQs(k^W`I<>3p)e8mwc6k?VWc~7+H+rMfD3*^hyb}E$I|4frI}$qsI||E&pc;)` zi@gTB9Xkg54fa}WGR<=xwjp*bwg5X0+Xu@XbR}c3@bm-F zHz2%^os8A*37CTY9eX1-jduSRwkh@|tbR&pDpo%^F%3Hqdoy+dmK}|fTd^hBCD`fM z$FSVESMmaOCiX4tEbJca>`F0JQUTn8kjx3rt=QVwx!6|N+puS1OR*PV=V7nF&c{-E zbvu^C)g4&=sRh_F>_Y6**t@Y?u^#pd>=Nt=>^<1(w8sNF$EO2Ju|2Q^E*XqnhP?^< zAoecoL)ewr<=EG;PhgK?pTz!zeG2;)37BH?iMg-@@wKaJOM| zuy14gV&B2ufPD|k9d4D>j!NFbvKn>WxDnENvp?qKz;pd(r*)hEZB*zLgB}&H(EZ1a zoiNeseKe_hxHdD=#@gP#%}!>eT{V@rp?RY^UW3=1S$gJp=(V^64!!1d$o(e?Y|;q~ z88eX&Q>12WuI*j=x|5T{XkR$6R!wi&>&`gmCsrkmRkC;cj9Lv&(Gz!LMu|KWZjPdt zZE;5auW6-H7`^yxw#tIkeOW12l|it$owFwPMDFPHYo3! zZO(0>P2SJjoRy)F_sHAM8N6I@*V|;|koV`?&ZX6MQA>jer>8poN9&AuhY3>a`j~VN z)-O{n@9B4(5&uKMnuc{3*d`04rb*jtdu6?<)b{4T>!gQsK|H z-`>DoX|-cI#SJJe`Pa)hhC-@D=YnNJiPj_7_SjTx4{TLzf9xsPQCOZxE#X3-O2?LB zGq8FFt%l{yPw}0$l9#bj?7LXr$5gTxTa$0rl<1SVS_qX%yf(HDmVYIuW9wqi#YydnGm#I}FY0?(Ehu>%L&7zWh zKsLe=EQjtA{q~b~*a$Wss~_28ewU?3A@+KHcfj6+JqtS<+X*`d+ZoFqjB3We;O}RE zjwBDCXiX0neGp{cQr~-{-*cKKWpQ%xo^uW>?)Tqwu1=ys^LNnc>23XYI9-zHQUBh- zYMowk(fjoFNp-x~`@EZShnM}eQ`g(|zEdx0Rml7Cedm1br_)aSxOKd-JDrP@KCFHB zUrs&m^PR+tpL0HN?$v%i{{TOe>v(CqoO6r< zz+2fUrIB~~M^02S@{uz@2U_}(pV@amlFXJj``DQs!bABJpE!5Q0PpmvpVhIS+N?Id z>+O`ZMdNy=ct<|v-Js;*iO-x(I=Zo+vpPCb{=nzFHAw5_dz}}mZPhJHZO2WvGxsst zv`%BF=dqNK1ZsJ2?sNL-5;p$Ana8&^p8mpF8P@)YYsi<*=-4*=^J1Hl{n*d2N3maE zb*uCGnv&nJUtyC7!$G|y1$z*ypW5cdE+vc&{kE18y0-ojbqQTmzXV2B5G?*m`tqB( zv*ZTsG3-<`RKd4)xZhfQLo_!yQ|b;;A%Fm^4LH&>MC zLRLxg>P)EBB)+je-~SI9Ys6Q6WA)3Z-sF_NlrX}-V*X95C7lD$E%)o)N$JL+aUj{Vhpr^2c4Ey!{m@6fmGYSNS$-#Hbb zzFyK%CpWD95^0B{&Vw-qtvbvBxhM7rb`bVE>?rI}>~+}hu@kXBV)bI~81@0|PuS(y zpRvzik7L(hf5qxo+Wd}v4f_XHzZB;$>~1WhzT{(UC|NaVi1Q z-oE_m)iYRB^d#8Hf_qCVoF-LQqU$o3VWrIHnUc2kdVKHfubjt$XsDOWXBJ3i`b8N(6mgcont@b|AJjb`bU)?A2IKQq>SFC!K02RzHI|0y_#j3OfmV4OUOm zW3cyQ*)lA79D5yh6Lu_CuaC!Jzr=f*2*lAe3KE4^-2OGl< z#Fk)L%&QsL7#kiV{WsR+F!Lo){w_;f%t2tP`UY?6(MXGMYzKflwBis$l$9{&r z9s4Er4lF%Y-HD|qs>Rsfuyk?N@da^bA}2o6}W}obUe59L$03uiu@ndU_~(BJDKq+7nKT zDo4%HIqz;KS||L7&RWQO@r3hu{Gq}7;~yLv8vW@X8gBa2pYNaeGgx#?*R%J`znlS~ z7rf8@axNw6yYf@?s^hK^DZ!#cAIYa`j~9eeZmX=9MosTNUbT_;YbYgEXWdCk>7%nQ z3yx_?Da*Crrj=6u724oEP$^|>e11D6r~IGS9b1x9WZluUGFf4fbaCYry+|rwQ8}f# ztQg)6|9_la37m~p|3A;2?YYk#v)-AxclKd08QWO0?=HeHgDHeDmdU;jNw}k-jB7;V zq!da~WGR^;%S<#VWke_{>l;x~DwX(uf9IV0nBMpOzn^*E>6730e$T%B&hISG^XOk{ zUGXUjeIG?WRu@_3ZUg%*@9276$_=a~VS?}wt6oSsddaFc(x&oHt-6~6^)?U)xkn(8 zdsKWH_qFNU$ZxSt@2+uf3DmjDeRcjoIEo9?>EpovP=q$sbYVL6ttN}GrJ5|lH`Vlh zC<1R9q|c)S-Vf3TYL|FquugT(CkD$BtPa*YSIYcje0+$EuOLKUNFIYjWv<(W%H~0x z$4i^Ag;fvZ<)QjiioR8tJ`B6@uY~DhBR4exp^)`v;d;ma$Lf2Kg6$8NxlXXdzuU=s z+x52E9cjUCuRJTcqvak#|gcxEB0&jn_q4-SN5@N#447 zG~qwj&9@1%ZaO6*?rKgxHBoQhwib4ohmXpc@;4(|joa+e6LKe-Cl+x|_#BrrbEY^) zpe;aWIKP>whx^1k8NcZp6zShv4)GdE=#VJH<4H)!y92i;NuT|17MR67tLv*Y?Igci zLyxsA@GA~T#>faefQgYzze*O#&o%YxLBx|qvJbMhSkFZ8=C$;GSkx5N(x1Wi?jmaI zPy3NkmBQE5)?4^(fbYrt>)LuFzlDGcc|?ldGcX3>@khriB|Kw%V6@*b{A|P*rRZ(^ zDUk(!{Ah~)mOBM8ea44k-iCG|j z8)U5JfXx7asV09nWCA2reWJ!Y^v0$)GEY+%{ZD^r^LOiDK>Wfl)Y047D;-+VMiRB< zVLrE^-ZrLn7!0ADDLLb(iq1rv$3LT4>C}nm@USSp=0dP9rn{x9aZFT}s)uVEdC;NI zM4ta^sBf)4NS6Kruzf(g-KZXRTQKsUMR31jDNd-X8)Ak^t%rVC*U2BPr;n}q?=pp? z&C@oqx6QBB(;MTMC854PQL_|3TVD^;!sdjFrmS4rzut(bUX6HKYPW_&$s6dN|G(r~ zYhKz=uY)f{Tx+Ngv^R$ha1s}F@JBUt3H1=m2c*G6FFr3#PYxN2;fcR6IG%=MEnbqQ zC-@CV0XOoqX?mmD>40US!V`67Itr+?Gf&~xfqITNZKQV&c@))-KQhTzflcOxjr5vs zs>UE37<^o*TIo0S0Q&Q~W2^aZzg@^Y{dwK#WdoIe`(i7S{tOlWwSW4ZA}t<#&|P^5 zw*EbUzaf8n69}dSA^yC-1C(~~{{Hiyet%l+@BZh?;(|vZ>@cD-zS3}ahZ;X@tb&#(?z6ZGuayR7bkb5C9e)9K2!sgFkfsAZ~Tm|_y zV=|>#P`(tg?m3AX#OD(FHKf@<%}Kq!Y6|0F1Z%1(0NxErrCm%cq-gSWM*a zgxn8F*VjITq&{>Q@+{;>ke4BkLH+>w8RTz}ry$YG*cr$ONNm#QCqkZstP6P_vMJ;x zybLVA6ToEHd{{eXq@<&L` zhvnaev_J-+Ut`gekJEG(0O^3#A(J2ttZMQb0@xs1Kn6i}gmggmf=q;@fl(cDCS)zh z7a$u#z6jYIay?{g$YRJgkOv{#LY{(b2l*{zd&t|6!yv5~L&G7XA>DLngDV;0Y@-(> z9bptgE`WRyl8!JoLcR!D4EZu74Z_uspFpmGJOfE54Obywhx9?`TMuc4+yEH{Nhb}> zA?c){4J4Ln`52>adPzwB7!dD5E`g*Yh82)>#P9+noh;B-Md(D~Bgpq5PeIa&!X?Ok zkT)SqA%BIW69qr?@cocMkaTj80{JOqDkRo}m39>Qqs{e5n!u+v*X!F_z#5Q$_(){D zHJtBju1~>y+o*-!#Ni90V8XQV*|Z5a6|=Q1l=jqdi)&5`y@pnkzuH1?(^7{gZ0?ik zKst(c#3@|vL|7epLK__d6$m+3jfsicA+uWQHRGM|=A91uD_uqzw?c2hwA$Aa7UieBdMmxRwv$h3rLPa`43}>3Ar+CB zzfxPn${-#(f_fxt;-p>E2tKK`{uW9d(?-w0M*p}r`e4gi2miQ@-r7>#$*pZ+nkVzt zZS}-fm1Y?4S?ndHN~^0Z3dO??RmvnKdBwtcTm1t!Z518BR8E`G#~}Mb9)}zVc>p^6x7-=Bu0 z?fWkw?U2wM!shr5l57sz-b`l8&irVEAv%`$_ojKIBbtWz8sJfGmgMBmfa4#w*9U~( zKLDpb1_jH~cv=U&P_yv&JLqCN8WGgD$Usm2fBxtB|Ae4uiPfECpjMp`$Z+tno%Jap zHPL?Ztj39RsuU;xzO(MEQyXkQ*M#8{M~t5E82YFlTH|jFo$HWUQPasAy7cPEQC||Z z_;i z{=C2AP^;eG)DeZ9l!*HC{(S)tnDZ`nLEoj}zU`%m>bylaJ&;cR_rmfT+)YpYyUk7+ zYRq5krq_V2&i8fG#Wrl}L#U&?g>BhG1hwOleEJt@V!oQ#TUrLI{Mpmy^jC07$Q$Qc~mcb z5n@@_OP}sbjn227jg3fo66K=qgFkBjE68UhJIHHXVZ=V#TW_jG@uj`>L{#8Az4eC4 zGi60lxC8$ht`ro)`Df@YLMrb2+$3tEcZOaE87+P?L$_#dKRDykaee~iHONko*C8K) zq=7d8@(0Ll$QzJjA<^CPCqa@;PZ^9ylo#WSkWGj z^+9_qaB|*9cZZvOk}e|A&?>;U$$KZnHZ6eVpF_*XsU!2Ur;L1TG%m_LA?|~bDf=Ks z!QV)-^B;8bnSJ$U)VlBXm0JSs`l0(b;}iPnonYs`(@$?lu0QwFyHifuWg#aliciea z)BoNXDJPA2+3U_E{$rM|Yj^qWEWIX$O?X%?@e3YCSRZvjeE4C#X??ROUM*2cTN8!B z#^?gvsF67%Mo!^FN5n<=$AUwoT_2I1@wG<~DVDY32HJOz=nei|u2TE!)hQ>v`^&ZP z$KhIa{$oc&j4irVbG5(T&~g|Z-{BL_j}9>WG(X;MfZSCm7=RQ4qjohW{^sbS?Svh-U2DM$Mr{eN;aV9>wjXv-j(qn`&M zM@dLwFHW!SH8lc7GRW5W!Fm$L(X)ePao-&*>nL~#{3oLXL-dEFFDHL>h#o^(-#0{N zAUs>vqqvGNAX^{xAFn;ugu)%hFJ$X=LMjdHM6h{0cBr0h!Cjo$Ls3VU`KLpnXD;)g z9KDq#IEwek(Hn$%kEUm%E$Qzh_vGmDmK49@jXB6Nb+mvH$WI6CF^$lV)C$J@KP6|v zWB>LFCUulbcL#>1+5&mzNIehH@q;7vKPa~SxiYq&bM?INe-j&@`4~n40=)Z}td4+D z2+$eHkJ6v|w*iif(oe*6`3#=$_^>_7>fy`2cI)mPte@_ zm9cVzGuJ`*N&3!aZhw>N3=`ASq@o}b{qg@5qCGMrOaslN*Kmry){ WMjW4i9CT#GTh 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 delta 702363 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

Ys(3UXS#e7ux11#=^@N_)-Zhp2&JECW+FN3Y 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 delta 83805 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 delta 160104 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%0DlJ^JM~A~yyTC-S++jLpY778fpiCN7 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

3x#Edl-R?UHvb^izd+`fk;$*=@S9N- z{&kl-D)}`E#~YaCg_Zn_|Rl%~Y2=p(=U^&8|%- z9hw_4^6GAyy9eDp?Cu$Ni`>2D?oD?e2uY(S9X@us$pgP}_mjIl?*4Rl#9fhb*@G@- z#F)Cfs_vS(Yd)@Ok|YYNkX7~EOI()_O_=zFb*UzqX)f+Hio(P09&@+I-HYztboaKq zkKO&p-8b&ObGIj<%eX+lx;)~6IpdS#WTefAfi`#b+~vDl302c`EP8!HjMgrF^OID= zROaOgS+mrL+R)ugiHu0=t-_IqDO4RfYrq0R|c$%7_fpmOOkYG>heqvJlkC#cYWP0hVpcGhmF!K zLOA8~)B~BfZb^Qk`DPS_PuzXxZi~C^?tXFio4bGA<=&cXnPS<9V%gmZ3CSg`>GC8G zJlWk@?%KNRTZX-eF;hKIN&l&$sSC~h_0NwGVbcR%XhaCs;wtk>&}E|r5Z)yW_P!`n+|0pNjlu; za)Adfbax1U8 zb#vF(U4M7O5|T_X%H;$Poak<q*ZrB3~Qvu(>(%~_ei#+f}cWd0Ob(i-*2>H6ZVMgQ*qbRI&x60i{cbnbiWoCuYFxiX| zn=y*QT6gQ+?Qpl#U49%wBi+h)qjZ>H#IhfE8{O?TqDi~YWwY5Vv((K@G~!`2io)ma zHo4p9?tr`I4~8J?kP3y#M(HrcC<V=F^_D-$}@Mv z+>LiP!QB*hQ{ByWH`m<)cMIJuOGuuP_V&L|2Oxx3WePg6qdVN>29sN^+t?!?{K-(1Dib-!l}CHiAFpv zMp5|6-M8)zxI5&o<>Miordyd}L?_cI3f~GP-M(!u_j=%dcmKF6@I?4U zMVT4pDGm65k?rwK?pSxM^9(VVYyO-R(>h2wP z@4NdnAt_qEaJkI`e{i?o-5>6XK9fD@5=J!Dpq9y{e>Nd5y-^fyad(@$xzN>;gr0`W z9Z)OXOylPgVuH~q3Nzfzbhp6WLU;S1Gj%I17be7+XDa7rMK|-IeaHc6VJua=~wOd4~ty?Jjorkh{h1mbe@Ld+WudyJ7CuK&|x<$}CQZ89O7^HM+ab-K3T- z?{GQS-8^@@p*Fhd<}W71y2hn#e@-3A$y9kcYx0a(>g}$vyO!=+yX)kxo4da5`nwzE zZj`$T3CR%CM3+-NaE80N?&i5$;%=F{)GK^+OHZh247+uZ%&Zoj)f+!c5=*?l@3XB34}2}w3B=dy+e)^XR=-Kp+6x$EX`Gt^ekvEI^z zC>M;PaHG47yO~f%lBC0Imz$w>$!3-%#Ab}5ka0K3-E4Pr-ED>1>sIn#ONdtkj3{^A z-JWrIpUYY99(VVYyXEdyx-0WKuj%UU`Ww-0He%VeyA|#}G@@C)&gBjd-07~_8@vms zo1SPy*cP$yTR^8xf|P6H$B;i zj+7A{DR*1k9dLKZUCXz5>0Gxm#fZj-Q53#$_no^vZ-+B92}9{F3%`?WhN&5ⅅ6k z>!#-$v1%;d^()ovgm;slC@PIuOXF^aySeV>xm)ONvAgB&R=Qj3ZoRwB2}$|2)#Yvv z+~@AFyRa%bR90OXQH#0T40X|StoL3*6g)<>Yuw%DZZ4FOB(!T>?tr@LW*Wbr5bYYH zC`@v9hr9dT#qOSP_q4m^?pC@hlUdCxue!VbMwC28QFzJStM1miTko#Snh?4tTQOoQ zMvOtbd&k{IBg(JMF7rMJp@(i}m=R+fM$9F-TjOqnyN&L4xZCOOfV)HPQXjInq{~!T zkR5YpjkvS!^4&FdHy7%uhq}{4WXAF>R=-Z9wWL;@48%_m0`2Ht?p`l%v;mCnNdcpV=?09 zxLf0HgS(CHcDviBq~%x3bs=1!o1S7s$zw#xwH^E(4AHs#~tx)J>lny!Fmfn3Z^>BgA zOP?k`ro*d7wBy{p@9tA~U%1=m?gw}K-TmRNz-QTg9A`v3E+K8lxvb%Vb=);|cdENi z?z*|#ydi`>dY1J*Pl$5Rh;q=~ZSL-cGLj@69&q`X2R`X;xx1C_%6t*RMY_BGMif0p zG@ab7aJRwTMt4;*Uxsk8Zf1xP!#_qW8FTlpyHDJG=5C9-?e2bY_nW(a-Q{jf_RG-G z@rFz~8nJZJUB0{7&?S1PJB%2cGh*%DrsUUjIL9aoJ=|U3ZkW4KLQ)Pg%mwz1>C=7CUrMofiu5&lZ-5u`kcNe>R!rjwfQ4YwCqwuoJr5^aMyVdSKbN8jY-R}0e z8}@Ywm+C1kGh&R?h}^$9`8Ayhh5fJ=eXF)L! zF=K5+>G6H?E2W1KrH8u<+zrgQyu#&ZcjMgM>h5-T_qm(p?s0cdxqHdotM1-0qTTqu z%gr9R)!pD9_yCEX=VBw)t{d@Yox7YLlQ`N6Mzj^&RdrY0T|=Ry-PpusD-UeruCu%D z?k;sVz}D;BJb$sqSXG zo9k|YyM^wSCDe}xcDc(n9=O)sMt7Ut?Q?g)-Hbhaokve{vk|@6Jxf;=EV#Qs=H`9L zkLhr$Q52@TyU*Pt?jCpdyt|j&t#J2_yLIk9b@y#TQZjCHxz_{tyZgsofnSqD<;4*r z-gkGmWJUo4X&}?RWQwy8?e@H+Gy6wY0l(?rONJ~5yJ+3xcH z31PIJ<9H*M!x%;3Q+Hpu+XkI3Nz&m5mxnzt{F`i$XA2smo1SgN;P}$FiWlsi%3PM4 zqrauYKqKCtcQ@MI&F*e>H{IQR?jCXXxVz`wz2t61LUR4yakX+ zTLxXLhnmV1PLMSTMp5YNuD`os?nb$r>~4y?4bV8%+*6!N5>*lVPyZ-J5yBn2|lyhTUPV~UZ?q;}~>286$h3-a`q14iITyDe{ri{o3 zWs_gY2SyCs2_>Dxe3zr3iOFV+*o+aYbju~bvP##8)e7z!yBiDLqFY&Mln$$mNXLljGvDy4>o4JKXiDoD*)-447igj1jU3GU2-8FI7%3T|Go!xa;(sJ%nmjgU- zxVvlIO>sBXUEyju;SN2gUPioVYQzVc+`Z&(jk~qgax$8jS1wM-2~%`4eU13^j1hC3 z?p}5Gj=T5Wed_KDciY_k;BLRWzJItZke3_+D`<@9G`K70F5g{ack`h;_3-x@F=Cgu zbZ6CqV+&+Xs+s)AhY5|STHLjD*VSE5cm3QAayQc57Fioy@>es&k?P{c|SI-{Ua#Al;&!rjScjM$7(6#fHE z(-fZ@MPVy6RoxDwDEtCVSNEF{i^idQ)D@_k5MAF4D7zzH8bx7#yPR+@u29%##Qidg z!tnOVujz1&5yN@zX1l9(PENQ_w=&9z%FHMVdyFVze|1^r+$0Ibf)QUCgznePtT*D7 z4kH$AcSwF^&9)Jr%5XQ{-41A`Zl!U@gjkdyloYWez*+p94x^1|K0ptsyTyog9Z;-p zhEWtAf@Z6G)QFEkLb5xqn^6=tcBbVT#BDa>^^?vSWJ=`UA|cjjcA;IXfenmU^dqEk zy^N>>pzAemf>9J65z@HFjiRs`xe2tYs910nn}LE;ow8 z93f5nh!Nuz&?Jp}%P0!J3u)Y+M!d__gPK)cCeJVm=Ll)y^Nd*T2i>NDlZ>M9n2^Rj zX~YsK=yr8mj2Ln5iPN<8jrgh~bcee06Os=`4iVJE!;F~4gr=xlY7~V(gf#JAMl`c} zQGBbbVibkbg*0s|Bc3McE{(gzh|CIQ?$W@=MM7i{=x%l281bcu-Z)KM(TIs2XsX7Y zW5haKA&tAvC<^yO(=;wN;_DVd8uvlQkmY{RbPfF7h>5BTa2i<0h}#6+qjBdM@hA#u z+yoii;|3T-;T|E4yWfaU zSwr`0+-pWr*eRrOyN#kyq>q$;DvJq1y!0%jiJKZlp+EG1#tk;2SQgT_DMnFP3e8gY zh7sS@6wKGaN56E`>F`;gE>8aU91GZxagDMnFv0h+7sWuqv3A*5-) zGK#`s=wWr?l7z@xLMg64lc0)n`P)K|XyCa<6h1<_lgo`L1E5DW?nxt7sR?P^J4R91 z0?pI7?M93Q2x(kyU&=p0O1-{0;V})YWfX-rLK@iKh_WAgT;r}VqU;yaxamewcn*3( z-3vy%<0qtP*Bep59RTO6JY>YM>!mnNT+N87GU!Ql?Tk1Wq2yqUqA(G9O5J3mC_E~p zX`e7+Y!rGrMb*J;AqjF74hw1Ga9Khe474CQ7$a_zkj9;B#KAz%BnM-}!3b&E$wu5d z=vj47LK(p*d>~R2e{94v3q7Z9w^0<1>xa|Ckr9t9v`}4BBi=$2(zKTvQAk0H)J-tr zRvSBaT3zB>y4YG6Z= z5c3|;+v>U*MPZbXCLU`Ph1t+M8aLO7_Mec(y=BChF7&RtJx1h@D{z`NQ_PSRoX{!_ zY+}TtBcy>B8SxxL@2Q($#1|!mH0?a2D0~RLuWp?Y9S$K)`*%Xp{;PClPFSsh)r?rV zB&2~IjA$o9Yt#)hio)GOn)V(eK4J@fpl+EF?EoQ7`@K;V3J#(C`%q;OP>3-)Ax)fb z#Gk5wK2mqF5k;$zrk!j=#}!(uZh;XctB|Js*of{K^s&Yr$Qa7!$dDRX(TKJlv`z!h zGh*6aNaIEt(bj`lB}-lMm=SAVg*5JcBYM5idUd}V(f%uc6;cydHlo`F{YPCJBUUd8 zY2qu5`1lgU>R5I>&4@;ckjA}i#7q|SnY!YLSL=fVUfHr7gLnAt$LK@f0 zh^995xyD^*6optw;~p~NiGaS)xVMa=uw6*we!QCUPmr2zSWfs-10$m-oFb%wryEhT zK^ryhQX{^GL! zBbs5*7Io8&=zWsIoGg*5F`MtoHpVqG9{8;ofG9Te2Szm3@OsGP7P*|8C2fRHA>*oaOg^u5O2 zVni7rq;U(3qOb<~LF3jMQ8@|G{@`f-OpvQ^!ZkVJM-8lLM13Hn8|-Gp8ACfYE@Q-F zC!}#N8*!9I%+Jl=?9KM)J5IKb9Mf>ucOH@pib4}14Lrq&!Uy_C}juZRW~0)?Vb2Z}WCM58El6w2x;6HBbr=L1$Fa`7~>Vvv>zBT>j70%x6g?7Uvvvn6BjpP0urjE zuB{RGT}TrTH)2c>s;qHSjHr%H5$i;SH0=+!vVTF=ZcNGvc`C~rF^(^! ziCY;_^+MG(Zjcd!&_Wt_zY*PXsD`@Nj41VlH0>56+JDDQ&IvU&Ffw8+SV#jK8_@uP zYH8fXMwI=I(ln80udL#OPP#wx2F8_f9XH)8Sl6dY-3|D_G7bfCr>c$!fZE*8?ATxLY3ftskBWW<-8 zg*5F#Bbr=LQ;pkT#B7U@#^u}zQT}lGYk?sjC?_7XyUO(>{v+S9yOwo3ANC;_l+39 z7Sg!gMl5BSniE>8E2E_CztaSZN=ewlh~AHoZtw~t=JKFc>S7}@oRDsCxe+TOgmim5 zjObfT%L!*{-0?>I>4<5Re`o3jPZbIAsR!sR4eV>gV3Ux>O*W#954F~~=Zt7<2x;7> zMo~BfwNZE2C<-;F<1}riu3;3;htAf(u0~OqAf$m4jp$-QZPh((#F|tgP5X(Fd|fjq zv{QG`h@rlFaGJJSLelxND~h?io$)+IT|<1h(@N6#w{~q3Ku$8-8V+e z70keC+M-4@ZlO#El}$h)=J3O}o>G zp}u=_!uc9kF=H5oGlewpY@;Y#1$ENE5k^$ALK-*2h$UE1XN`N+h%!J(<32Zv!e3Aq zb^jRA{;Pc-QWMuVV$cEVs)5~%qHvv%#@%Sd%ofy5(Vho1wOYdgumQ8qw|-(!>Le7%`sv&6uMC3-ZA1T2x;72Biesu z9>@uOR8}ye`7NZ0PdB2@hc42%!A5*XNl4>vH;Tej(8cPWHR3BpLYj7?Q53?g943Rc z{g+adtB^0Gi5nYH=RUWY$HBcETnO78ZinAU8ZqA&SL+9 zJfAUA1B)7QFi<~rjg1%u71G4Lj2H)k`m4Lih(bz8(>`rP#)JlF+=oU~<@*FR@PH9r zvDrCcpaxbjVnRYl<2o2IM+6PhxS>WYDiPAS$Bmdnga)fyWkioisGzq0zE6;=kbW>H zT&^2D-iX$akS1IRujK05@OI8x>nuSMhqGYY2w^R z65{cM#%Ww*BUa1^Y21ZI^berx)ZJ#p@(dwKn+Y!%vSVm`vSTC0XdcCB;zCBujzHI| zYh=Vb_ClKW0wccO0NtSORwE{|g*5GpO4|PW9K2BjHyK4CH4mqOg^d`Jg(j#w*@*su zkfy!Nh{_4NN!>J~D7-49X;?vcYSO zc*KM>?E^+!e&`N$uN%=!hot{W;vFI(s>S&%GE|o`ib9@{Caz_~h&V()inQk%@dlKT z#tkuI#ss37MPZka2L571v*}3|8LBI7ME(%cw5J;} zObboZxJ!%}FA~zYDMqyao&u+9;Il^ji4`FYTx~>m3c5$*b{mmrp2BHdDIape~jowKg}XTjjLxw zLsm%Rx*0`bG&ED)xTo2_AnkdPn)neTmfJuNXy6JX+Veshx6_DXc>#+IHLi#e6WKx< z*U*TAfoNoKBHfH=|BV#X#AA$TL_jnO2z=a#Su7!qTVuqUQRqQ+zZ)@q^9)YYo?t}R z4x%b$dtHrq%T1`Dw*PKcl&dfgdPp}o--tfFkS6}vh>=W)T8RzrGvbkb7N=?Rj2OU% zs5*#iZN$8hkj9OAmhw-KCN%O9m2-^fP6=t^l}1t63sFY1!Tm;2$a@Z_X=@qLbcZNX ziR*4eH%>_7t~a7qj6sS(0v|GB(SVQ!zGXzK6{2(^?nfhLFBjr8uAC8rmJo#rajlFP zOAykyD~zIW2Q)uv|J|J+S7DKmCVtU~^_&pT8yoz}i0W8KH<-I9A=-)1Q|g)Aa1t+V5eMzjMK<1}$$Bl?OE0mRieio$t98rQ{0zRS!aLyf!6 zh>1!ejeA%qY5%% znMSk?UZnh6qJeK9g=m!sY2Xh=bkEqsD;ihSh#dz1C6Kwg*5IiBPJ=J zr4pA3iwzmK5z@eKjHr$|Cz+xLb_KaM0@-w?IkT zf2#yFaE%dtb?6NZ+-t<(A(!P1jVoisRe+YOYhlFY7t*u?jL3x0n;Lh!5u@ZwDF5En zz(pbxkp^&D%*odnDt<<<%jOZN;XVjA)EPU#Pppi1r`!CFKvr=&gbfO=D=Iy623j zh@egC))~WXUZQgegYY(d{Z$xtqIzsuw)0fC{VIXT+=rl|~VD6^)qm$bgZ`vyB*BhSKV;F=EG1QFZf-nDc{* zse9jub$w8Ab$g7s{M0zdt1E9r=?Im;(f(^=$Y26gQUk9wqM-ZTPOoEb_Y6BN`>z*xqRKu-bdRA1>TWh-Z3mRE?nxuwZiX7F`^bpO32LNn zzY(n_8Ve_>t6;>kzBQD8ja8n76ykL|sENAEjacmjHB~p&h}BNe$?9G*Vzm?0Ox-3U zdQQ+O>i#ui-k(;=sp>Ly44Hn1PE*;*h}BL|b9G~kXf{Eot9#UlS`j)!-D)Goi=YINH;F`={6-DyNc1hrQ8yb&1_YNPH;BjyyK zv(^1+#Ft)ZgJs&PtO^P-&jYnn*TIOZ0JT>)#)tw5I!E0+BN{5ux$4##vCInUpzd!Y z`j52pI;yLmF=TNmbe_sSMl=+m^VQv9#F#xaAuVP9%SOCj0d>;2?~E9lqmkHIT`42h zl|eUY+O|ft|E>aWRyo2b3J*YCH1UH*ET@IKs(aUndkj&8axlA%$mz61C#tJpL~#ps z)3j}j7%hdmOZmsw^aUXrqtGpyc)Af|x6rNXUN@qZ1NG3f+l?58qq*BtT@fQ18_*<8 zdy)~oB&e6hUHl2>k>6-X)BZ^z-9(5lXarvQsn)Xj4{wfze zmHz6g8&SYPGc;`{BX0Y6@LrV@j5uRxfF@pKM7JCosO~ExhT)+5G;J=OAR#Ik=zeug zjCf}V8l-72HDXB*G`N7a|0X9$;>Vzwn)pd03Ki&bO}x&C<`wjS#_cm=hLk?nEOnKQ zcU`)*bpxS{AV&knns~AiT`_33y623@{m>9iyxxd99~!Feh!KMmboL(9 zwDpV_6NKid>uf}~JOf^(iN_gn-=T*z@Npw1ilM7DZmkgujG$ra4jS!{02Qt9EI0-Lpm4GBbxYWBUUy+BQ)_RMod^ik80c>MqGY+ts^zAvJsab z8l|p{5v3k9Pty(&lERbGZ}1uooMS|B3q7WR?;0`Q4?V8#cO!O8*LZZYVw_p3t--jF|M0MbYzBK7tftwE{F&6R$F21O&QP-CiTgdHUZ^YT61$)Sl2djq6~< zhdH6AG;XvJ^$Ya0xJ-D^klrkGohE+EhzbT8uWq*y9f_|Qgw_pKG@@pMo>AA#8nJK)dQRO|Bf8O>nG@E;#~IPAh8AjEOC!2*&;*Se zYD6~wB6EF9b*zai8_{-$ZdG@l5zjI7lBOMJMC}Pp z(zs`gn974**0|3TlJ?)<;A9Q_*NBf0ZD9~v0~;7Iwh!H=aTgddn*qI|aW@&!CWLO+ zxaW*)b@@Y{pgwp*66!5hWM2OkHOq3J_?DrX6oY(+qk|<6br* zA3=9&+*Tu+X5TU1tZ}6>hD;nmcWGcNBg$&%4GkP<#KaMFx5nLV#Jmx-T;pCeq7@8H z)wnN>_yiX;O0h!)azs^cWL)(|8KYkHu2HSzgIOdLUPYvLP>7{`a+QMbT|-Z6Bard?x1 z+W@*>-JeF>;vEb^Yueg7G6}L{VwD^8p2odt#C?Zm zY1~#L-ZT52L1>MOjA;MmgR50GHsbO_u_nIIh~ZLbjmF(-L{5ihYuxijRMF6b>ed@E zCX@4_f^701;rjzzxIYqhrr$BQw@##j42|^F4yTpjzG4zpc@Ma?#FVI?bPa4s9 zf#z!3bw)H^ppP|f-w%|3f>b6yQXgwz1ta=}&^irlVZ;bF^oYh?X+*yedQ{z=Ml8pN zKGC!bjTp9p)~nlSMEmbAaGoaq$A}EFlM!(ZtZhWw9ePaT&NcdfUEP0trRjYC@w3^m zvm;iJWm?0=ZZH_@zV7?_X$L_tx~WD5L$eH=bueXA5DbRSl5c(A_vd_)oa_C^J|3^fbFVY!J|`#lx$d9ArTD0S zmvOJr!b!@g_sO_F)xvrnb(h$uwQxKc^(9=fjOq7xT8Vd|`@8rOmVrH5co$F$@+8-2 zVe1(6ei=8ag?$95FUz=nTG&sB`hbl4gci0HQU4+1{u|Y-6Hoj-?0^^S(ZbOT)Cc9k zPtd|iN2tSM*K6VU9%@k@d%G46>7f2n#vRkbZv^T;W!xDp99L|9AN%nIyR>iu3F<@g z;Gl&+d5!un8TS$`tO-$nCF9<%g$vG6r)AtxElk}}voh|hT38dJzJ_s_e|0Rka$}g)0kUaN%}4eGCD+|62;!lAw)Pe1A-GVY67m^-4*$he=^)tdkP z+7Ix3ECU~^g&T~a{zmK>TA0zG{#zb=lNRQ1sBenBR|_9F)JNs9pVq<$4)rmy?`Yu^ z&mUs__bqvF_YYfzYr#=RWnig=v)oW;W!#Ika9$tk+hVtA;k-W7$K|mf(Za=NsQ;01 zU(&+qJE*^{$2A-Or-|dbKf=)r8TdFY9M?tNE&t$iwXh~cEy=hyY2o_-bxg(`*23<2 z)F;F~r-d0b>bvsTpGnF5?}~Fc6e4()7WUJkJ}D1=o)(UTpuR8T-l&CdK-AyKxDRXL z=Z-oq_C+mBWKqlV*kvu8%JpNc|2`!HANXT@38SzIMtxc=Y2khHxyv@r8Qoe=v2 zEo?cV{z2@0TG&gD`bV+PXyJer>Yv1#-_yhq&7a`gPVoL(I7)%~XR)Y-Bbunsh`m$` zt5MWv#onxi9|`KD*kLW4f{pr|*ymeS&;P!U{Jh|gv~U*FPw@pKc7+y>>!RkxeoG5a zjQWDuo3(ImFY1e8cWdF(kNQ`!?`YvW=RDSbrvx`4>%tZc>fgk+YvIHp)W3_pUJLvG zP+t-|sD%j#YC-Iz77j?DzAW|wEu7~4GpvHe?$^}Bo+{K=1Rt-3c>ror>;+mlP>K3a zu}Lkw)u^wE9oE{|_yX#`#QseSvmw-Jv3s;I|9jZavHlahQVVl@)Yrv+LkoLBQQr`| zMGLoFL7fqMj~2EcQU5JAr-gR`^-ZxKXyLHT|6+~Pn*TkxPW*42NPs#k1N*hGRfGDr z*o|7)Lx%bvv3F`=8ix9g*r&AcNk=V-eNPL&b{DV?5PRSStpDo7Cmr}b!Kj7(HmL85 zU8jYW4{BNLO4)p`ELs~eG0QEz$f7Zf%!%#mG`>qz|e;eVud+$N$FuI@JHl zz(;D~%y!fTv1e)FM}oRX>_#nYXrg{0Hm!vT2ipDTZoXT<^%7(856q)J0-{u7xWfP#t3bsD<^%H<1?$ z{*M+89IfDJsMvk9urR25iIrOT^+erU>;+o*^+a7FHmQX(Y*8D;KBR@sGt{LQ%lz*v zt;D-<0ku&Eu4v&5m;Z;Op<<8H!V{yq#9p9<%`?<}#hO~!1V>#a_Lo|i4WaHQ_El7~ zPHdU{9}b5KZq&k_Ow|3wj212|Ks`Y0g<3dxiF%;e?`z@A2~>~RU0T?ahPqtrU$wA8 zY9b#bc#jsQ-@n4qP_aj7;p-T+N$h!A_}QU;P3+BD*aS!Yy4c6G@aacAMC@x?I5DBo z(bx>b{OewtSOudVDgz&{g;$JvnAi)o@H0kTAvURnRWPbo?64MgTB05CB8mUg$z8Yg)LW<5&NkYzPB&#Xp~}`v~ZyUsuFvW7EZfGS+SRE zVaFrNiM>lo=6@%VUT|Iu$L&x-?3Y^DDb?B0h+>b`!oeg|5_^#rR?Da-h~2J*zXyZ5 zM(pESxG6~|*1y{XzX_}hzl!(jXgpDDqZV#PgL;yf)50nBs3(i<)WZ4wsD802E$kaY zJw@zqwD82Jr;0Vdsfhze_wHysP4K>2_z16;V$YyG{!~W7IRmZqvfH0P2}y zAJM{E54BzFE3K0Kf5>ME{z?n`@h|CU{D#<7S~zfox>oGjT3Gj^2E`_{Ff~K{rr1F( z9H2%$TkNx1n0KO@za{u1WL@}G+|bb&61!XrQ*zXE#F7@ah)};R_F^r}4N%V&dy^JE z>8N3`4{G5c7V3Fo|I*aNZV}Y;1_=Ld!`-K&af8?cwXiU#my1O$ zY&oG`AvU6gg+Yypz41O+|J8|aEZ{2z@6y7i6Y55>&uC#UIqFqnOIkQFwX37COY9OY z{K}$UE#|bac0}DIcD)wne{Vy+M(_`{u(Cky7W=pszQs_l75kbN&W^rsN8@I(PA!~V zfVxHO(OUS;L5+(&TMK8~pk8;e%>Q01S-%VKK;0?>->HSKRMhW^eM}1{rlKaq7PN5I z3+nY^KheTA-xIsP7UmVG-xo8NVf|Mp_H+aH2);}U3xoOtv3F|WN=eik#Qs4G zzd5MZ=jfakZZvSej>e>ndzcn>S~wnrdW+aLEu0CBdaKy0w6MPjHPxE`y}On5ryun;8TffEOp#Exi`}Dz zpYi=W8gCbSv=$~RsC{BD)WR1L>JPJ5;kyY@Z?DA@~C=%z_`#(bz9` zA1&M+3-!lhkI}*wGwM&owrgQGE$W?Ouh7D|1*mDUw`yV5)I{DPcvuU&Pf&j<_C+o1 zw?W-0_A@OUoO)nKRn<_)xsfH)VsyTv~U~{^&S}JfA7%5uN`Ve27X)% zXF8z%OzgB4<_4(uiv3ax3)9ol_;ay`XklSc2gRPMg)Jx4Ux?jUSN*xgo=oKX1mCWO z9ZRUY#6GNrcLsGx?2B6X^rPM{c1{bwc9(ZFJ|K2~EnK{c`k+{)g{$c=$NKNE;4rW* zOej%*DR!$CE~!L)NbC+Ryj!Th68pFo)(favu>~#6cu^k~JFkV+_k%hbe_dM>f3>TX zSVGiCWMHL*vs6$=#CB-m-~;M!#NMEV)i>&+Vs~j_{~zjOVxQB(fo#-Ku^&pw{IC1L z9gU9*_Gsa27WKDcNeernQFn{IL<`q-ppJ>XMGHSV)F;F~tc7<5^+~Y>Eqsn1jP>8& z3H}mT7xsK@>S!DnyFzPYqaXDtu>mdY3r2lf>?SSjjzRss*n6~a9s%lv*gt9E*B$i_ zV$C0DVt>r9b>OdB)?ddD*1{(k^-p3?)xyzj)STEWwXilr{j=D+wXpSr`i$7T7B+BE zpA}naRXzW^^4B{WCj}p=h28F`&xu{Dg>Nj>=fz&Dg~M^Ee-S&Ng&k0+d9gVy+;9^0 z1+njIVK>}Eu>Sj^;Qf$w;RbZ5e-*P@n9-n4iCw3KwHfN)#NMifvt&{KE_Or(s)rB-B^MuF=B$@8!t<61-6h8<42eVl!H}92505u@hSOAfdi4_5&>(-F{d{;~QcR z(86yM>Wo;@!fzAmzw7nieHt&R6NPUq)HlU$*TNPI>RV!eqlKMFsIy|<(!#-{D>@qA z7VFZ&D@Of~*fm=CI!1j*>{VAZTZt2mflGpSYT+;n>bqi}*24S`^*ymAEo`#&b~L^( zwowcF5>U%xkJrNL7WD(MVJ*!6Zbtr4@K!DC$4C80?0s5T_oL2U?Yd_iD-d?f+xc&t%{oTG(-b`nlMrv~a%=)c=Zo zTMN5XuIy-B5WANac3z?G5qp#tu7XDWLTuvYtL*j-xqq@(_y z*cY^LV`0?)iCxgb_TyC@jbDjfrG;yPQ4P5T>vOa)|9cJcBEegswq=ngX6ZrrcxJ?V&0(Hs2 zmuX>}4fQ~=H)`SYQI|aSE-masLiNbFlUjIZ>XLEa)54L@M|CtVhhhHLt%pdKRjLoKW;9^C}WgEu|8 zRhVp`Hp{>PEvz!@l5wxn!ny+WP_a9-@LN)sJoeLCSXZDPCiZPDtg0Uas~_8JbZO%4 zM_nNUoffv=>yjrK(ZbFqRIiM?O$%>-T{3P~3n!bQ9xnD}Eo@EIC6B#FO6Gr?AB#P) zGO$+*r%=`<1D~#in+u_?l5xAVa9&?sGH$;X4nU&%#O~I@uGYHbv0vB1Jm9fd|2;zR z;;q=Ti^3|iE_v{yw6Oh-dZdhdwiXV@)g|L@(ZbvS^(e7-YhjDIE_v)fXyHeK+9KBc zwkE#C9tV^MZ`8t357eV&V5x;eFm=he=WAibg?fzG>$UK~tV+>yCt6j{ z|GrVD4E&ZBcBx#Aoy%gEXyHV)y5zxIwQx>1>TzO&T9_x+C69fr7Cx+~tHtin!gU3x z=GF4xPu7USNkXW{%fLk~%v$S`aVuIlYWjHWtQNac3zOEmRX%)`>MgWO0C)55-?3MP-eObfqFs3(b)TA2Sm zzfO7Zi?nbo5A|dj*wn&TZ(TC({aV<(;{7c3rK% z|4~WS@4|CYPnCc01zMPz)g=%9JuMtYK|M{zy-N#UI(5mo&uZa_H)=q}eOC*6*d0v9 zUGA{{s}u8d;L`=K(ZU8oUGm_UXyGh3)HB5PY2m|Kmpt~E7S8uYJyXX0hZa7pb;-Dk zeXB74dl+)N47^ecU%hq7z-MV;Qw;Si8TSe;>_nt;rcxV91gCDMi6Aw{?V$amV*Ku9)557tZzd5MilyP@x;Wwu)8TUyo ztou>V7W+1;Stlln5hxG7pBA=+QNJYvtrmVHb;-DwXyNM^H6(VM7LIt=C6E1(7QT*A z&k_5w7EVHF)+rCJuPLkx`vXwFEdw8^h3Rr#GHzH4UplDg%DC5S;c!b`GVX&~*k(Wt z%eXIS;g~{Q7>D`ak2Gxp`i zjC+?B_5;-=XHXv^u$)-kSppXVvp6rmq}gn4_>Qa8CPjx2PNuy zu^n32L0OkP_6=G%O%pXL1{WmHDPu7US&jfXY*mt$CQTb$;Jor*AEDY-9 zGOp6XZ%JJ;ZdeNogL;LGdxI7hrY;%Re6J>!1~n#lQVYj)>XHZlL<{?F`*Ea9?15TX zn7ZV#l@>l9s2jyztc6px>ypR5tyT5>?*qtJ34TZmM?&h72Y+4*dpl6OWZciRuu=IG zn2dXn7Otc~y;{aSQ45=Kb;-EvwD4g?HE)uEZ%5XJ4T-vB;H(zbT&UNGeOU`@WaT9}~LB@bTI z!bT*{C98scgfvd@7?gqrE70)Tz+}S`$jMIlj-RPZutI} z{%r9RcXr?**FRxo^flMN?$tNkG=59(OK%$Oz2%1S@mJpTid#lTZ@9G_dG+gi*Z%j& zEw|n@a?8!v-}&%6E_&#LZ@oSiSMMHuS>vZa`EmdCuX*+Et6w?#sL#Cm&cEM((L?Tk z^9|RJ-&+4l;jAB=D0b1wJA2-G=~W%uH{O}vdTF}OJJY*gP9SSs+~|AmGhN}UwDJy; zu*l+$u~dgx%-#R`)=TXxnkJ-rnv5r?|HG456AM%CsK~_E8)fZcOg$NHm$Im5CYiYU zYocAMqW%=NNi$Y%DyL|RgDmbCi7OUZ+&L0obm47nd$Q)W)S0B?94NCR^OPbBa6!rv5S|BlYi6yPn zQqMB==}l?7@0Bg1DN`RwWg|p3%P`jNWJ%*B&epfhtbJ-hU^1U*=iF@+)CoA zewH{y;;RvsIMyc3`sqV8-bS^=axY7mCQ0QiOPI^W7UcpL&9=cU>E zVau|ICG?S0Wj{+8BC+MJOq!*&VKSrAx^kK&%#!%>1WQ;T3FTRqa3Pnbjb#@OiMOp% zYz&)8QfXPjKrXH*hgrgI5>xIa!Tj$4QCZHigkvOCImZ$fNNjnQC9IIRX4!*F&)QzS zb72dKFD*+LAPMCVOV~*g%Uvv?S>Ldz{pnLV#S-d!jkJyNMOojEB9l zm-x1iDa+H?%ac>6FU4ygRFxN4!Uo)Vvwe&$H?xF-#FYaqVYn-w|9D@H(I6l8kc4tS zOE^Rl%VR8Io+OoLy7KvtPvLw%C=}&}`)02-6k#)oDGQb`KvI@FSi&wy`}`+V=jv`|HPs^ zkPnJQm?godnk6idl;sjjSRtv(?)%A0U7P>JD)hAopKSRGj<$>>&J3~mF%oYkS^NQ# zV2-G)&VOR?CuvZ0XGoGg&yu>jvmaS1>{gaEKw|9Zs_6VDmDSWLwO)NH;|xhv9bt)c zB(_>)iAyA|y09j#`A>4O>;C!c@S&F^l>H>p472!MB*{#%_=D?G&wr|-aL3k3#1xAx z?g9z67jQDh`g#zvxT==~lL?kE&?cDwRD~;t+ejpglK65DOPD4JBZ=kdc4^}2 zW4O>xkW_Z#l#=#WmcrItOi}i;gkcg>?q&)5GHF((EN3!;gkvOCxxf;ZNo=_RyN%iw z+St%X;!2xK)3`8{lkw#)mM}qrFCmt2m?V}bSi(F>GnI=(DJs%dr+*9ohJ#l+4Z3Ob%fMM674pYG)$80E|#=6 zm#VNcEa_;I$k=(7be5#FD=eu8XEU{Z^s35kWk~}h){Z zODypMiLEx^{IIqkhqbYn#8t7D_4!X_UEEHCeAqz}%H1ThQISDkMc%zuK5ojBvNeW`ub!xH;QLSk9W%_^iYo>7G@p}j0&n#7cc zS;BFWvYclLOS$0qSJ}8Cd-d27+C*Z@Ei56DI6p|@%}y3SPSOl!nke|AB+;B?@k=Dh zZ0OBjM)F&7NrlFUcC+7!Nz#F%X?eyA3_|5)?YUpd$fZpLU(>GzOSW}3y%l2~(s#V?XLb52Bl z{;j8Xe#0a3*Wpbs367StxM30;EoVu4NpM`TC9CrvYf_rc2jOVf36``#f&+^zX@vy) z2_BifFdXdaQ_=YkroJ}PpehZL;J_kF8YjVlMV2%}g5!#-(whI+GE{S`)cQ1(v0P*c z=SWi7^{DKXRfXwg@!Lp@*|8=v|FMi#tYQi&HFanZy;HThWAL^uzC1i!B= z=_Cox17Jz#NuurAn!k+LOnpSjMwT>`3w}99S<)U7WB0S9!z86`9%o7mB$ZuaN%d7M z7q5SHd24%E(pC~@`&rVCCXu(hSkhjSU=OgQBP7wzv82-^$)0;$KL7D4ZMZsnWudT} zNlax~;t)w$jgeI49ujNzU7gQ=f-4TwAeT;%__#n4swI+G)>jI({eVIY-6YBPLE7g( zIPb4N9~28eLSoDWi=QSb%@GzqPg0rXTH5A6vGQF-w$#y@Ei8UJi8Es?ev-ty10mizN7U_3ev@`A159898itM3yv2 zV&WJ{SxvIU8Ir0xo(s-DDi?ApZ8%Tjd{1a!YFBzwu=qieV0NMJPM*DHG5h742d(%qfCCD#GA7$ zeuV^k&r|-&g5OFK%>auZX%Zzf&f@pwg1t0{Sp0DkV-{HaGD&GVpODRe91cDAJ|TM@ z*fz5ywisq{<0P)w%i<1__~Q5zviXm*-p$h>oHWkjmPxP{ye41hRCVWqv*Y?$LWH!< ze;ihXgEXi#qbz<8N#&+VY;lMs9V2n}WG(CSALm>;O@q8$AqmyyZP{yeA@-BRYLq4J zB}vsGk+t~`o;}XxgM1Orl9+OZq%=KG%ofO3#TFJ9Nvz%8lGXW-^EU0ILC#LFr2Qn` z9%e}=NP=BtN#|5_{)63&cEgkM*AY`M2{z4G(oingUKnFZlO)C-SQVZB;1JA_Rcg(D za0uokNmZRCvE>R&=zencGJ-4nNW6(_(whH-P;6f#ng4{4c92B7izQ8xV80$qI+{x? z?EJdO{3n{~>^jx+pNOlA`m@&&%c_SZZXv0vZ7gw+#D>u}spmh@`H42F#hd*kp_pZH zCrDzkz~au5q++FAF#n0kbw4G0t+-IAkHtk2Qw*`BQIgW`VM)`OG+n}Ryo?}ej>OtC zEUEF-e4%mi3QHLpl8)wr>xAZ5(n6ES*t0C@JV|LgpPs!RrmA{aVnJf70TNg4czQGchrHQMgS?+6 z3Fa7!UnGg<0*l}DjQqK9(&aO<`H#nCYs2}VvPip0jGbahhe%3$f+a1IRQ4RCZT{oS zDs?|ITSiECxm7=PyrRm1!pps_ZyRnj*1wh9w;#adwU+Ew*HJ{^N1R$ubS{slJED z#p~}-6>JYn+CqZU^;psnNwT9VI{(3S#c3iRgd-mNSkgffV~?_=lO&}*&63WoN^Ab( zZDl)uBYUklDzk|MA4U>f0mTxBNPIO)63X#4k@=6eA?#fv`843NoP#XkI7uoOSi*8H z*zoAQHhW>sX zA16s>p2eTe1xHSnS^NqK&K(`f-j8Vf<|a{TwzBwbB$XLt@gpSG>}K(MNt`(_l+S;# zB{WNeyg9+*7f6CxV(}{^(eykgfA!ICeNI0AiOCGmpyWq#!AWGhNldYq#m$hE#W5Cl z3erCRNma2#gDO|w+o|m{oNTd~C0P<@hgs4%iI3B@w9S7~sAg#pu3%sZ3na-eXM&SJ z&4%Z;FEmyJMK6o9B5U&>TxnNqr$MFLNm3OPEN(xEEe^A|6C|!U(~{Ns4^C8d^=+@# z-|A5KqL0OGCke%FmUMt5+G8ZCT2#^bPrydsaz4lu)rRL~3uKD8nFI$)SmJh)vKnQH zdsd}2{|VTFnOP;74MXBl5?d{hxbi$p=ze~_(B5w$38sHdWd0LO@Iz}<&wql6W|YNG zkl@-b7Jn!g+*0ENi(g!qdj1niW0u#cCBE|o+3P4v)63!`No9su{1}Nf6K#U|5B9YA zsWz&`nS(6;7>PHhSo{)6Fr7Q{ml1q#yEO4+(QIp{TKpghPPbw4Lol0I{8kcU`dR!AlCo)bGx;f!${b|z$4IO>#p0Jp zoT=}l*Y+c`&Nnv^;lLt`-%b+DP8L5w63u>+R2*h;$D29fM1Xk~cZS3i=U80lNcPHb z4p}!#>LaP*wvlZ96L0`*kOtvA0G2RL;{6l}K8z%>IL6}UN3!`(z?RS%8kEw7TznC` zuFGDlH&ri7+(uGXLo9I&(l-AIzN+@nAY1Mu!J3f-+lnmi6iFzSS=@#f<7KSRe*&(8 z>8ojNe+R_%lcZt?i`$(GCO}gx?jVUNj)|<#e}ZufG^i|=S=@$~WQ!Q8qL0P(lh|T} zB~7$sZT^F+V5Vr04>KgVG=n6Xc@}?`B$<_5uvOl(v-L7o=RdJXTa{Y7;{r|s-OiFm zNlH7;lBP&1dzdAiTos-FL>o`9QfvMbT{uVL%MCBh-u#G*)JgE&$r6T0VmY=Zt@%%k zVecBr{3oXJU@qA3I8I`U1r~RXq%1bPEL&*Ys;zfjWd4H=~PBIKxsGJkUyDC10*;&&5~wGyj^5T zoiES+OovZTEv$4 zXJzdsmQav5H`FBZ)h-r4NfPV~OE^jr-AR^sh9sHBjm>%&Jq__r8WP-jcNVLDz(1fa1^5F zHQ5{Meb_>R%kfyM?JRzn1Sj&WiOheZPvztq$)^F6=z}crI0;TNWJyaTWm(^Nx^2yf zohzHxrJnypOxm`rlSt+JNpSHUi7UrRe6f!u9wfmWx=k?ui8zh=R2$Wj%B5T|C#i3Y z-S#>n_6Cv|Uyzh`kfbU{+XeF<-0ygAJJk{ok~njWC7mMi;T%bDoj2zT9ji^5G-Hh3 zW)yMHk?pypqTI>iCP+-RpT!?0DeYV?%~X|(IbrU5o+WO$C3_vonqHO^NpM>y5?|~h zY5HnEQ80&D(g_k=oJo?3WtP}E-oDT{tIPDU;OEa2c9582oF(of!DZSk=_m=SZCCeqH`LoGn0EGi_bdr+TEr5TNXlY`rP}WNrR~Tddk`GzcpY5?_q5RFf=znk5|}31Pk^tMeb+?yopQ zgJQKpl1%sS<*x%5o8?mBI39}|ATia5iq3x$jslGHptO$!cZMaYiUpRqOkz#v?`I2* zyKHS*mDcta7&==EY%oEFq15Hh6HDok)&c_O=SLq6JF!e8rAb39Om_n zJ=s!QV>gqOWn^)KEOC^iGJDshp8q7A{d91hS`vS{*8m{&*Qe7a5~m7OBy5bo66`G|X-2z5l*-0r_TzBL^{~XPxnQ$v8%r7{G36Lb)9q!7(3~wjW=bl17|O6 zCcz(5U~xNG;`p2LpFNJmPt%~%&a#A)Bvo;SrCMR}U2o18x=Ouo&gVbD21|onF~kzb zNW7V1Ni!s&JVFwSdC2oGZq!R9>--R_Gc+if3oL2F-t2YYZehJF?(VlgZ{x2n!OAVB zxIO>BsR*MarkrF6GbCksjHEKBNbr%*q?wX+owsF+i*-;hOR^;14zi@3B*Bi8#A;tI z%@pIIoKmXh+6AleqCCqIE|8eA`z>uR1CJ`r78XB1f}7ip5> z8%r7^@o}n26sm(P@hC~G=2_wrNvaxe%NIJuo?ObJD&E$I$(MI59-rW#|3lO$zz zfTSvqvxGAww!HAR_LUo+-iDsrv!yO^(IbgBgDifO1e0EpSj@1vW03WYJ3M_VPSK#` z&gOz!^fum}Eh273y@|xwEi7pp368|og7?3*ZgsdbcQr=Sf_1*ijmuO9~mBnpmi91P3KS5I2{Uo-WC26|iB$2C5li+@> zEUEJk^M%G=1|Y%yNS11trRgV_(ms+D4(EcKVa&0_GbF~Zu%zxk$`;y{q1j7RxyTYn zNUR?xadw)-mxo9~ag-&_H;JM@OOkBk9r;qH(36WV+!mHNK!O`@u%yX%-1&(cHa-pK z{F`Eb_9Q-7%M$uYa03Arx1A*olB8;gq?y8SPMA{eV6i({;w}i`~r7jwbXbcw~E|Kt2?5m%dZ{z>*0;mn^NmbitaEVr@vL6WK%VX@k`}iKj_?c@EP4wHUqM@Xq|zczmlG`h6p1NLvs7nU!g&$-`D2U6;qOeCuIcR6*JmfOq<)gB+|J^6 zkl=JB7CX@r-RFs?w{eOFxpIcZ&yx7!1dCl@iOVFR?7XA(Qd|2x@$|uOR+241NG!Ip z*nXBcOp?moEPj$DO|6RT^K=Hc!J1yBdIPkUaF7Ihz**c8mNZ9FR;O6P(wfx!Jn>|e zSy>|$*Y&6Ep9YLcn@Mc7l_m6(IJ2F_?N}G=^TgA;w0oUIe6@!q>?gsAwJdIyC7mFN z)u}dV)=wY9nKr5=ne!~JacBO1q|}oO-l8omp`XN<;da42r;Kr9?Nm$JLsC}LEa4zY zWoB9236?aU39k9G)#;2NVVT646&BZZAbUTIOT8q%+R73Ja>3u6Gs8KV;6_=}1PS&p zu!I>B+^UMj&68la$myK0wYba@R!DID-n+6_UmDlPk}OGC4YD-DPNK?;v$(x1X+Mdr z4zPqnB+eXVam{(Av_#^o&Ufdp6{p&g1hb9B4Y8zAl349-GKEQ!WTsi%VU{$P3;z7m z0!vsT!7a$%lg)o{%++r#9HedjV=CNaU?zX{q3U7rn@M7^g~j%>#37PYj?}U~|H0vHKb{Z5 zt?Q>)s{JfshQydz7JHN>&WWtee+>St=mHHY-D#GzOj4ESS$yZ8W$z+xU(iK@Kk3?% z)%g#0wS_G-$QjGx23X>D5?}6M@w-SuF{z^SAFT52J{}Ygk;L){i$6w^ijypMktHs# ziq3zqPpa|W>`lWT-02~~&KVXv#1cnI%5s9mPpwI7{^P1*dW~fMgPTepW{D?AY|3XL{^M}QA&Va*!6qh)-OUpBlHg3rHmT=7xW(1cHmW5R z^DOoZOFWkg{uXNEVD?&ZB(R&r6n*W2`H#m*=IvBV93&~r5f;Cjq$(y^>;aZ|IFlys zI9eXd2;xq#qy-XJonr|rB;IuYMgD$xyD1mkb0YTT{y;yd4$z10C1=d;*?B{uts zTsg?%M_AG*2~O2#342I_nPPD>O{R2+BvwaR!W;?ijl|+kv!n~T;A)r7yPDaXhQIRK zeOE5V^s=~uCH0e()i6sKC8^BryYl%@tlR_-N>e15Be8@-B$(;4xKk|YETnz@6MeNp zgYai~59RMiFug3UU`Ycc_~Y~}ez+FA|9V)&L|nu~gOc6N68GkUOVReRxEYpsh{Tj9 zMC9i$-+0ORQ#7b7PP5o^EOCVdXS%#Ud(UwGRu4*8V4^DjAN`q|JM&iwO7CXce zc8~-!%3^n^tj>Q@h6lB(k@;bbN_-O-#{mDc!oZry{0E!7W@wG-PXok_vZM(TTkT^B2T7cnWpPK>rJnzk z*#9%PP9nZK!xGMsgyI5=?fzi?4u!ahB$mBxg82`Q1^c3nYDq;uiydYOJ95Eae;Q+P o6D(w3?*8Z>ZnVe$KWD|GtpET3 diff --git a/src/WinLibs/pthreads/ANNOUNCE b/src/WinLibs/pthreads/ANNOUNCE new file mode 100644 index 000000000..86b87fa00 --- /dev/null +++ b/src/WinLibs/pthreads/ANNOUNCE @@ -0,0 +1,476 @@ + PTHREADS-WIN32 RELEASE 2.8.0 (2006-12-22) + ----------------------------------------- + Web Site: http://sources.redhat.com/pthreads-win32/ + FTP Site: ftp://sources.redhat.com/pub/pthreads-win32 + Maintainer: Ross Johnson + + +We are pleased to announce the availability of a new release of +Pthreads-win32, an Open Source Software implementation of the +Threads component of the POSIX 1003.1 2001 Standard for Microsoft's +Win32 environment. Some functions from other sections of POSIX +1003.1 2001 are also supported including semaphores and scheduling +functions. + +Some common non-portable functions are also implemented for +additional compatibility, as are a few functions specific +to pthreads-win32 for easier integration with Win32 applications. + +Pthreads-win32 is free software, distributed under the GNU Lesser +General Public License (LGPL). + + +Acknowledgements +---------------- +This library is based originally on a Win32 pthreads +implementation contributed by John Bossom . + +The implementation of Condition Variables uses algorithms developed +by Alexander Terekhov and Louis Thomas. + +The implementation of POSIX mutexes has been improved by Thomas Pfaff +and later by Alexander Terekhov. + +The implementation of Spinlocks and Barriers was contributed +by Ross Johnson. + +The implementation of read/write locks was contributed by +Aurelio Medina and improved by Alexander Terekhov. + +Many others have contributed significant time and effort to solve crutial +problems in order to make the library workable, robust and reliable. + +Thanks to Xavier Leroy for granting permission to use and modify his +LinuxThreads manual pages. + +Thanks to The Open Group for making the Single Unix Specification +publicly available - many of the manual pages included in the package +were extracted from it. + +There is also a separate CONTRIBUTORS file. This file and others are +on the web site: + + http://sources.redhat.com/pthreads-win32 + +As much as possible, the ChangeLog file acknowledges contributions to the +code base in more detail. + + +Changes since the last release +------------------------------ +These are now documented in the NEWS file. +See the ChangeLog file also. + + +Known Bugs +---------- +These are now documented in the BUGS file. + + +Level of standards conformance +------------------------------ + +The following POSIX 1003.1 2001 options are defined and set to 200112L: + + _POSIX_THREADS + _POSIX_THREAD_SAFE_FUNCTIONS + _POSIX_THREAD_ATTR_STACKSIZE + _POSIX_THREAD_PRIORITY_SCHEDULING + _POSIX_SEMAPHORES + _POSIX_READER_WRITER_LOCKS + _POSIX_SPIN_LOCKS + _POSIX_BARRIERS + + +The following POSIX 1003.1 2001 options are defined and set to -1: + + _POSIX_THREAD_ATTR_STACKADDR + _POSIX_THREAD_PRIO_INHERIT + _POSIX_THREAD_PRIO_PROTECT + _POSIX_THREAD_PROCESS_SHARED + + +The following POSIX 1003.1 2001 limits are defined and set: + + _POSIX_THREAD_THREADS_MAX + _POSIX_SEM_VALUE_MAX + _POSIX_SEM_NSEMS_MAX + _POSIX_THREAD_KEYS_MAX + _POSIX_THREAD_DESTRUCTOR_ITERATIONS + PTHREAD_STACK_MIN + PTHREAD_THREADS_MAX + SEM_VALUE_MAX + SEM_NSEMS_MAX + PTHREAD_KEYS_MAX + PTHREAD_DESTRUCTOR_ITERATIONS + + +The following functions are implemented: + + --------------------------- + PThreads + --------------------------- + pthread_attr_init + pthread_attr_destroy + pthread_attr_getdetachstate + pthread_attr_getstackaddr + pthread_attr_getstacksize + pthread_attr_setdetachstate + pthread_attr_setstackaddr + pthread_attr_setstacksize + + pthread_create + pthread_detach + pthread_equal + pthread_exit + pthread_join + pthread_once + pthread_self + + pthread_cancel + pthread_cleanup_pop + pthread_cleanup_push + pthread_setcancelstate + pthread_setcanceltype + pthread_testcancel + + --------------------------- + Thread Specific Data + --------------------------- + pthread_key_create + pthread_key_delete + pthread_setspecific + pthread_getspecific + + --------------------------- + Mutexes + --------------------------- + pthread_mutexattr_init + pthread_mutexattr_destroy + pthread_mutexattr_getpshared + pthread_mutexattr_setpshared + pthread_mutexattr_gettype + pthread_mutexattr_settype (types: PTHREAD_MUTEX_DEFAULT + PTHREAD_MUTEX_NORMAL + PTHREAD_MUTEX_ERRORCHECK + PTHREAD_MUTEX_RECURSIVE ) + pthread_mutex_init + pthread_mutex_destroy + pthread_mutex_lock + pthread_mutex_trylock + pthread_mutex_timedlock + pthread_mutex_unlock + + --------------------------- + Condition Variables + --------------------------- + pthread_condattr_init + pthread_condattr_destroy + pthread_condattr_getpshared + pthread_condattr_setpshared + + pthread_cond_init + pthread_cond_destroy + pthread_cond_wait + pthread_cond_timedwait + pthread_cond_signal + pthread_cond_broadcast + + --------------------------- + Read/Write Locks + --------------------------- + pthread_rwlock_init + pthread_rwlock_destroy + pthread_rwlock_tryrdlock + pthread_rwlock_trywrlock + pthread_rwlock_rdlock + pthread_rwlock_timedrdlock + pthread_rwlock_rwlock + pthread_rwlock_timedwrlock + pthread_rwlock_unlock + pthread_rwlockattr_init + pthread_rwlockattr_destroy + pthread_rwlockattr_getpshared + pthread_rwlockattr_setpshared + + --------------------------- + Spin Locks + --------------------------- + pthread_spin_init + pthread_spin_destroy + pthread_spin_lock + pthread_spin_unlock + pthread_spin_trylock + + --------------------------- + Barriers + --------------------------- + pthread_barrier_init + pthread_barrier_destroy + pthread_barrier_wait + pthread_barrierattr_init + pthread_barrierattr_destroy + pthread_barrierattr_getpshared + pthread_barrierattr_setpshared + + --------------------------- + Semaphores + --------------------------- + sem_init + sem_destroy + sem_post + sem_wait + sem_trywait + sem_timedwait + sem_getvalue (# free if +ve, # of waiters if -ve) + sem_open (returns an error ENOSYS) + sem_close (returns an error ENOSYS) + sem_unlink (returns an error ENOSYS) + + --------------------------- + RealTime Scheduling + --------------------------- + pthread_attr_getschedparam + pthread_attr_setschedparam + pthread_attr_getinheritsched + pthread_attr_setinheritsched + pthread_attr_getschedpolicy (only supports SCHED_OTHER) + pthread_attr_setschedpolicy (only supports SCHED_OTHER) + pthread_getschedparam + pthread_setschedparam + pthread_getconcurrency + pthread_setconcurrency + pthread_attr_getscope + pthread_attr_setscope (only supports PTHREAD_SCOPE_SYSTEM) + sched_get_priority_max + sched_get_priority_min + sched_rr_get_interval (returns an error ENOTSUP) + sched_setscheduler (only supports SCHED_OTHER) + sched_getscheduler (only supports SCHED_OTHER) + sched_yield + + --------------------------- + Signals + --------------------------- + pthread_sigmask + pthread_kill (only supports zero sig value, + for thread validity checking) + + --------------------------- + Non-portable routines (see the README.NONPORTABLE file for usage) + --------------------------- + pthread_getw32threadhandle_np + pthread_timechange_handler_np + pthread_delay_np + pthread_mutexattr_getkind_np + pthread_mutexattr_setkind_np (types: PTHREAD_MUTEX_FAST_NP, + PTHREAD_MUTEX_ERRORCHECK_NP, + PTHREAD_MUTEX_RECURSIVE_NP, + PTHREAD_MUTEX_ADAPTIVE_NP, + PTHREAD_MUTEX_TIMED_NP) + pthread_num_processors_np + pthread_win32_process_attach_np (Required when statically linking + the library) + pthread_win32_process_detach_np (Required when statically linking + the library) + pthread_win32_thread_attach_np (Required when statically linking + the library) + pthread_win32_thread_detach_np (Required when statically linking + the library) + + --------------------------- + Static Initializers + --------------------------- + PTHREAD_ONCE_INIT + PTHREAD_MUTEX_INITIALIZER + PTHREAD_RECURSIVE_MUTEX_INITIALIZER + PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + PTHREAD_ERRORCHECK_MUTEX_INITIALIZER + PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP + PTHREAD_COND_INITIALIZER + PTHREAD_RWLOCK_INITIALIZER + PTHREAD_SPINLOCK_INITIALIZER + + --------------------------- + Thread-Safe C Runtime Library (macros) + --------------------------- + strtok_r + asctime_r + ctime_r + gmtime_r + localtime_r + rand_r + + +The following functions are not implemented: + + --------------------------- + RealTime Scheduling + --------------------------- + pthread_mutex_getprioceiling + pthread_mutex_setprioceiling + pthread_mutex_attr_getprioceiling + pthread_mutex_attr_getprotocol + pthread_mutex_attr_setprioceiling + pthread_mutex_attr_setprotocol + + --------------------------- + Fork Handlers + --------------------------- + pthread_atfork + + --------------------------- + Stdio + --------------------------- + flockfile + ftrylockfile + funlockfile + getc_unlocked + getchar_unlocked + putc_unlocked + putchar_unlocked + + --------------------------- + Thread-Safe C Runtime Library + --------------------------- + readdir_r + getgrgid_r + getgrnam_r + getpwuid_r + getpwnam_r + + --------------------------- + Signals + --------------------------- + sigtimedwait + sigwait + sigwaitinfo + + --------------------------- + General + --------------------------- + sysconf + +The library includes two non-API functions for creating cancellation +points in applications and libraries: + + pthreadCancelableWait + pthreadCancelableTimedWait + + +Availability +------------ + +The prebuilt DLL, export libs (for both MSVC and Mingw32), and the header +files (pthread.h, semaphore.h, sched.h) are available along with the +complete source code. + +The source code can be found at: + + ftp://sources.redhat.com/pub/pthreads-win32 + +and as individual source code files at + + ftp://sources.redhat.com/pub/pthreads-win32/source + +The pre-built DLL, export libraries and include files can be found at: + + ftp://sources.redhat.com/pub/pthreads-win32/dll-latest + + + +Mailing List +------------ + +There is a mailing list for discussing pthreads on Win32. To join, +send email to: + + pthreads-win32-subscribe@sourceware.cygnus.com + + +Application Development Environments +------------------------------------ + +See the README file for more information. + +MSVC: +MSVC using SEH works. Distribute pthreadVSE.dll with your application. +MSVC using C++ EH works. Distribute pthreadVCE.dll with your application. +MSVC using C setjmp/longjmp works. Distribute pthreadVC.dll with your application. + + +Mingw32: +See the FAQ, Questions 6 and 10. + +Mingw using C++ EH works. Distribute pthreadGCE.dll with your application. +Mingw using C setjmp/longjmp works. Distribute pthreadGC.dll with your application. + + +Cygwin: (http://sourceware.cygnus.com/cygwin/) +Developers using Cygwin will not need pthreads-win32 since it has POSIX threads +support. Refer to its documentation for details and extent. + + +UWIN: +UWIN is a complete Unix-like environment for Windows from AT&T. Pthreads-win32 +doesn't currently support UWIN (and vice versa), but that may change in the +future. + +Generally: +For convenience, the following pre-built files are available on the FTP site +(see Availability above): + + pthread.h - for POSIX 1c threads + semaphore.h - for POSIX 1b semaphores + sched.h - for POSIX 1b scheduling + pthreadVCE.dll - built with MSVC++ compiler using C++ EH + pthreadVCE.lib + pthreadVC.dll - built with MSVC compiler using C setjmp/longjmp + pthreadVC.lib + pthreadVSE.dll - built with MSVC compiler using SEH + pthreadVSE.lib + pthreadGCE.dll - built with Mingw32 G++ 2.95.2-1 + pthreadGC.dll - built with Mingw32 GCC 2.95.2-1 using setjmp/longjmp + libpthreadGCE.a - derived from pthreadGCE.dll + libpthreadGC.a - derived from pthreadGC.dll + gcc.dll - needed if distributing applications that use + pthreadGCE.dll (but see the FAQ Q 10 for the latest + related information) + +These are the only files you need in order to build POSIX threads +applications for Win32 using either MSVC or Mingw32. + +See the FAQ file in the source tree for additional information. + + +Documentation +------------- + +For the authoritative reference, see the online POSIX +standard reference at: + + http://www.OpenGroup.org + +For POSIX Thread API programming, several reference books are +available: + + Programming with POSIX Threads + David R. Butenhof + Addison-Wesley (pub) + + Pthreads Programming + By Bradford Nichols, Dick Buttlar & Jacqueline Proulx Farrell + O'Reilly (pub) + +On the web: see the links at the bottom of the pthreads-win32 site: + + http://sources.redhat.com/pthreads-win32/ + + Currently, there is no documentation included in the package apart + from the copious comments in the source code. + + + +Enjoy! + +Ross Johnson diff --git a/src/WinLibs/pthreads/BUGS b/src/WinLibs/pthreads/BUGS new file mode 100644 index 000000000..cb1780b46 --- /dev/null +++ b/src/WinLibs/pthreads/BUGS @@ -0,0 +1,133 @@ +---------- +Known bugs +---------- + +1. Not strictly a bug, more of a gotcha. + + Under MS VC++ (only tested with version 6.0), a term_func + set via the standard C++ set_terminate() function causes the + application to abort. + + Notes from the MSVC++ manual: + 1) A term_func() should call exit(), otherwise + abort() will be called on return to the caller. + A call to abort() raises SIGABRT and the default signal handler + for all signals terminates the calling program with + exit code 3. + 2) A term_func() must not throw an exception. Therefore + term_func() should not call pthread_exit(), which + works by throwing an exception (pthreadVCE or pthreadVSE) + or by calling longjmp (pthreadVC). + + Workaround: avoid using pthread_exit() in C++ applications. Exit + threads by dropping through the end of the thread routine. + +2. Cancellation problems in optimised code + - Milan Gardian + + This is suspected to be a compiler bug in VC6.0, and also seen in + VC7.0 and VS .NET 2003. The GNU C++ compiler does not have a problem + with this, and it has been reported that the Intel C++ 8.1 compiler + and Visual C++ 2005 Express Edition Beta2 pass tests\semaphore4.c + (which exposes the bug). + + Workaround [rpj - 2 Feb 2002] + ----------------------------- + [Please note: this workaround did not solve a similar problem in + snapshot-2004-11-03 or later, even though similar symptoms were seen. + tests\semaphore4.c fails in that snapshot for the VCE version of the + DLL.] + + The problem disappears when /Ob0 is used, i.e. /O2 /Ob0 works OK, + but if you want to use inlining optimisation you can be much more + specific about where it's switched off and on by using a pragma. + + So the inlining optimisation is interfering with the way that cleanup + handlers are run. It appears to relate to auto-inlining of class methods + since this is the only auto inlining that is performed at /O1 optimisation + (functions with the "inline" qualifier are also inlined, but the problem + doesn't appear to involve any such functions in the library or testsuite). + + In order to confirm the inlining culprit, the following use of pragmas + eliminate the problem but I don't know how to make it transparent, putting + it in, say, pthread.h where pthread_cleanup_push defined as a macro. + + #pragma inline_depth(0) + pthread_cleanup_push(handlerFunc, (void *) &arg); + + /* ... */ + + pthread_cleanup_pop(0); + #pragma inline_depth() + + Note the empty () pragma value after the pop macro. This resets depth to the + default. Or you can specify a non-zero depth here. + + The pragma is also needed (and now used) within the library itself wherever + cleanup handlers are used (condvar.c and rwlock.c). + + Use of these pragmas allows compiler optimisations /O1 and /O2 to be + used for either or both the library and applications. + + Experimenting further, I found that wrapping the actual cleanup handler + function with #pragma auto_inline(off|on) does NOT work. + + MSVC6.0 doesn't appear to support the C99 standard's _Pragma directive, + however, later versions may. This form is embeddable inside #define + macros, which would be ideal because it would mean that it could be added + to the push/pop macro definitions in pthread.h and hidden from the + application programmer. + + [/rpj] + + Original problem description + ---------------------------- + + The cancellation (actually, cleanup-after-cancel) tests fail when using VC + (professional) optimisation switches (/O1 or /O2) in pthreads library. I + have not investigated which concrete optimisation technique causes this + problem (/Og, /Oi, /Ot, /Oy, /Ob1, /Gs, /Gf, /Gy, etc.), but here is a + summary of builds and corresponding failures: + + * pthreads VSE (optimised tests): OK + * pthreads VCE (optimised tests): Failed "cleanup1" test (runtime) + + * pthreads VSE (DLL in CRT, optimised tests): OK + * pthreads VCE (DLL in CRT, optimised tests): Failed "cleanup1" test + (runtime) + + Please note that while in VSE version of the pthreads library the + optimisation does not really have any impact on the tests (they pass OK), in + VCE version addition of optimisation (/O2 in this case) causes the tests to + fail uniformly - either in "cleanup0" or "cleanup1" test cases. + + Please note that all the tests above use default pthreads DLL (no + optimisations, linked with either static or DLL CRT, based on test type). + Therefore the problem lies not within the pthreads DLL but within the + compiled client code (the application using pthreads -> involvement of + "pthread.h"). + + I think the message of this section is that usage of VCE version of pthreads + in applications relying on cancellation/cleanup AND using optimisations for + creation of production code is highly unreliable for the current version of + the pthreads library. + +3. The Borland Builder 5.5 version of the library produces memory read exceptions +in some tests. + +4. pthread_barrier_wait() can deadlock if the number of potential calling +threads for a particular barrier is greater than the barrier count parameter +given to pthread_barrier_init() for that barrier. + +This is due to the very lightweight implementation of pthread-win32 barriers. +To cope with more than "count" possible waiters, barriers must effectively +implement all the same safeguards as condition variables, making them much +"heavier" than at present. + +The workaround is to ensure that no more than "count" threads attempt to wait +at the barrier. + +5. Canceling a thread blocked on pthread_once appears not to work in the MSVC++ +version of the library "pthreadVCE.dll". The test case "once3.c" hangs. I have no +clues on this at present. All other versions pass this test ok - pthreadsVC.dll, +pthreadsVSE.dll, pthreadsGC.dll and pthreadsGCE.dll. diff --git a/src/WinLibs/pthreads/CONTRIBUTORS b/src/WinLibs/pthreads/CONTRIBUTORS new file mode 100644 index 000000000..2f70e385c --- /dev/null +++ b/src/WinLibs/pthreads/CONTRIBUTORS @@ -0,0 +1,129 @@ +Contributors (in approximate order of appearance) + +[See also the ChangeLog file where individuals are +attributed in log entries. Likewise in the FAQ file.] + +Ben Elliston bje at cygnus dot com + Initiated the project; + setup the project infrastructure (CVS, web page, etc.); + early prototype routines. +Ross Johnson rpj at callisto dot canberra dot edu dot au + early prototype routines; + ongoing project coordination/maintenance; + implementation of spin locks and barriers; + various enhancements; + bug fixes; + documentation; + testsuite. +Robert Colquhoun rjc at trump dot net dot au + Early bug fixes. +John E. Bossom John dot Bossom at cognos dot com + Contributed substantial original working implementation; + bug fixes; + ongoing guidance and standards interpretation. +Anders Norlander anorland at hem2 dot passagen dot se + Early enhancements and runtime checking for supported + Win32 routines. +Tor Lillqvist tml at iki dot fi + General enhancements; + early bug fixes to condition variables. +Scott Lightner scott at curriculum dot com + Bug fix. +Kevin Ruland Kevin dot Ruland at anheuser-busch dot com + Various bug fixes. +Mike Russo miker at eai dot com + Bug fix. +Mark E. Armstrong avail at pacbell dot net + Bug fixes. +Lorin Hochstein lmh at xiphos dot ca + general bug fixes; bug fixes to condition variables. +Peter Slacik Peter dot Slacik at tatramed dot sk + Bug fixes. +Mumit Khan khan at xraylith dot wisc dot edu + Fixes to work with Mingw32. +Milan Gardian mg at tatramed dot sk + Bug fixes and reports/analyses of obscure problems. +Aurelio Medina aureliom at crt dot com + First implementation of read-write locks. +Graham Dumpleton Graham dot Dumpleton at ra dot pad dot otc dot telstra dot com dot au + Bug fix in condition variables. +Tristan Savatier tristan at mpegtv dot com + WinCE port. +Erik Hensema erik at hensema dot xs4all dot nl + Bug fixes. +Rich Peters rpeters at micro-magic dot com +Todd Owen towen at lucidcalm dot dropbear dot id dot au + Bug fixes to dll loading. +Jason Nye jnye at nbnet dot nb dot ca + Implementation of async cancelation. +Fred Forester fforest at eticomm dot net +Kevin D. Clark kclark at cabletron dot com +David Baggett dmb at itasoftware dot com + Bug fixes. +Paul Redondo paul at matchvision dot com +Scott McCaskill scott at 3dfx dot com + Bug fixes. +Jef Gearhart jgearhart at tpssys dot com + Bug fix. +Arthur Kantor akantor at bexusa dot com + Mutex enhancements. +Steven Reddie smr at essemer dot com dot au + Bug fix. +Alexander Terekhov TEREKHOV at de dot ibm dot com + Re-implemented and improved read-write locks; + (with Louis Thomas) re-implemented and improved + condition variables; + enhancements to semaphores; + enhancements to mutexes; + new mutex implementation in 'futex' style; + suggested a robust implementation of pthread_once + similar to that implemented by V.Kliathcko; + system clock change handling re CV timeouts; + bug fixes. +Thomas Pfaff tpfaff at gmx dot net + Changes to make C version usable with C++ applications; + re-implemented mutex routines to avoid Win32 mutexes + and TryEnterCriticalSection; + procedure to fix Mingw32 thread-safety issues. +Franco Bez franco dot bez at gmx dot de + procedure to fix Mingw32 thread-safety issues. +Louis Thomas lthomas at arbitrade dot com + (with Alexander Terekhov) re-implemented and improved + condition variables. +David Korn dgk at research dot att dot com + Ported to UWIN. +Phil Frisbie, Jr. phil at hawksoft dot com + Bug fix. +Ralf Brese Ralf dot Brese at pdb4 dot siemens dot de + Bug fix. +prionx at juno dot com prionx at juno dot com + Bug fixes. +Max Woodbury mtew at cds dot duke dot edu + POSIX versioning conditionals; + reduced namespace pollution; + idea to separate routines to reduce statically + linked image sizes. +Rob Fanner rfanner at stonethree dot com + Bug fix. +Michael Johnson michaelj at maine dot rr dot com + Bug fix. +Nicolas Barry boozai at yahoo dot com + Bug fixes. +Piet van Bruggen pietvb at newbridges dot nl + Bug fix. +Makoto Kato raven at oldskool dot jp + AMD64 port. +Panagiotis E. Hadjidoukas peh at hpclab dot ceid dot upatras dot gr + Contributed the QueueUserAPCEx package which + makes preemptive async cancelation possible. +Will Bryant will dot bryant at ecosm dot com + Borland compiler patch and makefile. +Anuj Goyal anuj dot goyal at gmail dot com + Port to Digital Mars compiler. +Gottlob Frege gottlobfrege at gmail dot com + re-implemented pthread_once (version 2) + (pthread_once cancellation added by rpj). +Vladimir Kliatchko vladimir at kliatchko dot com + reimplemented pthread_once with the same form + as described by A.Terekhov (later version 2); + implementation of MCS (Mellor-Crummey/Scott) locks. diff --git a/src/WinLibs/pthreads/COPYING b/src/WinLibs/pthreads/COPYING new file mode 100644 index 000000000..af8e3db91 --- /dev/null +++ b/src/WinLibs/pthreads/COPYING @@ -0,0 +1,150 @@ + pthreads-win32 - a POSIX threads library for Microsoft Windows + + +This file is Copyrighted +------------------------ + + This file is covered under the following Copyright: + + Copyright (C) 2001,2006 Ross P. Johnson + All rights reserved. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Pthreads-win32 is covered by the GNU Lesser General Public License +------------------------------------------------------------------ + + Pthreads-win32 is open software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation version 2.1 of the + License. + + Pthreads-win32 is several binary link libraries, several modules, + associated interface definition files and scripts used to control + its compilation and installation. + + Pthreads-win32 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + A copy of the GNU Lesser General Public License is distributed with + pthreads-win32 under the filename: + + COPYING.LIB + + You should have received a copy of the version 2.1 GNU Lesser General + Public License with pthreads-win32; if not, write to: + + Free Software Foundation, Inc. + 59 Temple Place + Suite 330 + Boston, MA 02111-1307 + USA + + The contact addresses for pthreads-win32 is as follows: + + Web: http://sources.redhat.com/pthreads-win32 + Email: Ross Johnson + Please use: Firstname.Lastname@homemail.com.au + + + +Pthreads-win32 copyrights and exception files +--------------------------------------------- + + With the exception of the files listed below, Pthreads-win32 + is covered under the following GNU Lesser General Public License + Copyrights: + + Pthreads-win32 - POSIX Threads Library for Win32 + Copyright(C) 1998 John E. Bossom + Copyright(C) 1999,2006 Pthreads-win32 contributors + + The current list of contributors is contained + in the file CONTRIBUTORS included with the source + code distribution. The current list of CONTRIBUTORS + can also be seen at the following WWW location: + http://sources.redhat.com/pthreads-win32/contributors.html + + Contact Email: Ross Johnson + Please use: Firstname.Lastname@homemail.com.au + + These files are not covered under one of the Copyrights listed above: + + COPYING + COPYING.LIB + tests/rwlock7.c + + This file, COPYING, is distributed under the Copyright found at the + top of this file. It is important to note that you may distribute + verbatim copies of this file but you may not modify this file. + + The file COPYING.LIB, which contains a copy of the version 2.1 + GNU Lesser General Public License, is itself copyrighted by the + Free Software Foundation, Inc. Please note that the Free Software + Foundation, Inc. does NOT have a copyright over Pthreads-win32, + only the COPYING.LIB that is supplied with pthreads-win32. + + The file tests/rwlock7.c is derived from code written by + Dave Butenhof for his book 'Programming With POSIX(R) Threads'. + The original code was obtained by free download from his website + http://home.earthlink.net/~anneart/family/Threads/source.html + and did not contain a copyright or author notice. It is assumed to + be freely distributable. + + In all cases one may use and distribute these exception files freely. + And because one may freely distribute the LGPL covered files, the + entire pthreads-win32 source may be freely used and distributed. + + + +General Copyleft and License info +--------------------------------- + + For general information on Copylefts, see: + + http://www.gnu.org/copyleft/ + + For information on GNU Lesser General Public Licenses, see: + + http://www.gnu.org/copyleft/lesser.html + http://www.gnu.org/copyleft/lesser.txt + + +Why pthreads-win32 did not use the GNU General Public License +------------------------------------------------------------- + + The goal of the pthreads-win32 project has been to + provide a quality and complete implementation of the POSIX + threads API for Microsoft Windows within the limits imposed + by virtue of it being a stand-alone library and not + linked directly to other POSIX compliant libraries. For + example, some functions and features, such as those based + on POSIX signals, are missing. + + Pthreads-win32 is a library, available in several different + versions depending on supported compilers, and may be used + as a dynamically linked module or a statically linked set of + binary modules. It is not an application on it's own. + + It was fully intended that pthreads-win32 be usable with + commercial software not covered by either the GPL or the LGPL + licenses. Pthreads-win32 has many contributors to it's + code base, many of whom have done so because they have + used the library in commercial or proprietry software + projects. + + Releasing pthreads-win32 under the LGPL ensures that the + library can be used widely, while at the same time ensures + that bug fixes and improvements to the pthreads-win32 code + itself is returned to benefit all current and future users + of the library. + + Although pthreads-win32 makes it possible for applications + that use POSIX threads to be ported to Win32 platforms, the + broader goal of the project is to encourage the use of open + standards, and in particular, to make it just a little easier + for developers writing Win32 applications to consider + widening the potential market for their products. diff --git a/src/WinLibs/pthreads/COPYING.LIB b/src/WinLibs/pthreads/COPYING.LIB new file mode 100644 index 000000000..cbee875ba --- /dev/null +++ b/src/WinLibs/pthreads/COPYING.LIB @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/src/WinLibs/pthreads/ChangeLog b/src/WinLibs/pthreads/ChangeLog new file mode 100644 index 000000000..d26d980f1 --- /dev/null +++ b/src/WinLibs/pthreads/ChangeLog @@ -0,0 +1,4821 @@ +2006-12-20 Ross Johnson + + * sem_destroy.c: Fix the race involving invalidation of the sema; + fix incorrect return of EBUSY resulting from the mutex trylock + on the private mutex guard. + * sem_wait.c: Add check for invalid sem_t after acquiring the + sem_t state guard mutex and before affecting changes to sema state. + * sem_trywait.c: Likewise. + * sem_timedwait.c: Likewise. + * sem_getvalue.c: Likewise. + * sem_post.c: Similar. + * sem_post_multiple.c: Likewise. + * sem_init.c: Set max Win32 semaphore count to SEM_VALUE_MAX (was + _POSIX_SEM_VALUE_MAX, which is a lower value - the minimum). + + * pthread_win32_attach_detach_np.c (pthread_win32_process_attach_np): + Load COREDLL.DLL under WINCE to check existence of + InterlockedCompareExchange() routine. This used to be done to test + for TryEnterCriticalSection() but was removed when this was no + longer needed. + +2006-01-25 Prashant Thakre + + * pthread_cancel.c: Added _M_IA64 register context support. + +2005-05-13 Ross Johnson + + * pthread_kill.c (pthread_kill): Remove check for Win32 thread + priority (to confirm HANDLE validity). Useless since thread HANDLEs + a not recycle-unique. + +2005-05-30 Vladimir Kliatchko + + * pthread_once.c: Re-implement using an MCS queue-based lock. The form + of pthread_once is as proposed by Alexander Terekhov (see entry of + 2005-03-13). The MCS lock implementation does not require a unique + 'name' to identify the lock between threads. Attempts to get the Event + or Semaphore based versions of pthread_once to a satisfactory level + of robustness have thus far failed. The last problem (avoiding races + involving non recycle-unique Win32 HANDLEs) was giving everyone + grey hair trying to solve it. + + * ptw32_MCS_lock.c: New MCS queue-based lock implementation. These + locks are efficient: they have very low overhead in the uncontended case; + are efficient in contention and minimise cache-coherence updates in + managing the user level FIFO queue; do not require an ABI change in the + library. + +2005-05-27 Alexander Gottwald + + * pthread.h: Some things, like HANDLE, were only defined if + PTW32_LEVEL was >= 3. They should always be defined. + +2005-05-25 Vladimir Kliatchko + + * pthread_once.c: Eliminate all priority operations and other + complexity by replacing the event with a semaphore. The advantage + of the change is the ability to release just one waiter if the + init_routine thread is cancelled yet still release all waiters when + done. Simplify once_control state checks to improve efficiency + further. + +2005-05-24 Mikael Magnusson + + * GNUmakefile: Patched to allow cross-compile with mingw32 on Linux. + It uses macros instead of referencing dlltool, gcc and g++ directly; + added a call to ranlib. For example the GC static library can be + built with: + make CC=i586-mingw32msvc-gcc RC=i586-mingw32msvc-windres \ + RANLIB=i586-mingw32msvc-ranlib clean GC-static + +2005-05-13 Ross Johnson + + * pthread_win32_attach_detach_np.c (pthread_win32_thread_detach_np): + Move on-exit-only stuff from ptw32_threadDestroy() to here. + * ptw32_threadDestroy.c: It's purpose is now only to reclaim thread + resources for detached threads, or via pthread_join() or + pthread_detach() on joinable threads. + * ptw32_threadStart.c: Calling user destruct routines has moved to + pthread_win32_thread_detach_np(); call pthread_win32_thread_detach_np() + directly if statically linking, otherwise do so via dllMain; store + thread return value in thread struct for all cases, including + cancellation and exception exits; thread abnormal exits go via + pthread_win32_thread_detach_np. + * pthread_join.c (pthread_join): Don't try to get return code from + Win32 thread - always get it from he thread struct. + * pthread_detach.c (pthread_detach): reduce extent of the thread + existence check since we now don't care if the Win32 thread HANDLE has + been closed; reclaim thread resources if the thread has exited already. + * ptw32_throw.c (ptw32_throw): For Win32 threads that are not implicit, + only Call thread cleanup if statically linking, otherwise leave it to + dllMain. + * sem_post.c (_POSIX_SEM_VALUE_MAX): Change to SEM_VALUE_MAX. + * sem_post_multiple.c: Likewise. + * sem_init.c: Likewise. + +2005-05-10 Ross Johnson + + * pthread_join.c (pthread_join): Add missing check for thread ID + reference count in thread existence test; reduce extent of the + existence test since we don't care if the Win32 thread HANDLE has + been closed. + +2005-05-09 Ross Johnson + + * ptw32_callUserDestroyRoutines.c: Run destructor process (i.e. + loop over all keys calling destructors) up to + PTHREAD_DESTRUCTOR_ITERATIONS times if TSD value isn't NULL yet; + modify assoc management. + * pthread_key_delete.c: Modify assoc management. + * ptw32_tkAssocDestroy.c: Fix error in assoc removal from chains. + * pthread.h + (_POSIX_THREAD_DESTRUCTOR_ITERATIONS): Define to value specified by + POSIX. + (_POSIX_THREAD_KEYS_MAX): Define to value specified by POSIX. + (PTHREAD_KEYS_MAX): Redefine [upward] to minimum required by POSIX. + (SEM_NSEMS_MAX): Define to implementation value. + (SEM_VALUE_MAX): Define to implementation value. + (_POSIX_SEM_NSEMS_MAX): Redefine to value specified by POSIX. + (_POSIX_SEM_VALUE_MAX): Redefine to value specified by POSIX. + +2005-05-06 Ross Johnson + + * signal.c (sigwait): Add a cancellation point to this otherwise + no-op. + * sem_init.c (sem_init): Check for and return ERANGE error. + * sem_post.c (sem_post): Likewise. + * sem_post_multiple.c (sem_post_multiple): Likewise. + * manual (directory): Added; see ChangeLog inside. + +2005-05-02 Ross Johnson + + * implement.h (struct pthread_key_t_): Change threadsLock to keyLock + so as not to be confused with the per thread lock 'threadlock'; + change all references to it. + * implement.h (struct ThreadKeyAssoc): Remove lock; add prevKey + and prevThread pointers; re-implemented all routines that use this + struct. The effect of this is to save one handle per association, + which could potentially equal the number of keys multiplied by the + number of threads, accumulating over time - and to free the + association memory as soon as it is no longer referenced by either + the key or the thread. Previously, the handle and memory were + released only after BOTH key and thread no longer referenced the + association. That is, often no association resources were released + until the process itself exited. In addition, at least one race + condition has been removed - where two threads could attempt to + release the association resources simultaneously - one via + ptw32_callUserDestroyRoutines and the other via + pthread_key_delete. + - thanks to Richard Hughes at Aculab for discovering the problem. + * pthread_key_create.c: See above. + * pthread_key_delete.c: See above. + * pthread_setspecific.c: See above. + * ptw32_callUserDestroyRoutines.c: See above. + * ptw32_tkAssocCreate.c: See above. + * ptw32_tkAssocDestroy.c: See above. + +2005-04-27 Ross Johnson + + * sem_wait.c (ptw32_sem_wait_cleanup): after cancellation re-attempt + to acquire the semaphore to avoid a race with a late sem_post. + * sem_timedwait.c: Modify comments. + +2005-04-25 Ross Johnson + + * ptw32_relmillisecs.c: New module; converts future abstime to + milliseconds relative to 'now'. + * pthread_mutex_timedlock.c: Use new ptw32_relmillisecs routine in + place of internal code; remove the NEED_SEM code - this routine is now + implemented for builds that define NEED_SEM (WinCE etc) + * sem_timedwait.c: Likewise; after timeout or cancellation, + re-attempt to acquire the semaphore in case one has been posted since + the timeout/cancel occurred. Thanks to Stefan Mueller. + * Makefile: Add ptw32_relmillisecs.c module; remove + ptw32_{in,de}crease_semaphore.c modules. + * GNUmakefile: Likewise. + * Bmakefile: Likewise. + + * sem_init.c: Re-write the NEED_SEM code to be consistent with the + non-NEED_SEM code, but retaining use of an event in place of the w32 sema + for w32 systems that don't include semaphores (WinCE); + the NEED_SEM versions of semaphores has been broken for a long time but is + now fixed and supports all of the same routines as the non-NEED_SEM case. + * sem_destroy.c: Likewise. + * sem_wait.c: Likewise. + * sem_post.c: Likewise. + * sem_post_multple.c: Likewise. + * implement.h: Likewise. + * sem_timedwait.c: Likewise; this routine is now + implemented for builds that define NEED_SEM (WinCE etc). + * sem_trywait.c: Likewise. + * sem_getvalue.c: Likewise. + + * pthread_once.c: Yet more changes, reverting closer to Gottlob Frege's + first design, but retaining cancellation, priority boosting, and adding + preservation of W32 error codes to make pthread_once transparent to + GetLastError. + +2005-04-11 Ross Johnson + + * pthread_once.c (pthread_once): Added priority boosting to + solve starvation problem after once_routine cancellation. + See notes in file. + +2005-04-06 Kevin Lussier + + * Makefile: Added debug targets for all versions of the library. + +2005-04-01 Ross Johnson + + * GNUmakefile: Add target to build libpthreadGC1.a as a static link + library. + * Makefile: Likewise for pthreadGC1.lib. + +2005-04-01 Kevin Lussier + + * sem_timedwait.c (sem_timedwait): Increase size of temp variables to + avoid int overflows for large timeout values. + * implement.h (int64_t): Include or define. + +2005-03-31 Dimitar Panayotov ^M + + * pthread.h: Fix conditional defines for static linking. + * sched.h: Liekwise. + * semaphore.h: Likewise. + * dll.c (PTW32_STATIC_LIB): Module is conditionally included + in the build. + +2005-03-16 Ross Johnson ^M + + * pthread_setcancelstate.c: Undo the last change. + +2005-03-16 Ross Johnson ^M + + * pthread_setcancelstate.c: Don't check for an async cancel event + if the library is using alertable async cancel.. + +2005-03-14 Ross Johnson + + * pthread_once.c (pthread_once): Downgrade interlocked operations to simple + memory operations where these are protected by the critical section; edit + comments. + +2005-03-13 Ross Johnson + + * pthread_once.c (pthread_once): Completely redesigned; a change was + required to the ABI (pthread_once_t_), and resulting in a version + compatibility index increment. + + NOTES: + The design (based on pseudo code contributed by Gottlob Frege) avoids + creating a kernel object if there is no contention. See URL for details:- + http://sources.redhat.com/ml/pthreads-win32/2005/msg00029.html + This uses late initialisation similar to the technique already used for + pthreads-win32 mutexes and semaphores (from Alexander Terekhov). + + The subsequent cancelation cleanup additions (by rpj) could not be implemented + without sacrificing some of the efficiency in Gottlob's design. In particular, + although each once_control uses it's own event to block on, a global CS is + required to manage it - since the event must be either re-usable or + re-creatable under cancelation. This is not needed in the non-cancelable + design because it is able to mark the event as closed (forever). + + When uncontested, a CS operation is equivalent to an Interlocked operation + in speed. So, in the final design with cancelability, an uncontested + once_control operation involves a minimum of five interlocked operations + (including the LeaveCS operation). + + ALTERNATIVES: + An alternative design from Alexander Terekhov proposed using a named mutex, + as sketched below:- + + if (!once_control) { // May be in TLS + named_mutex::guard guard(&once_control2); + if (!once_control2) { + + once_control2 = true; + } + once_control = true; + } + + A more detailed description of this can be found here:- + http://groups.yahoo.com/group/boost/message/15442 + + [Although the definition of a suitable PTHREAD_ONCE_INIT precludes use of the + TLS located flag, this is not critical.] + + There are three primary concerns though:- + 1) The [named] mutex is 'created' even in the uncontended case. + 2) A system wide unique name must be generated. + 3) Win32 mutexes are VERY slow even in the uncontended case. An uncontested + Win32 mutex lock operation can be 50 (or more) times slower than an + uncontested EnterCS operation. + + Ultimately, the named mutex trick is making use of the global locks maintained + by the kernel. + + * pthread.h (pthread_once_t_): One flag and an event HANDLE added. + (PTHREAD_ONCE_INIT): Additional values included. + +2005-03-08 Ross Johnson + + * pthread_once.c (pthread_once): Redesigned to elliminate potential + starvation problem. + - reported by Gottlob Frege + + * ptw32_threadDestroy.c (ptw32_threadDestroy): Implicit threads were + not closing their Win32 thread duplicate handle. + - reported by Dmitrii Semii + +2005-01-25 Ralf Kubis + + * Attempted acquisition of recursive mutex was causing waiting + threads to not be woken when the mutex is released. + + * GNUmakefile (GCE): Generate correct version resource comments. + +2005-01-01 Konstantin Voronkov + + * pthread_mutex_lock.c (pthread_mutex_lock): The new atomic exchange + mutex algorithm is known to allow a thread to steal the lock off + FIFO waiting threads. The next waiting FIFO thread gets a spurious + wake-up and must attempt to re-acquire the lock. The woken thread + was setting itself as the mutex's owner before the re-acquisition. + +2004-11-22 Ross Johnson + + * pthread_cond_wait.c (ptw32_cond_wait_cleanup): Undo change + from 2004-11-02. + * Makefile (DLL_VER): Added for DLL naming suffix - see README. + * GNUmakefile (DLL_VER): Likewise. + * Wmakefile (DLL_VER): Likewise. + * Bmakefile (DLL_VER): Likewise. + * pthread.dsw (version.rc): Added to MSVS workspace. + +2004-11-20 Boudewijn Dekker + + * pthread_getspecific.c (pthread_getspecific): Check for + invalid (NULL) key argument. + +2004-11-19 Ross Johnson + + * config.h (PTW32_THREAD_ID_REUSE_INCREMENT): Added to allow + building the library for either unique thread IDs like Solaris + or non-unique thread IDs like Linux; allows application developers + to override the library's default insensitivity to some apps + that may not be strictly POSIX compliant. + * version.rc: New resource module to encode version information + within the DLL. + * pthread.h: Added PTW32_VERSION* defines and grouped sections + required by resource compiler together; bulk of file is skipped + if RC_INVOKED. Defined some error numbers and other names for + Borland compiler. + +2004-11-02 Ross Johnson + + * pthread_cond_wait.c (ptw32_cond_wait_cleanup): Lock CV mutex at + start of cleanup handler rather than at the end. + * implement.h (PTW32_THREAD_REUSE_EMPTY): Renamed from *_BOTTOM. + (ptw32_threadReuseBottom): New global variable. + * global.c (ptw32_threadReuseBottom): Declare new variable. + * ptw32_reuse.c (ptw32_reuse): Change reuse LIFO stack to LILO queue + to more evenly distribute use of reusable thread IDs; use renamed + PTW32_THREAD_REUSE_EMPTY. + * ptw32_processTerminate.c (ptw2_processTerminate): Use renamed + PTW32_THREAD_REUSE_EMPTY. + +2004-10-31 Ross Johnson + + * implement.h (PThreadState): Add new state value + 'PThreadStateCancelPending'. + * pthread_testcancel.c (pthread_testcancel): Use new thread + 'PThreadStateCancelPending' state as short cut to avoid entering + kernel space via WaitForSingleObject() call. This was obviated + by user space sema acquisition in sem_wait() and sem_timedwait(), + which are also cancelation points. A call to pthread_testcancel() + was required, which introduced a kernel call, effectively nullifying + any gains made by the user space sem acquisition checks. + * pthread_cancel.c (pthread_cancel): Set new thread + 'PThreadStateCancelPending' state. + +2004-10-29 Ross Johnson + + * implement.h (pthread_t): Renamed to ptw32_thread_t; struct contains + all thread state. + * pthread.h (ptw32_handle_t): New general purpose struct to serve + as a handle for various reusable object IDs - currently only used + by pthread_t; contains a pointer to ptw32_thread_t (thread state) + and a general purpose uint for use as a reuse counter or flags etc. + (pthread_t): typedef'ed to ptw32_handle_t; the uint is the reuse + counter that allows the library to maintain unique POSIX thread IDs. + When the pthread struct reuse stack was introduced, threads would + often acquire an identical ID to a previously destroyed thread. The + same was true for the pre-reuse stack library, by virtue of pthread_t + being the address of the thread struct. The new pthread_t retains + the reuse stack but provides virtually unique thread IDs. + * sem_wait.c (ptw32_sem_wait_cleanup): New routine used for + cancelation cleanup. + * sem_timedwait.c (ptw32_sem_timedwait_cleanup): Likewise. + +2004-10-22 Ross Johnson + + * sem_init.c (sem_init): Introduce a 'lock' element in order to + replace the interlocked operations with conventional serialisation. + This is needed in order to be able to atomically modify the sema + value and perform Win32 sema release operations. Win32 semaphores are + used instead of events in order to support efficient multiple posting. + If the whole modify/release isn't atomic, a race between + sem_timedwait() and sem_post() could result in a release when there is + no waiting semaphore, which would cause too many threads to proceed. + * sem_wait.c (sem_wait): Use new 'lock'element. + * sem_timedwait.c (sem_timedwait): Likewise. + * sem_trywait.c (sem_trywait): Likewise. + * sem_post.c (sem_post): Likewise. + * sem_post_multiple.c (sem_post_multiple): Likewise. + * sem_getvalue.c (sem_getvalue): Likewise. + * ptw32_semwait.c (ptw32_semwait): Likewise. + * sem_destroy.c (sem_destroy): Likewise; also tightened the conditions + for semaphore destruction; in particular, a semaphore will not be + destroyed if it has waiters. + * sem_timedwait.c (sem_timedwait): Added cancel cleanup handler to + restore sema value when cancelled. + * sem_wait.c (sem_wait): Likewise. + +2004-10-21 Ross Johnson + + * pthread_mutex_unlock.c (pthread_mutex_unlock): Must use PulseEvent() + rather than SetEvent() to reset the event if there are no waiters. + +2004-10-19 Ross Johnson + + * sem_init.c (sem_init): New semaphore model based on the same idea + as mutexes, i.e. user space interlocked check to avoid + unnecessarily entering kernel space. Wraps the Win32 semaphore and + keeps it's own counter. Although the motivation to do this has existed + for a long time, credit goes to Alexander Terekhov for providing + the logic. I have deviated slightly from AT's logic to add the waiters + count, which has made the code more complicated by adding cancelation + cleanup. This also appears to have broken the VCE (C++ EH) version of + the library (the same problem as previously reported - see BUGS #2), + only apparently not fixable using the usual workaround, nor by turning + all optimisation off. The GCE version works fine, so it is presumed to + be a bug in MSVC++ 6.0. The cancelation exception is thrown and caught + correctly, but the cleanup class destructor is never called. The failing + test is tests\semaphore4.c. + * sem_wait.c (sem_wait): Implemented user space check model. + * sem_post.c (sem_post): Likewise. + * sem_trywait.c (sem_trywait): Likewise. + * sem_timedwait.c (sem_timedwait): Likewise. + * sem_post_multiple.c (sem_post_multiple): Likewise. + * sem_getvalue.c (sem_getvalue): Likewise. + * ptw32_semwait.c (ptw32_semwait): Likewise. + * implement.h (sem_t_): Add counter element. + +2004-10-15 Ross Johnson + + * implement.h (pthread_mutex_t_): Use an event in place of + the POSIX semaphore. + * pthread_mutex_init.c: Create the event; remove semaphore init. + * pthread_mutex_destroy.c: Delete the event. + * pthread_mutex_lock.c: Replace the semaphore wait with the event wait. + * pthread_mutex_trylock.c: Likewise. + * pthread_mutex_timedlock.c: Likewise. + * pthread_mutex_unlock.c: Set the event. + +2004-10-14 Ross Johnson + + * pthread_mutex_lock.c (pthread_mutex_lock): New algorithm using + Terekhov's xchg based variation of Drepper's cmpxchg model. + Theoretically, xchg uses fewer clock cycles than cmpxchg (using IA-32 + as a reference), however, in my opinion bus locking dominates the + equation on smp systems, so the model with the least number of bus + lock operations in the execution path should win, which is Terekhov's + variant. On IA-32 uni-processor systems, it's faster to use the + CMPXCHG instruction without locking the bus than to use the XCHG + instruction, which always locks the bus. This makes the two variants + equal for the non-contended lock (fast lane) execution path on up + IA-32. Testing shows that the xchg variant is faster on up IA-32 as + well if the test forces higher lock contention frequency, even though + kernel calls should be dominating the times (on up IA-32, both + variants used CMPXCHG instructions and neither locked the bus). + * pthread_mutex_timedlock.c pthread_mutex_timedlock(): Similarly. + * pthread_mutex_trylock.c (pthread_mutex_trylock): Similarly. + * pthread_mutex_unlock.c (pthread_mutex_unlock): Similarly. + * ptw32_InterlockedCompareExchange.c (ptw32_InterlockExchange): New + function. + (PTW32_INTERLOCKED_EXCHANGE): Sets up macro to use inlined + ptw32_InterlockedExchange. + * implement.h (PTW32_INTERLOCKED_EXCHANGE): Set default to + InterlockedExchange(). + * Makefile: Building using /Ob2 so that asm sections within inline + functions are inlined. + +2004-10-08 Ross Johnson + + * pthread_mutex_destroy.c (pthread_mutex_destroy): Critical Section + element is no longer required. + * pthread_mutex_init.c (pthread_mutex_init): Likewise. + * pthread_mutex_lock.c (pthread_mutex_lock): New algorithm following + Drepper's paper at http://people.redhat.com/drepper/futex.pdf, but + using the existing semaphore in place of the futex described in the + paper. Idea suggested by Alexander Terekhov - see: + http://sources.redhat.com/ml/pthreads-win32/2003/msg00108.html + * pthread_mutex_timedlock.c pthread_mutex_timedlock(): Similarly. + * pthread_mutex_trylock.c (pthread_mutex_trylock): Similarly. + * pthread_mutex_unlock.c (pthread_mutex_unlock): Similarly. + * pthread_barrier_wait.c (pthread_barrier_wait): Use inlined version + of InterlockedCompareExchange() if possible - determined at + build-time. + * pthread_spin_destroy.c pthread_spin_destroy(): Likewise. + * pthread_spin_lock.c pthread_spin_lock():Likewise. + * pthread_spin_trylock.c (pthread_spin_trylock):Likewise. + * pthread_spin_unlock.c (pthread_spin_unlock):Likewise. + * ptw32_InterlockedCompareExchange.c: Sets up macro for inlined use. + * implement.h (pthread_mutex_t_): Remove Critical Section element. + (PTW32_INTERLOCKED_COMPARE_EXCHANGE): Set to default non-inlined + version of InterlockedCompareExchange(). + * private.c: Include ptw32_InterlockedCompareExchange.c first for + inlining. + * GNUmakefile: Add commandline option to use inlined + InterlockedCompareExchange(). + * Makefile: Likewise. + +2004-09-27 Ross Johnson + + * pthread_mutex_lock.c (pthread_mutex_lock): Separate + PTHREAD_MUTEX_NORMAL logic since we do not need to keep or check some + state required by other mutex types; do not check mutex pointer arg + for validity - leave this to the system since we are only checking + for NULL pointers. This should improve speed of NORMAL mutexes and + marginally improve speed of other type. + * pthread_mutex_trylock.c (pthread_mutex_trylock): Likewise. + * pthread_mutex_unlock.c (pthread_mutex_unlock): Likewise; also avoid + entering the critical section for the no-waiters case, with approx. + 30% reduction in lock/unlock overhead for this case. + * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Likewise; also + no longer keeps mutex if post-timeout second attempt succeeds - this + will assist applications that wish to impose strict lock deadlines, + rather than simply to escape from frozen locks. + +2004-09-09 Tristan Savatier + * pthread.h (struct pthread_once_t_): Qualify the 'done' element + as 'volatile'. + * pthread_once.c: Concerned about possible race condition, + specifically on MPU systems re concurrent access to multibyte types. + [Maintainer's note: the race condition is harmless on SPU systems + and only a problem on MPU systems if concurrent access results in an + exception (presumably generated by a hardware interrupt). There are + other instances of similar harmless race conditions that have not + been identified as issues.] + +2004-09-09 Ross Johnson + + * pthread.h: Declare additional types as volatile. + +2004-08-27 Ross Johnson + + * pthread_barrier_wait.c (pthread_barrier_wait): Remove excessive code + by substituting the internal non-cancelable version of sem_wait + (ptw32_semwait). + +2004-08-25 Ross Johnson + + * pthread_join.c (pthread_join): Rewrite and re-order the conditional + tests in an attempt to improve efficiency and remove a race + condition. + +2004-08-23 Ross Johnson + + * create.c (pthread_create): Don't create a thread if the thread + id pointer location (first arg) is inaccessible. A memory + protection fault will result if the thread id arg isn't an accessible + location. This is consistent with GNU/Linux but different to + Solaris or MKS (and possibly others), which accept NULL as meaning + 'don't return the created thread's ID'. Applications that run + using pthreads-win32 will run on all other POSIX threads + implementations, at least w.r.t. this feature. + + It was decided not to copy the Solaris et al behaviour because, + although it would have simplified some application porting (but only + from Solaris to Windows), the feature is not technically necessary, + and the alternative segfault behaviour helps avoid buggy application + code. + +2004-07-01 Anuj Goyal + + * builddmc.bat: New; Windows bat file to build the library. + * config.h (__DMC__): Support for Digital Mars compiler. + * create.c (__DMC__): Likewise. + * pthread_exit.c (__DMC__): Likewise. + * pthread_join.c (__DMC__): Likewise. + * ptw32_threadDestroy.c (__DMC__): Likewise. + * ptw32_threadStart.c (__DMC__): Likewise. + * ptw32_throw.c (__DMC__): Likewise. + +2004-06-29 Anuj Goyal + + * pthread.h (__DMC__): Initial support for Digital Mars compiler. + +2004-06-29 Will Bryant + + * README.Borland: New; description of Borland changes. + * Bmakefile: New makefile for the Borland make utility. + * ptw32_InterlockedCompareExchange.c: + Add Borland compatible asm code. + +2004-06-26 Jason Bard + + * pthread.h (HAVE_STRUCT_TIMESPEC): If undefined, define it + to avoid timespec struct redefined errors elsewhere in an + application. + +2004-06-21 Ross Johnson + + * pthread.h (PTHREAD_RECURSIVE_MUTEX_INITIALIZER): Mutex + initialiser added for compatibility with Linux threads and + others; currently not included in SUSV3. + * pthread.h (PTHREAD_ERRORCHECK_MUTEX_INITIALIZER): Likewise. + * pthread.h (PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP): Likewise. + * pthread.h (PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP): Likewise. + + * ptw32_mutex_check_need_init.c (ptw32_mutex_check_need_init): + Add new initialisers. + + * pthread_mutex_lock.c (pthread_mutex_lock): Check for new + initialisers. + * pthread_mutex_trylock.c (pthread_mutex_trylock): Likewise. + * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Likewise. + * pthread_mutex_unlock.c (pthread_mutex_unlock): Likewise. + * pthread_mutex_destroy.c (pthread_mutex_destroy): Likewise. + +2004-05-20 Ross Johnson + + * README.NONPORTABLE: Document pthread_win32_test_features_np(). + * FAQ: Update various answers. + +2004-05-19 Ross Johnson + + * Makefile: Don't define _WIN32_WINNT on compiler command line. + * GNUmakefile: Likewise. + +2004-05-16 Ross Johnson + + * pthread_cancel.c (pthread_cancel): Adapted to use auto-detected + QueueUserAPCEx features at run-time. + (ptw32_RegisterCancelation): Drop in replacement for QueueUserAPCEx() + if it can't be used. Provides older style non-preemptive async + cancelation. + * pthread_win32_attach_detach_np.c (pthread_win32_attach_np): + Auto-detect quserex.dll and the availability of alertdrv.sys; + initialise and close on process attach/detach. + * global.c (ptw32_register_cancelation): Pointer to either + QueueUserAPCEx() or ptw32_RegisterCancelation() depending on + availability. QueueUserAPCEx makes pre-emptive async cancelation + possible. + * implement.h: Add definitions and prototypes related to QueueUserAPC. + +2004-05-16 Panagiotis E. Hadjidoukas + + * QueueUserAPCEx (separate contributed package): Provides preemptive + APC feature. + * pthread_cancel.c (pthread_cancel): Initial integration of + QueueUserAPCEx into pthreads-win32 to provide true pre-emptive + async cancelation of threads, including blocked threads. + +2004-05-06 Makoto Kato + + * pthread.h (DWORD_PTR): Define typedef for older MSVC. + * pthread_cancel.c (AMD64): Add architecture specific Context register. + * ptw32_getprocessors.c: Use correct types (DWORD_PTR) for mask + variables. + +2004-04-06 P. van Bruggen + + * ptw32_threadDestroy.c: Destroy threadLock mutex to + close a memory leak. + +2004-02-13 Gustav Hallberg + + * pthread_equal.c: Remove redundant equality logic. + +2003-12-10 Philippe Di Cristo + + * sem_timedwait.c (sem_timedwait): Fix timeout calculations. + +2003-10-20 Alexander Terekhov + + * pthread_mutex_timedlock.c (ptw32_semwait): Move to individual module. + * ptw32_semwait.c: New module. + * pthread_cond_wait.c (ptw32_cond_wait_cleanup): Replace cancelable + sem_wait() call with non-cancelable ptw32_semwait() call. + * pthread.c (private.c): Re-order for inlining. GNU C warned that + function ptw32_semwait() was defined 'inline' after it was called. + * pthread_cond_signal.c (ptw32_cond_unblock): Likewise. + * pthread_delay_np.c: Disable Watcom warning with comment. + * *.c (process.h): Remove include from .c files. This is conditionally + included by the common project include files. + +2003-10-20 James Ewing + + * ptw32_getprocessors.c: Some Win32 environments don't have + GetProcessAffinityMask(), so always return CPU count = 1 for them. + * config.h (NEED_PROCESSOR_AFFINITY_MASK): Define for WinCE. + +2003-10-15 Ross Johnson + + * Re-indented all .c files using default GNU style to remove assorted + editor ugliness (used GNU indent utility in default style). + +2003-10-15 Alex Blanco + + * sem_init.c (sem_init): Would call CreateSemaphore even if the sema + struct calloc failed; was not freeing calloced memory if either + CreateSemaphore or CreateEvent failed. + +2003-10-14 Ross Johnson + + * pthread.h: Add Watcom compiler compatibility. Esssentially just add + the cdecl attribute to all exposed function prototypes so that Watcom + generates function call code compatible with non-Watcom built libraries. + By default, Watcom uses registers to pass function args if possible rather + than pushing to stack. + * semaphore.h: Likewise. + * sched.h: Likewise. + * pthread_cond_wait.c (ptw32_cond_wait_cleanup): Define with cdecl attribute + for Watcom compatibility. This routine is called via pthread_cleanup_push so + it had to match function arg definition. + * Wmakefile: New makefile for Watcom builds. + +2003-09-14 Ross Johnson + + * pthread_setschedparam.c (pthread_setschedparam): Attempt to map + all priority levels between max and min (as returned by + sched_get_priority_min/max) to reasonable Win32 priority levels - i.e. + levels between THREAD_PRIORITY_LOWEST/IDLE to THREAD_PRIORITY_LOWEST and + between THREAD_PRIORITY_HIGHEST/TIME_CRITICAL to THREAD_PRIORITY_HIGHEST + while others remain unchanged; record specified thread priority level + for return by pthread_getschedparam. + + Note that, previously, specified levels not matching Win32 priority levels + would silently leave the current thread priority unaltered. + + * pthread_getschedparam.c (pthread_getschedparam): Return the priority + level specified by the latest pthread_setschedparam or pthread_create rather + than the actual running thread priority as returned by GetThreadPriority - as + required by POSIX. I.e. temporary or adjusted actual priority levels are not + returned by this routine. + + * pthread_create.c (pthread_create): For priority levels specified via + pthread attributes, attempt to map all priority levels between max and + min (as returned by sched_get_priority_min/max) to reasonable Win32 + priority levels; record priority level given via attributes, or + inherited from parent thread, for later return by pthread_getschedparam. + + * ptw32_new.c (ptw32_new): Initialise pthread_t_ sched_priority element. + + * pthread_self.c (pthread_self): Set newly created implicit POSIX thread + sched_priority to Win32 thread's current actual priority. Temporarily + altered priorities can't be avoided in this case. + + * implement.h (struct pthread_t_): Add new sched_priority element. + +2003-09-12 Ross Johnson + + * sched_get_priority_min.c (sched_get_priority_min): On error should return -1 + with errno set. + * sched_get_priority_max.c (sched_get_priority_max): Likewise. + +2003-09-03 Ross Johnson + + * w32_cancelableWait.c (ptw32_cancelable_wait): Allow cancelation + of implicit POSIX threads as well. + +2003-09-02 Ross Johnson + + * pthread_win32_attach_detach_np.c (pthread_win32_thread_detach_np): + Add comment. + + * pthread_exit.c (pthread_exit): Fix to recycle the POSIX thread handle in + addition to calling user TSD destructors. Move the implicit POSIX thread exit + handling to ptw32_throw to centralise the logic. + + * ptw32_throw.c (ptw32_throw): Implicit POSIX threads have no point + to jump or throw to, so cleanup and exit the thread here in this case. For + processes using the C runtime, the exit code will be set to the POSIX + reason for the throw (i.e. PTHREAD_CANCEL or the value given to pthread_exit). + Note that pthread_exit() already had similar logic, which has been moved to + here. + + * ptw32_threadDestroy.c (ptw32_threadDestroy): Don't close the Win32 handle + of implicit POSIX threads - expect this to be done by Win32? + +2003-09-01 Ross Johnson + + * pthread_self.c (pthread_self): The newly aquired pthread_t must be + assigned to the reuse stack, not freed, if the routine fails somehow. + +2003-08-13 Ross Johnson + + * pthread_getschedparam.c (pthread_getschedparam): An invalid thread ID + parameter was returning an incorrect error value; now uses a more exhaustive + check for validity. + + * pthread_setschedparam.c (pthread_setschedparam): Likewise. + + * pthread_join.c (pthread_join): Now uses a more exhaustive + check for validity. + + * pthread_detach.c (pthread_detach): Likewise. + + * pthread_cancel.c (pthread_cancel): Likewise. + + * ptw32_threadDestroy.c (ptw32_threadDestroy): pthread_t structs are + never freed - push them onto a stack for reuse. + + * ptw32_new.c (ptw32_new): Check for reusable pthread_t before dynamically + allocating new memory for the struct. + + * pthread_kill.c (pthread_kill): New file; new routine; takes only a zero + signal arg so that applications can check the thread arg for validity; checks + that the underlying Win32 thread HANDLE is valid. + + * pthread.h (pthread_kill): Add prototype. + + * ptw32_reuse.c (ptw32_threadReusePop): New file; new routine; pop a + pthread_t off the reuse stack. pthread_t_ structs that have been destroyed, i.e. + have exited detached or have been joined, are cleaned up and put onto a reuse + stack. Consequently, thread IDs are no longer freed once calloced. The library + will attempt to get a struct off this stack before asking the system to alloc + new memory when creating threads. The stack is guarded by a global mutex. + (ptw32_threadReusePush): New routine; push a pthread_t onto the reuse stack. + + * implement.h (ptw32_threadReusePush): Add new prototype. + (ptw32_threadReusePop): Likewise. + (pthread_t): Add new element. + + * ptw32_processTerminate.c (ptw32_processTerminate): Delete the thread + reuse lock; free all thread ID structs on the thread reuse stack. + + * ptw32_processInitialize.c (ptw32_processInitialize): Initialise the + thread reuse lock. + +2003-07-19 Ross Johnson + + * GNUmakefile: modified to work under MsysDTK environment. + * pthread_spin_lock.c (pthread_spin_lock): Check for NULL arg. + * pthread_spin_unlock.c (pthread_spin_unlock): Likewise. + * pthread_spin_trylock.c (pthread_spin_trylock): Likewise; + fix incorrect pointer value if lock is dynamically initialised by + this function. + * sem_init.c (sem_init): Initialise sem_t value to quell compiler warning. + * sem_destroy.c (sem_destroy): Likewise. + * ptw32_threadStart.c (non-MSVC code sections): Include rather + than old-style ; fix all std:: namespace entities such as + std::terminate_handler instances and associated methods. + * ptw32_callUserDestroyRoutines.c (non-MSVC code sections): Likewise. + +2003-06-24 Piet van Bruggen + + * pthread_spin_destroy.c (pthread_spin_destroy): Was not freeing the + spinlock struct. + +2003-06-22 Nicolas Barry + + * pthread_mutex_destroy.c (pthread_mutex_destroy): When called + with a recursive mutex that was locked by the current thread, the + function was failing with a success return code. + +2003-05-15 Steven Reddie + + * pthread_win32_attach_detach_np.c (pthread_win32_process_detach_np): + NULLify ptw32_selfThreadKey after the thread is destroyed, otherwise + destructors calling pthreads routines might resurrect it again, creating + memory leaks. Call the underlying Win32 Tls routine directly rather than + pthread_setspecific(). + (pthread_win32_thread_detach_np): Likewise. + +2003-05-14 Viv + + * pthread.dsp: Change /MT compile flag to /MD. + +2003-03-04 Alexander Terekhov + + * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Fix failure to + set ownership of mutex on second grab after abstime timeout. + - bug reported by Robert Strycek + +2002-12-17 Thomas Pfaff + + * pthread_mutex_lock.c (ptw32_semwait): New static routine to provide + a non-cancelable sem_wait() function. This is consistent with the + way that pthread_mutex_timedlock.c does it. + (pthread_mutex_lock): Use ptw32_semwait() instead of sem_wait(). + +2002-12-11 Thomas Pfaff + + * pthread_mutex_trylock.c: Should return EBUSY rather than EDEADLK. + * pthread_mutex_destroy.c: Remove redundant ownership test (the + trylock call does this for us); do not destroy a recursively locked + mutex. + +2002-09-20 Michael Johnson + + * pthread_cond_destroy.c (pthread_cond_destroy): + When two different threads exist, and one is attempting to + destroy a condition variable while the other is attempting to + initialize a condition variable that was created with + PTHREAD_COND_INITIALIZER, a deadlock can occur. Shrink + the ptw32_cond_list_lock critical section to fix it. + +2002-07-31 Ross Johnson + + * ptw32_threadStart.c (ptw32_threadStart): Thread cancelLock + destruction moved to ptw32_threadDestroy(). + + * ptw32_threadDestroy.c (ptw32_threadDestroy): Destroy + the thread's cancelLock. Moved here from ptw32_threadStart.c + to cleanup implicit threads as well. + +2002-07-30 Alexander Terekhov + + * pthread_cond_wait.c (ptw32_cond_wait_cleanup): + Remove code designed to avoid/prevent spurious wakeup + problems. It is believed that the sem_timedwait() call + is consuming a CV signal that it shouldn't and this is + breaking the avoidance logic. + +2002-07-30 Ross Johnson + + * sem_timedwait.c (sem_timedwait): Tighten checks for + unreasonable abstime values - that would result in + unexpected timeout values. + + * w32_CancelableWait.c (ptw32_cancelable_wait): + Tighten up return value checking and add comments. + + +2002-06-08 Ross Johnson + + * sem_getvalue.c (sem_getvalue): Now returns a value for the + NEED_SEM version (i.e. earlier versions of WinCE). + + +2002-06-04 Rob Fanner + + * sem_getvalue.c (sem_getvalue): The Johnson M. Hart + approach didn't work - we are forced to take an + intrusive approach. We try to decrement the sema + and then immediately release it again to get the + value. There is a small probability that this may + block other threads, but only momentarily. + +2002-06-03 Ross Johnson + + * sem_init.c (sem_init): Initialise Win32 semaphores + to _POSIX_SEM_VALUE_MAX (which this implementation + defines in pthread.h) so that sem_getvalue() can use + the trick described in the comments in sem_getvalue(). + * pthread.h (_POSIX_SEM_VALUE_MAX): Defined. + (_POSIX_SEM_NSEMS_MAX): Defined - not used but may be + useful for source code portability. + +2002-06-03 Rob Fanner + + * sem_getvalue.c (sem_getvalue): Did not work on NT. + Use approach suggested by Johnson M. Hart in his book + "Win32 System Programming". + +2002-02-28 Ross Johnson + + * errno.c: Compiler directive was incorrectly including code. + * pthread.h: Conditionally added some #defines from config.h + needed when not building the library. e.g. NEED_ERRNO, NEED_SEM. + (PTW32_DLLPORT): Now only defined if _DLL defined. + (_errno): Compiler directive was incorrectly including prototype. + * sched.h: Conditionally added some #defines from config.h + needed when not building the library. + * semaphore.h: Replace an instance of NEED_SEM that should + have been NEED_ERRNO. This change currently has nil effect. + + * GNUmakefile: Correct some recent changes. + + * Makefile: Add rule to generate pre-processor output. + +2002-02-23 Ross Johnson + + * pthread_rwlock_timedrdlock.c: New - untested. + * pthread_rwlock_timedwrlock.c: New - untested. + + * Testsuite passed (except known MSVC++ problems) + + * pthread_cond_destroy.c: Expand the time change + critical section to solve deadlock problem. + + * pthread.c: Add all remaining C modules. + * pthread.h: Use dllexport/dllimport attributes on functions + to avoid using pthread.def. + * sched.h: Likewise. + * semaphore.h: Likewise. + * GNUmakefile: Add new targets for single translation + unit build to maximise inlining potential; generate + pthread.def automatically. + * Makefile: Likewise, but no longer uses pthread.def. + +2002-02-20 Ross Johnson + + * pthread_cond_destroy.c (pthread_cond_destroy): + Enter the time change critical section earlier. + +2002-02-17 Ross Johnson + + * nonportable.c (pthread_delay_np): Make a true + cancelation point. Deferred cancels will interrupt the + wait. + +2002-02-07 Ross Johnson + + Reduced name space pollution. + ----------------------------- + When the appropriate symbols are defined, the headers + will restrict the definitions of new names. In particular, + it must be possible to NOT include the + header and related definitions with some combination + of symbol definitions. Secondly, it should be possible + that additional definitions should be limited to POSIX + compliant symbols by the definition of appropriate symbols. + + * pthread.h: POSIX conditionals. + * sched.h: POSIX conditionals. + * semaphore.h: POSIX conditionals. + + * semaphore.c: Included . + (sem_init): Changed magic 0x7FFFFFFFL to INT_MAX. + (sem_getvalue): Trial version. + + Reduce executable size. + ----------------------- + When linking with the static library, only those + routines actually called, either directly or indirectly + should be included. + + [Gcc has the -ffunction-segments option to do this but MSVC + doesn't have this feature as far as I can determine. Other + compilers are undetermined as well. - rpj] + + * semaphore.c: All routines are now in separate compilation units; + This file is used to congregate the separate modules for + potential inline optimisation and backward build compatibility. + * sem_close.c: Separated routine from semaphore.c. + * ptw32_decrease_semaphore.c: Likewise. + * sem_destroy.c: Likewise. + * sem_getvalue.c: Likewise. + * ptw32_increase_semaphore.c: Likewise. + * sem_init.c: Likewise. + * sem_open.c: Likewise. + * sem_post.c: Likewise. + * sem_post_multiple.c: Likewise. + * sem_timedwait.c: Likewise. + * sem_trywait.c: Likewise. + * sem_unlink.c: Likewise. + * sem_wait.c: Likewise. + +2002-02-04 Ross Johnson + + The following extends the idea above to the rest of pthreads-win32 - rpj + + * attr.c: All routines are now in separate compilation units; + This file is used to congregate the separate modules for + potential inline optimisation and backward build compatibility. + * pthread_attr_destroy.c: Separated routine from attr.c. + * pthread_attr_getdetachstate.c: Likewise. + * pthread_attr_getscope.c: Likewise. + * pthread_attr_getstackaddr.c: Likewise. + * pthread_attr_getstacksize.c: Likewise. + * pthread_attr_init.c: Likewise. + * pthread_attr_is_attr.c: Likewise. + * pthread_attr_setdetachstate.c: Likewise. + * pthread_attr_setscope.c: Likewise. + * pthread_attr_setstackaddr.c: Likewise. + * pthread_attr_setstacksize.c: Likewise. + + * pthread.c: Agregation of agregate modules for super-inlineability. + +2002-02-02 Ross Johnson + + * cancel.c: Rearranged some code and introduced checks + to disable cancelation at the start of a thread's cancelation + run to prevent double cancelation. The main problem + arises if a thread is canceling and then receives a subsequent + async cancel request. + * private.c: Likewise. + * condvar.c: Place pragmas around cleanup_push/pop to turn + off inline optimisation (/Obn where n>0 - MSVC only). Various + optimisation switches in MSVC turn this on, which interferes with + the way that cleanup handlers are run in C++ EH and SEH + code. Application code compiled with inline optimisation must + also wrap cleanup_push/pop blocks with the pragmas, e.g. + #pragma inline_depth(0) + pthread_cleanup_push(...) + ... + pthread_cleanup_pop(...) + #pragma inline_depth(8) + * rwlock.c: Likewise. + * mutex.c: Remove attempts to inline some functions. + * signal.c: Modify misleading comment. + +2002-02-01 Ross Johnson + + * semaphore.c (sem_trywait): Fix missing errno return + for systems that define NEED_SEM (e.g. early WinCE). + * mutex.c (pthread_mutex_timedlock): Return ENOTSUP + for systems that define NEED_SEM since they don't + have sem_trywait(). + +2002-01-27 Ross Johnson + + * mutex.c (pthread_mutex_timedlock): New function suggested by + Alexander Terekhov. The logic required to implement this + properly came from Alexander, with some collaboration + with Thomas Pfaff. + (pthread_mutex_unlock): Wrap the waiters check and sema + post in a critical section to prevent a race with + pthread_mutex_timedlock. + (ptw32_timed_semwait): New function; + returns a special result if the absolute timeout parameter + represents a time already passed when called; used by + pthread_mutex_timedwait(). Have deliberately not reused + the name "ptw32_sem_timedwait" because they are not the same + routine. + * condvar.c (ptw32_cond_timedwait): Use the new sem_timedwait() + instead of ptw32_sem_timedwait(), which now has a different + function. See previous. + * implement.h: Remove prototype for ptw32_sem_timedwait. + See next. + (pthread_mutex_t_): Add critical section element for access + to lock_idx during mutex post-timeout processing. + * semaphore.h (sem_timedwait): See next. + * semaphore.c (sem_timedwait): See next. + * private.c (ptw32_sem_timedwait): Move to semaphore.c + and rename as sem_timedwait(). + +2002-01-18 Ross Johnson + + * sync.c (pthread_join): Was getting the exit code from the + calling thread rather than the joined thread if + defined(__MINGW32__) && !defined(__MSVCRT__). + +2002-01-15 Ross Johnson + + * pthread.h: Unless the build explicitly defines __CLEANUP_SEH, + __CLEANUP_CXX, or __CLEANUP_C, then the build defaults to + __CLEANUP_C style cleanup. This style uses setjmp/longjmp + in the cancelation and thread exit implementations and therefore + won't do stack unwinding if linked to applications that have it + (e.g. C++ apps). This is currently consistent with most/all + commercial Unix POSIX threads implementations. + + * spin.c (pthread_spin_init): Edit renamed function call. + * nonportable.c (pthread_num_processors_np): New. + (pthread_getprocessors_np): Renamed to ptw32_getprocessors + and moved to private.c. + * private.c (pthread_getprocessors): Moved here from + nonportable.c. + * pthread.def (pthread_getprocessors_np): Removed + from export list. + + * rwlock.c (pthread_rwlockattr_init): New. + (pthread_rwlockattr_destroy): New. + (pthread_rwlockattr_getpshared): New. + (pthread_rwlockattr_setpshared): New. + +2002-01-14 Ross Johnson + + * attr.c (pthread_attr_setscope): Fix struct pointer + indirection error introduced 2002-01-04. + (pthread_attr_getscope): Likewise. + +2002-01-12 Ross Johnson + + * pthread.dsp (SOURCE): Add missing source files. + +2002-01-08 Ross Johnson + + * mutex.c (pthread_mutex_trylock): use + ptw32_interlocked_compare_exchange function pointer + rather than ptw32_InterlockedCompareExchange() directly + to retain portability to non-iX86 processors, + e.g. WinCE etc. The pointer will point to the native + OS version of InterlockedCompareExchange() if the + OS supports it (see ChangeLog entry of 2001-10-17). + +2002-01-07 Thomas Pfaff , Alexander Terekhov + + * mutex.c (pthread_mutex_init): Remove critical + section calls. + (pthread_mutex_destroy): Likewise. + (pthread_mutex_unlock): Likewise. + (pthread_mutex_trylock): Likewise; uses + ptw32_InterlockedCompareExchange() to avoid need for + critical section; library is no longer i386 compatible; + recursive mutexes now increment the lock count rather + than return EBUSY; errorcheck mutexes return EDEADLCK + rather than EBUSY. This behaviour is consistent with the + Solaris pthreads implementation. + * implement.h (pthread_mutex_t_): Remove critical + section element - no longer needed. + + +2002-01-04 Ross Johnson + + * attr.c (pthread_attr_setscope): Add more error + checking and actually store the scope value even + though it's not really necessary. + (pthread_attr_getscope): Return stored value. + * implement.h (pthread_attr_t_): Add new scope element. + * ANNOUNCE: Fix out of date comment next to + pthread_attr_setscope in conformance section. + +2001-12-21 Alexander Terekhov + + * mutex.c (pthread_mutex_lock): Decrementing lock_idx was + not thread-safe. + (pthread_mutex_trylock): Likewise. + +2001-10-26 prionx@juno.com + + * semaphore.c (sem_init): Fix typo and missing bracket + in conditionally compiled code. Only older versions of + WinCE require this code, hence it doesn't normally get + tested; somehow when sem_t reverted to an opaque struct + the calloc NULL check was left in the conditionally included + section. + (sem_destroy): Likewise, the calloced sem_t wasn't being freed. + +2001-10-25 Ross Johnson + + * GNUmakefile (libwsock32): Add to linker flags for + WSAGetLastError() and WSASetLastError(). + * Makefile (wsock32.lib): Likewise. + * create.c: Minor mostly inert changes. + * implement.h (PTW32_MAX): Move into here and renamed + from sched.h. + (PTW32_MIN): Likewise. + * GNUmakefile (TEST_ICE): Define if testing internal + implementation of InterlockedCompareExchange. + * Makefile (TEST_ICE): Likewise. + * private.c (TEST_ICE): Likewise. + +2001-10-24 Ross Johnson + + * attr.c (pthread_attr_setstacksize): Quell warning + from LCC by conditionally compiling the stacksize + validity check. LCC correctly warns that the condition + (stacksize < PTHREAD_STACK_MIN) is suspicious + because STACK_MIN is 0 and stacksize is of type + size_t (or unsigned int). + +2001-10-17 Ross Johnson + + * barrier.c: Move _LONG and _LPLONG defines into + implement.h; rename to PTW32_INTERLOCKED_LONG and + PTW32_INTERLOCKED_LPLONG respectively. + * spin.c: Likewise; ptw32_interlocked_compare_exchange used + in place of InterlockedCompareExchange directly. + * global.c (ptw32_interlocked_compare_exchange): Add + prototype for this new routine pointer to be used when + InterlockedCompareExchange isn't supported by Windows. + * nonportable.c (pthread_win32_process_attach_np): Check for + support of InterlockedCompareExchange in kernel32 and assign its + address to ptw32_interlocked_compare_exchange if it exists, or + our own ix86 specific implementation ptw32_InterlockedCompareExchange. + *private.c (ptw32_InterlockedCompareExchange): An + implementation of InterlockedCompareExchange() which is + specific to ix86; written directly in assembler for either + MSVC or GNU C; needed because Windows 95 doesn't support + InterlockedCompareExchange(). + + * sched.c (sched_get_priority_min): Extend to return + THREAD_PRIORITY_IDLE. + (sched_get_priority_max): Extend to return + THREAD_PRIORITY_CRITICAL. + +2001-10-15 Ross Johnson + + * spin.c (pthread_spin_lock): PTHREAD_SPINLOCK_INITIALIZER + was causing a program fault. + (pthread_spin_init): Could have alloced memory + without freeing under some error conditions. + + * mutex.c (pthread_mutex_init): Move memory + allocation of mutex struct after checking for + PROCESS_SHARED. + +2001-10-12 Ross Johnson + + * spin.c (pthread_spin_unlock): Was not returning + EPERM if the spinlock was not locked, for multi CPU + machines. + +2001-10-08 Ross Johnson + + * spin.c (pthread_spin_trylock): Was not returning + EBUSY for multi CPU machines. + +2001-08-24 Ross Johnson + + * condvar.c (pthread_cond_destroy): Remove cv element + that is no longer used. + * implement.h: Likewise. + +2001-08-23 Alexander Terekhov + + * condvar.c (pthread_cond_destroy): fix bug with + respect to deadlock in the case of concurrent + _destroy/_unblock; a condition variable can be destroyed + immediately after all the threads that are blocked on + it are awakened. + +2001-08-23 Phil Frisbie, Jr. + + * tsd.c (pthread_getspecific): Preserve the last + winsock error [from WSAGetLastError()]. + +2001-07-18 Scott McCaskill + + * mutex.c (pthread_mutexattr_init): Return ENOMEM + immediately and don't dereference the NULL pointer + if calloc fails. + (pthread_mutexattr_getpshared): Don't dereference + a pointer that is possibly NULL. + * barrier.c (pthread_barrierattr_init): Likewise + (pthread_barrierattr_getpshared): Don't dereference + a pointer that is possibly NULL. + * condvar.c (pthread_condattr_getpshared): Don't dereference + a pointer that is possibly NULL. + +2001-07-15 Ross Johnson + + * rwlock.c (pthread_rwlock_wrlock): Is allowed to be + a cancelation point; re-enable deferred cancelability + around the CV call. + +2001-07-10 Ross Johnson + + * barrier.c: Still more revamping. The exclusive access + mutex isn't really needed so it has been removed and replaced + by an InterlockedDecrement(). nSerial has been removed. + iStep is now dual-purpose. The process shared attribute + is now stored in the barrier struct. + * implement.h (pthread_barrier_t_): Lost some/gained one + elements. + * private.c (ptw32_threadStart): Removed some comments. + +2001-07-10 Ross Johnson + + * barrier.c: Revamped to fix the race condition. Two alternating + semaphores are used instead of the PulseEvent. Also improved + overall throughput by returning PTHREAD_BARRIER_SERIAL_THREAD + to the first waking thread. + * implement.h (pthread_barrier_t_): Revamped. + +2001-07-09 Ross Johnson + + * barrier.c: Fix several bugs in all routines. Now passes + tests/barrier5.c which is fairly rigorous. There is still + a non-optimal work-around for a race condition between + the barrier breeched event signal and event wait. Basically + the last (signalling) thread to hit the barrier yields + to allow any other threads, which may have lost the race, + to complete. + +2001-07-07 Ross Johnson + + * barrier.c: Changed synchronisation mechanism to a + Win32 manual reset Event and use PulseEvent to signal + waiting threads. If the implementation continued to use + a semaphore it would require a second semaphore and + some management to use them alternately as barriers. A + single semaphore allows threads to cascade from one barrier + through the next, leaving some threads blocked at the first. + * implement.h (pthread_barrier_t_): As per above. + * general: Made a number of other routines inlinable. + +2001-07-07 Ross Johnson + + * spin.c: Revamped and working; included static initialiser. + Now beta level. + * barrier.c: Likewise. + * condvar.c: Macro constant change; inline auto init routine. + * mutex.c: Likewise. + * rwlock.c: Likewise. + * private.c: Add support for spinlock initialiser. + * global.c: Likewise. + * implement.h: Likewise. + * pthread.h (PTHREAD_SPINLOCK_INITIALIZER): Fix typo. + +2001-07-05 Ross Johnson + + * barrier.c: Remove static initialisation - irrelevent + for this object. + * pthread.h (PTHREAD_BARRIER_INITIALIZER): Removed. + * rwlock.c (pthread_rwlock_wrlock): This routine is + not a cancelation point - disable deferred + cancelation around call to pthread_cond_wait(). + +2001-07-05 Ross Johnson + + * spin.c: New module implementing spin locks. + * barrier.c: New module implementing barriers. + * pthread.h (_POSIX_SPIN_LOCKS): defined. + (_POSIX_BARRIERS): Defined. + (pthread_spin_*): Defined. + (pthread_barrier*): Defined. + (PTHREAD_BARRIER_SERIAL_THREAD): Defined. + * implement.h (pthread_spinlock_t_): Defined. + (pthread_barrier_t_): Defined. + (pthread_barrierattr_t_): Defined. + + * mutex.c (pthread_mutex_lock): Return with the error + if an auto-initialiser initialisation fails. + + * nonportable.c (pthread_getprocessors_np): New; gets the + number of available processors for the current process. + +2001-07-03 Ross Johnson + + * pthread.h (_POSIX_READER_WRITER_LOCKS): Define it + if not already defined. + +2001-07-01 Alexander Terekhov + + * condvar.c: Fixed lost signal bug reported by Timur Aydin + (taydin@snet.net). + [RPJ (me) didn't translate the original algorithm + correctly.] + * semaphore.c: Added sem_post_multiple; this is a useful + routine, but it doesn't appear to be standard. For now it's + not an exported function. + +2001-06-25 Ross Johnson + + * create.c (pthread_create): Add priority inheritance + attributes. + * mutex.c (pthread_mutex_lock): Remove some overhead for + PTHREAD_MUTEX_NORMAL mutex types. Specifically, avoid + calling pthread_self() and pthread_equal() to check/set + the mutex owner. Introduce a new pseudo owner for this + type. Test results suggest increases in speed of up to + 90% for non-blocking locks. + This is the default type of mutex used internally by other + synchronising objects, ie. condition variables and + read-write locks. The test rwlock7.c shows about a + 30-35% speed increase over snapshot 2001-06-06. The + price of this is that the application developer + must ensure correct behaviour, or explicitly set the + mutex to a safer type such as PTHREAD_MUTEX_ERRORCHECK. + For example, PTHREAD_MUTEX_NORMAL (or PTHREAD_MUTEX_DEFAULT) + type mutexes will not return an error if a thread which is not + the owner calls pthread_mutex_unlock. The call will succeed + in unlocking the mutex if it is currently locked, but a + subsequent unlock by the true owner will then fail with EPERM. + This is however consistent with some other implementations. + (pthread_mutex_unlock): Likewise. + (pthread_mutex_trylock): Likewise. + (pthread_mutex_destroy): Likewise. + * attr.c (pthread_attr_init): PTHREAD_EXPLICIT_SCHED is the + default inheritance attribute; THREAD_PRIORITY_NORMAL is + the default priority for new threads. + * sched.c (pthread_attr_setschedpolicy): Added routine. + (pthread_attr_getschedpolicy): Added routine. + (pthread_attr_setinheritsched): Added routine. + (pthread_attr_getinheritsched): Added routine. + * pthread.h (sched_rr_set_interval): Added as a macro; + returns -1 with errno set to ENOSYS. + +2001-06-23 Ross Johnson + + *sched.c (pthread_attr_setschedparam): Add priority range + check. + (sched_setscheduler): New function; checks for a valid + pid and policy; checks for permission to set information + in the target process; expects pid to be a Win32 process ID, + not a process handle; the only scheduler policy allowed is + SCHED_OTHER. + (sched_getscheduler): Likewise, but checks for permission + to query. + * pthread.h (SCHED_*): Moved to sched.h as defined in the + POSIX standard. + * sched.h (SCHED_*): Moved from pthread.h. + (pid_t): Defined if necessary. + (sched_setscheduler): Defined. + (sched_getscheduler): Defined. + * pthread.def (sched_setscheduler): Exported. + (sched_getscheduler): Likewise. + +2001-06-23 Ralf Brese + + * create.c (pthread_create): Set thread priority from + thread attributes. + +2001-06-18 Ross Johnson + + * Made organisational-only changes to UWIN additions. + * dll.c (dllMain): Moved UWIN process attach code + to pthread_win32_process_attach_np(); moved + instance of pthread_count to global.c. + * global.c (pthread_count): Moved from dll.c. + * nonportable.c (pthread_win32_process_attach_np): + Moved _UWIN code to here from dll.c. + * implement.h (pthread_count): Define extern int. + * create.c (pthread_count): Remove extern int. + * private.c (pthread_count): Likewise. + * exit.c (pthread_count): Likewise. + +2001-06-18 David Korn + + * dll.c: Added changes necessary to work with UWIN. + * create.c: Likewise. + * pthread.h: Likewise. + * misc.c: Likewise. + * exit.c: Likewise. + * private.c: Likewise. + * implement.h: Likewise. + There is some room at the start of struct pthread_t_ + to implement the signal semantics in UWIN's posix.dll + although this is not yet complete. + * Nmakefile: Compatible with UWIN's Nmake utility. + * Nmakefile.tests: Likewise - for running the tests. + +2001-06-08 Ross Johnson + + * semaphore.h (sem_t): Fixed for compile and test. + * implement.h (sem_t_): Likewise. + * semaphore.c: Likewise. + * private.c (ptw32_sem_timedwait): Updated to use new + opaque sem_t. + +2001-06-06 Ross Johnson + + * semaphore.h (sem_t): Is now an opaque pointer; + moved actual definition to implement.h. + * implement.h (sem_t_): Move here from semaphore.h; + was the definition of sem_t. + * semaphore.c: Wherever necessary, changed use of sem + from that of a pointer to a pointer-pointer; added + extra checks for a valid sem_t; NULL sem_t when + it is destroyed; added extra checks when creating + and destroying sem_t elements in the NEED_SEM + code branches; changed from using a pthread_mutex_t + ((*sem)->mutex) to CRITICAL_SECTION ((*sem)->sem_lock_cs) + in NEED_SEM branches for access serialisation. + +2001-06-06 Ross Johnson + + * mutex.c (pthread_mutexattr_init): Remove + ptw32_mutex_default_kind. + +2001-06-05 Ross Johnson + + * nonportable.c (pthread_mutex_setdefaultkind_np): + Remove - should not have been included in the first place. + (pthread_mutex_getdefaultkind_np): Likewise. + * global.c (ptw32_mutex_default_kind): Likewise. + * mutex.c (pthread_mutex_init): Remove use of + ptw32_mutex_default_kind. + * pthread.h (pthread_mutex_setdefaultkind_np): Likewise. + (pthread_mutex_getdefaultkind_np): Likewise. + * pthread.def (pthread_mutexattr_setkind_np): Added. + (pthread_mutexattr_getkind_np): Likewise. + + * README: Many changes that should have gone in before + the last snapshot. + * README.NONPORTABLE: New - referred to by ANNOUNCE + but never created; documents the non-portable routines + included in the library - moved from README with new + routines added. + * ANNOUNCE (pthread_mutexattr_setkind_np): Added to + compliance list. + (pthread_mutexattr_getkind_np): Likewise. + +2001-06-04 Ross Johnson + + * condvar.c: Add original description of the algorithm as + developed by Terekhov and Thomas, plus reference to + README.CV. + +2001-06-03 Alexander Terekhov , Louis Thomas + + * condvar.c (pthread_cond_init): Completely revamped. + (pthread_cond_destroy): Likewise. + (ptw32_cond_wait_cleanup): Likewise. + (ptw32_cond_timedwait): Likewise. + (ptw32_cond_unblock): New general signaling routine. + (pthread_cond_signal): Now calls ptw32_cond_unblock. + (pthread_cond_broadcast): Likewise. + * implement.h (pthread_cond_t_): Revamped. + * README.CV: New; explanation of the above changes. + +2001-05-30 Ross Johnson + + * pthread.h (rand_r): Fake using _seed argument to quell + compiler warning (compiler should optimise this away later). + + * GNUmakefile (OPT): Leave symbolic information out of the library + and increase optimisation level - for smaller faster prebuilt + dlls. + +2001-05-29 Milan Gardian + + * Makefile: fix typo. + * pthreads.h: Fix problems with stdcall/cdecl conventions, in particular + remove the need for PT_STDCALL everywhere; remove warning supression. + * (errno): Fix the longstanding "inconsistent dll linkage" problem + with errno; now also works with /MD debugging libs - + warnings emerged when compiling pthreads library with /MD (or /MDd) + compiler switch, instead of /MT (or /MTd) (i.e. when compiling pthreads + using Multithreaded DLL CRT instead of Multithreaded statically linked + CRT). + * create.c (pthread_create): Likewise; fix typo. + * private.c (ptw32_threadStart): Eliminate use of terminate() which doesn't + throw exceptions. + * Remove unnecessary #includes from a number of modules - + [I had to #include malloc.h in implement.h for gcc - rpj]. + +2001-05-29 Thomas Pfaff + + * pthread.h (PTHREAD_MUTEX_DEFAULT): New; equivalent to + PTHREAD_MUTEX_DEFAULT_NP. + * (PTHREAD_MUTEX_NORMAL): Similarly. + * (PTHREAD_MUTEX_ERRORCHECK): Similarly. + * (PTHREAD_MUTEX_RECURSIVE): Similarly. + * (pthread_mutex_setdefaultkind_np): New; Linux compatibility stub + for pthread_mutexattr_settype. + * (pthread_mutexattr_getkind_np): New; Linux compatibility stub + for pthread_mutexattr_gettype. + * mutex.c (pthread_mutexattr_settype): New; allow + the following types of mutex: + PTHREAD_MUTEX_DEFAULT_NP + PTHREAD_MUTEX_NORMAL_NP + PTHREAD_MUTEX_ERRORCHECK_NP + PTHREAD_MUTEX_RECURSIVE_NP + * Note that PTHREAD_MUTEX_DEFAULT is equivalent to + PTHREAD_MUTEX_NORMAL - ie. mutexes should no longer + be recursive by default, and a thread will deadlock if it + tries to relock a mutex it already owns. This is inline with + other pthreads implementations. + * (pthread_mutex_lock): Process the lock request + according to the mutex type. + * (pthread_mutex_init): Eliminate use of Win32 mutexes as the + basis of POSIX mutexes - instead, a combination of one critical section + and one semaphore are used in conjunction with Win32 Interlocked* routines. + * (pthread_mutex_destroy): Likewise. + * (pthread_mutex_lock): Likewise. + * (pthread_mutex_trylock): Likewise. + * (pthread_mutex_unlock): Likewise. + * Use longjmp/setjmp to implement cancelation when building the library + using a C compiler which doesn't support exceptions, e.g. gcc -x c (note + that gcc -x c++ uses exceptions). + * Also fixed some of the same typos and eliminated PT_STDCALL as + Milan Gardian's patches above. + +2001-02-07 Alexander Terekhov + + * rwlock.c: Revamped. + * implement.h (pthread_rwlock_t_): Redefined. + This implementation does not have reader/writer starvation problem. + Rwlock attempts to behave more like a normal mutex with + races and scheduling policy determining who is more important; + It also supports recursive locking, + has less synchronization overhead (no broadcasts at all, + readers are not blocked on any condition variable) and seem to + be faster than the current implementation [W98 appears to be + approximately 15 percent faster at least - on top of speed increase + from Thomas Pfaff's changes to mutex.c - rpj]. + +2000-12-29 Ross Johnson + + * Makefile: Back-out "for" loops which don't work. + + * GNUmakefile: Remove the fake.a target; add the "realclean" + target; don't remove built libs under the "clean" target. + + * config.h: Add a guard against multiple inclusion. + + * semaphore.h: Add some defines from config.h to make + semaphore.h independent of config.h when building apps. + + * pthread.h (_errno): Back-out previous fix until we know how to + fix it properly. + + * implement.h (lockCount): Add missing element to pthread_mutex_t_. + + * sync.c (pthread_join): Spelling fix in comment. + + * private.c (ptw32_threadStart): Reset original termination + function (C++). + (ptw32_threadStart): Cleanup detached threads early in case + the library is statically linked. + (ptw32_callUserDestroyRoutines): Remove [SEH] __try block from + destructor call so that unhandled exceptions will be passed through + to the system; call terminate() from [C++] try block for the same + reason. + + * tsd.c (pthread_getspecific): Add comment. + + * mutex.c (pthread_mutex_init): Initialise new elements in + pthread_mutex_t. + (pthread_mutex_unlock): Invert "pthread_equal()" test. + +2000-12-28 Ross Johnson + + * semaphore.c (mode_t): Use ifndef HAVE_MODE_T to include definition. + + * config.h.in (HAVE_MODE_T): Added. + (_UWIN): Start adding defines for the UWIN package. + + * private.c (ptw32_threadStart): Unhandled exceptions are + now passed through to the system to deal with. This is consistent + with normal Windows behaviour. C++ applications may use + set_terminate() to override the default behaviour which is + to call ptw32_terminate(). Ptw32_terminate() cleans up some + POSIX thread stuff before calling the system default function + which calls abort(). The users termination function should conform + to standard C++ semantics which is to not return. It should + exit the thread (call pthread_exit()) or exit the application. + * private.c (ptw32_terminate): Added as the default set_terminate() + function. It calls the system default function after cleaning up + some POSIX thread stuff. + + * implement.h (ptw32_try_enter_critical_section): Move + declaration. + * global.c (ptw32_try_enter_critical_section): Moved + from dll.c. + * dll.c: Move process and thread attach/detach code into + functions in nonportable.c. + * nonportable.c (pthread_win32_process_attach_np): Process + attach code from dll.c is now available to static linked + applications. + * nonportable.c (pthread_win32_process_detach_np): Likewise. + * nonportable.c (pthread_win32_thread_attach_np): Likewise. + * nonportable.c (pthread_win32_thread_detach_np): Likewise. + + * pthread.h: Add new non-portable prototypes for static + linked applications. + + * GNUmakefile (OPT): Increase optimisation flag and remove + debug info flag. + + * pthread.def: Add new non-portable exports for static + linked applications. + +2000-12-11 Ross Johnson + + * FAQ: Update Answer 6 re getting a fully working + Mingw32 built library. + +2000-10-10 Steven Reddie + + * misc.c (pthread_self): Restore Win32 "last error" + cleared by TlsGetValue() call in + pthread_getspecific() + +2000-09-20 Arthur Kantor + + * mutex.c (pthread_mutex_lock): Record the owner + of the mutex. This requires also keeping count of + recursive locks ourselves rather than leaving it + to Win32 since we need to know when to NULL the + thread owner when the mutex is unlocked. + (pthread_mutex_trylock): Likewise. + (pthread_mutex_unlock): Check that the calling + thread owns the mutex, decrement the recursive + lock count, and NULL the owner if zero. Return + EPERM if the mutex is owned by another thread. + * implement.h (pthread_mutex_t_): Add ownerThread + and lockCount members. + +2000-09-13 Jef Gearhart + + * mutex.c (pthread_mutex_init): Call + TryEnterCriticalSection through the pointer + rather than directly so that the dll can load + on Windows versions that can't resolve the + function, eg. Windows 95 + +2000-09-09 Ross Johnson + + * pthread.h (ctime_r): Fix arg. + +2000-09-08 Ross Johnson + + * GNUmakefile(_WIN32_WINNT=0x400): Define in CFLAGS; + doesn't seem to be needed though. + + * cancel.c (pthread_cancel): Must get "self" through + calling pthread_self() which will ensure a POSIX thread + struct is built for non-POSIX threads; return an error + if this fails + - Ollie Leahy + (pthread_setcancelstate): Likewise. + (pthread_setcanceltype): Likewise. + * misc.c (ptw32_cancelable_wait): Likewise. + + * private.c (ptw32_tkAssocCreate): Remove unused #if 0 + wrapped code. + + * pthread.h (ptw32_get_exception_services_code): + Needed to be forward declared unconditionally. + +2000-09-06 Ross Johnson + + * cancel.c (pthread_cancel): If called from the main + thread "self" would be NULL; get "self" via pthread_self() + instead of directly from TLS so that an implicit + pthread object is created. + + * misc.c (pthread_equal): Strengthen test for NULLs. + +2000-09-02 Ross Johnson + + * condvar.c (ptw32_cond_wait_cleanup): Ensure that all + waking threads check if they are the last, and notify + the broadcaster if so - even if an error occurs in the + waiter. + + * semaphore.c (_decrease_semaphore): Should be + a call to ptw32_decrease_semaphore. + (_increase_semaphore): Should be a call to + ptw32_increase_semaphore. + + * misc.c (ptw32_cancelable_wait): Renamed from + CancelableWait. + * rwlock.c (_rwlock_check*): Renamed to + ptw32_rwlock_check*. + * mutex.c (_mutex_check*): Renamed to ptw32_mutex_check*. + * condvar.c (cond_timed*): Renamed to ptw32_cond_timed*. + (_cond_check*): Renamed to ptw32_cond_check*. + (cond_wait_cleanup*): Rename to ptw32_cond_wait_cleanup*. + (ptw32_cond_timedwait): Add comments. + +2000-08-22 Ross Johnson + + * private.c (ptw32_throw): Fix exception test; + move exceptionInformation declaration. + + * tsd.c (pthread_key_create): newkey wrongly declared. + + * pthread.h: Fix comment block. + +2000-08-18 Ross Johnson + + * mutex.c (pthread_mutex_destroy): Check that the mutex isn't + held; invalidate the mutex as early as possible to avoid + contention; not perfect - FIXME! + + * rwlock.c (pthread_rwlock_init): Remove redundant assignment + to "rw". + (pthread_rwlock_destroy): Invalidate the rwlock before + freeing up any of it's resources - to avoid contention. + + * private.c (ptw32_tkAssocCreate): Change assoc->lock + to use a dynamically initialised mutex - only consumes + a W32 mutex or critical section when first used, + not before. + + * mutex.c (pthread_mutex_init): Remove redundant assignment + to "mx". + (pthread_mutexattr_destroy): Set attribute to NULL + before freeing it's memory - to avoid contention. + + * implement.h (PTW32_EPS_CANCEL/PTW32_EPS_EXIT): + Must be defined for all compilers - used as generic + exception selectors by ptw32_throw(). + + * Several: Fix typos from scripted edit session + yesterday. + + * nonportable.c (pthread_mutexattr_setforcecs_np): + Moved this function from mutex.c. + (pthread_getw32threadhandle_np): New function to + return the win32 thread handle that the POSIX + thread is using. + * mutex.c (pthread_mutexattr_setforcecs_np): + Moved to new file "nonportable.c". + + * pthread.h (PTW32_BUILD): Only redefine __except + and catch compiler keywords if we aren't building + the library (ie. PTW32_BUILD is not defined) - + this is safer than defining and then undefining + if not building the library. + * implement.h: Remove __except and catch undefines. + * Makefile (CFLAGS): Define PTW32_BUILD. + * GNUmakefile (CFLAGS): Define PTW32_BUILD. + + * All appropriate: Change Pthread_exception* to + ptw32_exception* to be consistent with internal + identifier naming. + + * private.c (ptw32_throw): New function to provide + a generic exception throw for all internal + exceptions and EH schemes. + (ptw32_threadStart): pthread_exit() value is now + returned via the thread structure exitStatus + element. + * exit.c (pthread_exit): pthread_exit() value is now + returned via the thread structure exitStatus + element. + * cancel.c (ptw32_cancel_self): Now uses ptw32_throw. + (pthread_setcancelstate): Ditto. + (pthread_setcanceltype): Ditto. + (pthread_testcancel): Ditto. + (pthread_cancel): Ditto. + * misc.c (CancelableWait): Ditto. + * exit.c (pthread_exit): Ditto. + * All applicable: Change PTW32_ prefix to + PTW32_ prefix to remove leading underscores + from private library identifiers. + +2000-08-17 Ross Johnson + + * All applicable: Change _pthread_ prefix to + ptw32_ prefix to remove leading underscores + from private library identifiers (single + and double leading underscores are reserved in the + ANSI C standard for compiler implementations). + + * tsd.c (pthread_create_key): Initialise temporary + key before returning it's address to avoid race + conditions. + +2000-08-13 Ross Johnson + + * errno.c: Add _MD precompile condition; thus far + had no effect when using /MD compile option but I + thnk it should be there. + + * exit.c: Add __cplusplus to various #if lines; + was compiling SEH code even when VC++ had + C++ compile options. + + * private.c: ditto. + + * create.c (pthread_create): Add PT_STDCALL macro to + function pointer arg in _beginthread(). + + * pthread.h: PT_STDCALL really does need to be defined + in both this and impliment.h; don't set it to __cdecl + - this macro is only used to extend function pointer + casting for functions that will be passed as parameters. + (~PThreadCleanup): add cast and group expression. + (_errno): Add _MD compile conditional. + (PtW32NoCatchWarn): Change pragma message. + + * implement.h: Move and change PT_STDCALL define. + + * need_errno.h: Add _MD to compilation conditional. + + * GNUmakefile: Substantial rewrite for new naming + convention; set for nil optimisation (turn it up + when we have a working library build; add target + "fake.a" to build a libpthreadw32.a from the VC++ + built DLL pthreadVCE.dll. + + * pthread.def (LIBRARY): Don't specify in the .def + file - it is specified on the linker command line + since we now use the same .def file for variously + named .dlls. + + * Makefile: Substantial rewrite for new naming + convention; default nmake target only issues a + help message; run nmake with specific target + corresponding to the EH scheme being used. + + * README: Update information; add naming convention + explanation. + + * ANNOUNCE: Update information. + +2000-08-12 Ross Johnson + + * pthread.h: Add compile-time message when using + MSC_VER compiler and C++ EH to warn application + programmers to use PtW32Catch instead of catch(...) + if they want cancelation and pthread_exit to work. + + * implement.h: Remove #include ; we + use our own local semaphore.h. + +2000-08-10 Ross Johnson + + * cleanup.c (pthread_pop_cleanup): Remove _pthread + prefix from __except and catch keywords; implement.h + now simply undefines ptw32__except and + ptw32_catch if defined; VC++ was not textually + substituting ptw32_catch etc back to catch as + it was redefined; the reason for using the prefixed + version was to make it clear that it was not using + the pthread.h redefined catch keyword. + + * private.c (ptw32_threadStart): Ditto. + (ptw32_callUserDestroyRoutines): Ditto. + + * implement.h (ptw32__except): Remove #define. + (ptw32_catch): Remove #define. + + * GNUmakefile (pthread.a): New target to build + libpthread32.a from pthread.dll using dlltool. + + * buildlib.bat: Duplicate cl commands with args to + build C++ EH version of pthread.dll; use of .bat + files is redundant now that nmake compatible + Makefile is included; used as a kludge only now. + + * Makefile: Localise some macros and fix up the clean: + target to extend it and work properly. + + * CONTRIBUTORS: Add contributors. + + * ANNOUNCE: Updated. + + * README: Updated. + +2000-08-06 Ross Johnson + + * pthread.h: Remove #warning - VC++ doesn't accept it. + +2000-08-05 Ross Johnson + + * pthread.h (PtW32CatchAll): Add macro. When compiling + applications using VC++ with C++ EH rather than SEH + 'PtW32CatchAll' must be used in place of any 'catch( ... )' + if the application wants pthread cancelation or + pthread_exit() to work. + +2000-08-03 Ross Johnson + + * pthread.h: Add a base class ptw32_exception for + library internal exceptions and change the "catch" + re-define macro to use it. + +2000-08-02 Ross Johnson + + * GNUmakefile (CFLAGS): Add -mthreads. + Add new targets to generate cpp and asm output. + + * sync.c (pthread_join): Remove dead code. + +2000-07-25 Tristan Savatier + + * sched.c (sched_get_priority_max): Handle different WinCE and + Win32 priority values together. + (sched_get_priority_min): Ditto. + +2000-07-25 Ross Johnson + + * create.c (pthread_create): Force new threads to wait until + pthread_create has the new thread's handle; we also retain + a local copy of the handle for internal use until + pthread_create returns. + + * private.c (ptw32_threadStart): Initialise ei[]. + (ptw32_threadStart): When beginthread is used to start the + thread, force waiting until the creator thread had the + thread handle. + + * cancel.c (ptw32_cancel_thread): Include context switch + code for defined(_X86_) environments in addition to _M_IX86. + + * rwlock.c (pthread_rwlock_destroy): Assignment changed + to avoid compiler warning. + + * private.c (ptw32_get_exception_services_code): Cast + NULL return value to avoid compiler warning. + + * cleanup.c (pthread_pop_cleanup): Initialise "cleanup" variable + to avoid compiler warnings. + + * misc.c (ptw32_new): Change "new" variable to "t" to avoid + confusion with the C++ keyword of the same name. + + * condvar.c (cond_wait_cleanup): Initialise lastWaiter variable. + (cond_timedwait): Remove unused local variables. to avoid + compiler warnings. + + * dll.c (dllMain): Remove 2000-07-21 change - problem + appears to be in pthread_create(). + +2000-07-22 Ross Johnson + + * tsd.c (pthread_key_create): If a destructor was given + and the pthread_mutex_init failed, then would try to + reference a NULL pointer (*key); eliminate this section of + code by using a dynamically initialised mutex + (PTHREAD_MUTEX_INITIALIZER). + + * tsd.c (pthread_setspecific): Return an error if + unable to set the value; simplify cryptic conditional. + + * tsd.c (pthread_key_delete): Locking threadsLock relied + on mutex_lock returning an error if the key has no destructor. + ThreadsLock is only initialised if the key has a destructor. + Making this mutex a static could reduce the number of mutexes + used by an application since it is actually created only at + first use and it's often destroyed soon after. + +2000-07-22 Ross Johnson + + * FAQ: Added Q5 and Q6. + +2000-07-21 David Baggett + + * dll.c: Include resource leakage work-around. This is a + partial FIXME which doesn't stop all leakage. The real + problem needs to be found and fixed. + +2000-07-21 Ross Johnson + + * create.c (pthread_create): Set threadH to 0 (zero) + everywhere. Some assignments were using NULL. Maybe + it should be NULL everywhere - need to check. (I know + they are nearly always the same thing - but not by + definition.) + + * misc.c (pthread_self): Try to catch NULL thread handles + at the point where they might be generated, even though + they should always be valid at this point. + + * tsd.c (pthread_setspecific): return an error value if + pthread_self() returns NULL. + + * sync.c (pthread_join): return an error value if + pthread_self() returns NULL. + + * signal.c (pthread_sigmask): return an error value if + pthread_self() returns NULL. + +2000-03-02 Ross Johnson + + * attr.c (pthread_attr_init): Set default stacksize to zero (0) + rather than PTHREAD_STACK_MIN even though these are now the same. + + * pthread.h (PTHREAD_STACK_MIN): Lowered to 0. + +2000-01-28 Ross Johnson + + * mutex.c (pthread_mutex_init): Free mutex if it has been alloced; + if critical sections can be used instead of Win32 mutexes, test + that the critical section works and return an error if not. + +2000-01-07 Ross Johnson + + * cleanup.c (pthread_pop_cleanup): Include SEH code only if MSC is not + compiling as C++. + (pthread_push_cleanup): Include SEH code only if MSC is not + compiling as C++. + + * pthread.h: Include SEH code only if MSC is not + compiling as C++. + + * implement.h: Include SEH code only if MSC is not + compiling as C++. + + * cancel.c (ptw32_cancel_thread): Add _M_IX86 check. + (pthread_testcancel): Include SEH code only if MSC is not + compiling as C++. + (ptw32_cancel_self): Include SEH code only if MSC is not + compiling as C++. + +2000-01-06 Erik Hensema + + * Makefile: Remove inconsistencies in 'cl' args + +2000-01-04 Ross Johnson + + * private.c (ptw32_get_exception_services_code): New; returns + value of EXCEPTION_PTW32_SERVICES. + (ptw32_processInitialize): Remove initialisation of + ptw32_exception_services which is no longer needed. + + * pthread.h (ptw32_exception_services): Remove extern. + (ptw32_get_exception_services_code): Add function prototype; + use this to return EXCEPTION_PTW32_SERVICES value instead of + using the ptw32_exception_services variable which I had + trouble exporting through pthread.def. + + * global.c (ptw32_exception_services): Remove declaration. + +1999-11-22 Ross Johnson + + * implement.h: Forward declare ptw32_new(); + + * misc.c (ptw32_new): New; alloc and initialise a new pthread_t. + (pthread_self): New thread struct is generated by new routine + ptw32_new(). + + * create.c (pthread_create): New thread struct is generated + by new routine ptw32_new(). + +1999-11-21 Ross Johnson + + * global.c (ptw32_exception_services): Declare new variable. + + * private.c (ptw32_threadStart): Destroy thread's + cancelLock mutex; make 'catch' and '__except' usageimmune to + redfinitions in pthread.h. + (ptw32_processInitialize): Init new constant ptw32_exception_services. + + * create.c (pthread_create): Initialise thread's cancelLock + mutex. + + * cleanup.c (pthread_pop_cleanup): Make 'catch' and '__except' + usage immune to redfinition s in pthread.h. + + * private.c: Ditto. + + * pthread.h (catch): Redefine 'catch' so that C++ applications + won't catch our internal exceptions. + (__except): ditto for __except. + + * implement.h (ptw32_catch): Define internal version + of 'catch' because 'catch' is redefined by pthread.h. + (__except): ditto for __except. + (struct pthread_t_): Add cancelLock mutex for async cancel + safety. + +1999-11-21 Jason Nye , Erik Hensema + + * cancel.c (ptw32_cancel_self): New; part of the async + cancellation implementation. + (ptw32_cancel_thread): Ditto; this function is X86 + processor specific. + (pthread_setcancelstate): Add check for pending async + cancel request and cancel the calling thread if + required; add async-cancel safety lock. + (pthread_setcanceltype): Ditto. + +1999-11-13 Erik Hensema + + * configure.in (AC_OUTPUT): Put generated output into GNUmakefile + rather than Makefile. Makefile will become the MSC nmake compatible + version + +1999-11-13 John Bossom (John.Bossom@cognos.com> + + * misc.c (pthread_self): Add a note about GetCurrentThread + returning a pseudo-handle + +1999-11-10 Todd Owen + + * dll.c (dllMain): Free kernel32 ASAP. + If TryEnterCriticalSection is not being used, then free + the kernel32.dll handle now, rather than leaving it until + DLL_PROCESS_DETACH. + + Note: this is not a pedantic exercise in freeing unused + resources! It is a work-around for a bug in Windows 95 + (see microsoft knowledge base article, Q187684) which + does Bad Things when FreeLibrary is called within + the DLL_PROCESS_DETACH code, in certain situations. + Since w95 just happens to be a platform which does not + provide TryEnterCriticalSection, the bug will be + effortlessly avoided. + +1999-11-10 Ross Johnson + + * sync.c (pthread_join): Make it a deferred cancelation point. + + * misc.c (pthread_self): Explicitly initialise implicitly + created thread state to default values. + +1999-11-05 Tristan Savatier + + * pthread.h (winsock.h): Include unconditionally. + (ETIMEDOUT): Change fallback value to that defined by winsock.h. + + * general: Patched for portability to WinCE. The details are + described in the file WinCE-PORT. Follow the instructions + in README.WinCE to make the appropriate changes in config.h. + +1999-10-30 Erik Hensema + + * create.c (pthread_create): Explicitly initialise thread state to + default values. + + * cancel.c (pthread_setcancelstate): Check for NULL 'oldstate' + for compatibility with Solaris pthreads; + (pthread_setcanceltype): ditto: + +1999-10-23 Erik Hensema + + * pthread.h (ctime_r): Fix incorrect argument "_tm" + +1999-10-21 Aurelio Medina + + * pthread.h (_POSIX_THREADS): Only define it if it isn't + already defined. Projects may need to define this on + the CC command line under Win32 as it doesn't have unistd.h + +1999-10-17 Ross Johnson + + * rwlock.c (pthread_rwlock_destroy): Add cast to remove compile + warning. + + * condvar.c (pthread_cond_broadcast): Only release semaphores + if there are waiting threads. + +1999-10-15 Lorin Hochstein , Peter Slacik + + * condvar.c (cond_wait_cleanup): New static cleanup handler for + cond_timedwait; + (cond_timedwait): pthread_cleanup_push args changed; + canceling a thread while it's in pthread_cond_wait + will now decrement the waiters count and cleanup if it's the + last waiter. + +1999-10-15 Graham Dumpleton + + * condvar.c (cond_wait_cleanup): the last waiter will now reset the CV's + wasBroadcast flag + +Thu Sep 16 1999 Ross Johnson + + * rwlock.c (pthread_rwlock_destroy): Add serialisation. + (_rwlock_check_need_init): Check for detroyed rwlock. + * rwlock.c: Check return codes from _rwlock_check_need_init(); + modify comments; serialise access to rwlock objects during + operations; rename rw_mutex to rw_lock. + * implement.h: Rename rw_mutex to rw_lock. + * mutex.c (pthread_mutex_destroy): Add serialisation. + (_mutex_check_need_init): Check for detroyed mutex. + * condvar.c (pthread_cond_destroy): Add serialisation. + (_cond_check_need_init): Check for detroyed condvar. + * mutex.c: Modify comments. + * condvar.c: Modify comments. + +1999-08-10 Aurelio Medina + + * implement.h (pthread_rwlock_t_): Add. + * pthread.h (pthread_rwlock_t): Add. + (PTHREAD_RWLOCK_INITIALIZER): Add. + Add rwlock function prototypes. + * rwlock.c: New module. + * pthread.def: Add new rwlock functions. + * private.c (ptw32_processInitialize): initialise + ptw32_rwlock_test_init_lock critical section. + * global.c (ptw32_rwlock_test_init_lock): Add. + + * mutex.c (pthread_mutex_destroy): Don't free mutex memory + if mutex is PTHREAD_MUTEX_INITIALIZER and has not been + initialised yet. + +1999-08-08 Milan Gardian + + * mutex.c (pthread_mutex_destroy): Free mutex memory. + +1999-08-22 Ross Johnson + + * exit.c (pthread_exit): Fix reference to potentially + uninitialised pointer. + +1999-08-21 Ross Johnson + + * private.c (ptw32_threadStart): Apply fix of 1999-08-19 + this time to C++ and non-trapped C versions. Ommitted to + do this the first time through. + +1999-08-19 Ross Johnson + + * private.c (ptw32_threadStart): Return exit status from + the application thread startup routine. + - Milan Gardian + +1999-08-18 John Bossom + + * exit.c (pthread_exit): Put status into pthread_t->exitStatus + * private.c (ptw32_threadStart): Set pthread->exitStatus + on exit of try{} block. + * sync.c (pthread_join): use pthread_exitStatus value if the + thread exit doesn't return a value (for Mingw32 CRTDLL + which uses endthread instead of _endthreadex). + +Tue Aug 17 20:17:58 CDT 1999 Mumit Khan + + * create.c (pthread_create): Add CRTDLL suppport. + * exit.c (pthread_exit): Likewise. + * private.c (ptw32_threadStart): Likewise. + (ptw32_threadDestroy): Likewise. + * sync.c (pthread_join): Likewise. + * tests/join1.c (main): Warn about partial support for CRTDLL. + +Tue Aug 17 20:00:08 1999 Mumit Khan + + * Makefile.in (LD): Delete entry point. + * acconfig.h (STDCALL): Delete unused macro. + * configure.in: Remove test for STDCALL. + * config.h.in: Regenerate. + * errno.c (_errno): Fix self type. + * pthread.h (PT_STDCALL): Move from here to + * implement.h (PT_STDCALL): here. + (ptw32_threadStart): Fix prototype. + * private.c (ptw32_threadStart): Likewise. + +1999-08-14 Ross Johnson + + * exit.c (pthread_exit): Don't call pthread_self() but + get thread handle directly from TSD for efficiency. + +1999-08-12 Ross Johnson + + * private.c (ptw32_threadStart): ei[] only declared if _MSC_VER. + + * exit.c (pthread_exit): Check for implicitly created threads + to avoid raising an unhandled exception. + +1999-07-12 Peter Slacik + + * condvar.c (pthread_cond_destroy): Add critical section. + (cond_timedwait): Add critical section; check for timeout + waiting on semaphore. + (pthread_cond_broadcast): Add critical section. + +1999-07-09 Lorin Hochstein , John Bossom + + The problem was that cleanup handlers were not executed when + pthread_exit() was called. + + * implement.h (pthread_t_): Add exceptionInformation element for + C++ per-thread exception information. + (general): Define and rename exceptions. + +1999-07-09 Ross Johnson + + * misc.c (CancelableWait): PTW32_EPS_CANCEL (SEH) and + ptw32_exception_cancel (C++) used to identify the exception. + + * cancel.c (pthread_testcancel): PTW32_EPS_CANCEL (SEH) and + ptw32_exception_cancel (C++) used to identify the exception. + + * exit.c (pthread_exit): throw/raise an exception to return to + ptw32_threadStart() to exit the thread. PTW32_EPS_EXIT (SEH) + and ptw32_exception_exit (C++) used to identify the exception. + + * private.c (ptw32_threadStart): Add pthread_exit exception trap; + clean up and exit the thread directly rather than via pthread_exit(). + +Sun May 30 00:25:02 1999 Ross Johnson + + * semaphore.h (mode_t): Conditionally typedef it. + +Fri May 28 13:33:05 1999 Mark E. Armstrong + + * condvar.c (pthread_cond_broadcast): Fix possible memory fault + +Thu May 27 13:08:46 1999 Peter Slacik + + * condvar.c (pthread_cond_broadcast): Fix logic bug + +Thu May 27 13:08:46 1999 Bossom, John + + * condvar.c (pthread_cond_broadcast): optimise sem_post loop + +Fri May 14 12:13:18 1999 Mike Russo + + * attr.c (pthread_attr_setdetachstate): Fix logic bug + +Sat May 8 09:42:30 1999 Ross Johnson + + * pthread.def (sem_open): Add. + (sem_close): Add. + (sem_unlink): Add. + (sem_getvalue): Add. + + * FAQ (Question 3): Add. + +Thu Apr 8 01:16:23 1999 Ross Johnson + + * semaphore.c (sem_open): New function; returns an error (ENOSYS). + (sem_close): ditto. + (sem_unlink): ditto. + (sem_getvalue): ditto. + + * semaphore.h (_POSIX_SEMAPHORES): define. + +Wed Apr 7 14:09:52 1999 Ross Johnson + + * errno.c (_REENTRANT || _MT): Invert condition. + + * pthread.h (_errno): Conditionally include prototype. + +Wed Apr 7 09:37:00 1999 Ross Johnson + + * *.c (comments): Remove individual attributions - these are + documented sufficiently elsewhere. + + * implement.h (pthread.h): Remove extraneous include. + +Sun Apr 4 11:05:57 1999 Ross Johnson + + * sched.c (sched.h): Include. + + * sched.h: New file for POSIX 1b scheduling. + + * pthread.h: Move opaque structures to implement.h; move sched_* + prototypes out and into sched.h. + + * implement.h: Add opaque structures from pthread.h. + + * sched.c (sched_yield): New function. + + * condvar.c (ptw32_sem_*): Rename to sem_*; except for + ptw32_sem_timedwait which is an private function. + +Sat Apr 3 23:28:00 1999 Ross Johnson + + * Makefile.in (OBJS): Add errno.o. + +Fri Apr 2 11:08:50 1999 Ross Johnson + + * implement.h (ptw32_sem_*): Remove prototypes now defined in + semaphore.h. + + * pthread.h (sempahore.h): Include. + + * semaphore.h: New file for POSIX 1b semaphores. + + * semaphore.c (ptw32_sem_timedwait): Moved to private.c. + + * pthread.h (ptw32_sem_t): Change to sem_t. + + * private.c (ptw32_sem_timedwait): Moved from semaphore.c; + set errno on error. + + * pthread.h (pthread_t_): Add per-thread errno element. + +Fri Apr 2 11:08:50 1999 John Bossom + + * semaphore.c (ptw32_sem_*): Change to sem_*; these functions + will be exported from the library; set errno on error. + + * errno.c (_errno): New file. New function. + +Fri Mar 26 14:11:45 1999 Tor Lillqvist + + * semaphore.c (ptw32_sem_timedwait): Check for negative + milliseconds. + +Wed Mar 24 11:32:07 1999 John Bossom + + * misc.c (CancelableWait): Initialise exceptionInformation[2]. + (pthread_self): Get a real Win32 thread handle for implicit threads. + + * cancel.c (pthread_testcancel): Initialise exceptionInformation[2]. + + * implement.h (SE_INFORMATION): Fix values. + + * private.c (ptw32_threadDestroy): Close the thread handle. + +Fri Mar 19 12:57:27 1999 Ross Johnson + + * cancel.c (comments): Update and cleanup. + +Fri Mar 19 09:12:59 1999 Ross Johnson + + * private.c (ptw32_threadStart): status returns PTHREAD_CANCELED. + + * pthread.h (PTHREAD_CANCELED): defined. + +Tue Mar 16 1999 Ross Johnson + + * all: Add GNU LGPL and Copyright and Warranty. + +Mon Mar 15 00:20:13 1999 Ross Johnson + + * condvar.c (pthread_cond_init): fix possible uninitialised use + of cv. + +Sun Mar 14 21:01:59 1999 Ross Johnson + + * condvar.c (pthread_cond_destroy): don't do full cleanup if + static initialised cv has never been used. + (cond_timedwait): check result of auto-initialisation. + +Thu Mar 11 09:01:48 1999 Ross Johnson + + * pthread.h (pthread_mutex_t): revert to (pthread_mutex_t *); + define a value to serve as PTHREAD_MUTEX_INITIALIZER. + (pthread_mutex_t_): remove staticinit and valid elements. + (pthread_cond_t): revert to (pthread_cond_t_ *); + define a value to serve as PTHREAD_COND_INITIALIZER. + (pthread_cond_t_): remove staticinit and valid elements. + + * mutex.c (pthread_mutex_t args): adjust indirection of references. + (all functions): check for PTHREAD_MUTEX_INITIALIZER value; + check for NULL (invalid). + + * condvar.c (pthread_cond_t args): adjust indirection of references. + (all functions): check for PTHREAD_COND_INITIALIZER value; + check for NULL (invalid). + +Wed Mar 10 17:18:12 1999 Ross Johnson + + * misc.c (CancelableWait): Undo changes from Mar 8 and 7. + +Mon Mar 8 11:18:59 1999 Ross Johnson + + * misc.c (CancelableWait): Ensure cancelEvent handle is the lowest + indexed element in the handles array. Enhance test for abandoned + objects. + + * pthread.h (PTHREAD_MUTEX_INITIALIZER): Trailing elements not + initialised are set to zero by the compiler. This avoids the + problem of initialising the opaque critical section element in it. + (PTHREAD_COND_INITIALIZER): Ditto. + + * semaphore.c (ptw32_sem_timedwait): Check sem == NULL earlier. + +Sun Mar 7 12:31:14 1999 Ross Johnson + + * condvar.c (pthread_cond_init): set semaphore initial value + to 0, not 1. cond_timedwait was returning signaled immediately. + + * misc.c (CancelableWait): Place the cancel event handle first + in the handle table for WaitForMultipleObjects. This ensures that + the cancel event is recognised and acted apon if both objects + happen to be signaled together. + + * private.c (ptw32_cond_test_init_lock): Initialise and destroy. + + * implement.h (ptw32_cond_test_init_lock): Add extern. + + * global.c (ptw32_cond_test_init_lock): Add declaration. + + * condvar.c (pthread_cond_destroy): check for valid initialised CV; + flag destroyed CVs as invalid. + (pthread_cond_init): pthread_cond_t is no longer just a pointer. + This is because PTHREAD_COND_INITIALIZER needs state info to reside + in pthread_cond_t so that it can initialise on first use. Will work on + making pthread_cond_t (and other objects like it) opaque again, if + possible, later. + (cond_timedwait): add check for statically initialisation of + CV; initialise on first use. + (pthread_cond_signal): check for valid CV. + (pthread_cond_broadcast): check for valid CV. + (_cond_check_need_init): Add. + + * pthread.h (PTHREAD_COND_INITIALIZER): Fix. + (pthread_cond_t): no longer a pointer to pthread_cond_t_. + (pthread_cond_t_): add 'staticinit' and 'valid' elements. + +Sat Mar 6 1999 Ross Johnson + + * implement.h: Undate comments. + +Sun Feb 21 1999 Ross Johnson + + * pthread.h (PTHREAD_MUTEX_INITIALIZER): missing braces around + cs element initialiser. + +1999-02-21 Ben Elliston + + * pthread.h (pthread_exit): The return type of this function is + void, not int. + + * exit.c (pthread_exit): Do not return 0. + +Sat Feb 20 16:03:30 1999 Ross Johnson + + * dll.c (DLLMain): Expand TryEnterCriticalSection support test. + + * mutex.c (pthread_mutex_trylock): The check for + ptw32_try_enter_critical_section == NULL should have been + removed long ago. + +Fri Feb 19 16:03:30 1999 Ross Johnson + + * sync.c (pthread_join): Fix pthread_equal() test. + + * mutex.c (pthread_mutex_trylock): Check mutex != NULL before + using it. + +Thu Feb 18 16:17:30 1999 Ross Johnson + + * misc.c (pthread_equal): Fix inverted result. + + * Makefile.in: Use libpthread32.a as the name of the DLL export + library instead of pthread.lib. + + * condvar.c (pthread_cond_init): cv could have been used unitialised; + initialise. + + * create.c (pthread_create): parms could have been used unitialised; + initialise. + + * pthread.h (struct pthread_once_t_): Remove redefinition. + +Sat Feb 13 03:03:30 1999 Ross Johnson + + * pthread.h (struct pthread_once_t_): Replaced. + + * misc.c (pthread_once): Replace with John Bossom's version; + has lighter weight serialisation; fixes problem of not holding + competing threads until after the init_routine completes. + +Thu Feb 11 13:34:14 1999 Ross Johnson + + * misc.c (CancelableWait): Change C++ exception throw. + + * sync.c (pthread_join): Change FIXME comment - issue resolved. + +Wed Feb 10 12:49:11 1999 Ross Johnson + + * configure: Various temporary changes. + - Kevin Ruland + + * README: Update. + + * pthread.def (pthread_attr_getstackaddr): uncomment + (pthread_attr_setstackaddr): uncomment + +Fri Feb 5 13:42:30 1999 Ross Johnson + + * semaphore.c: Comment format changes. + +Thu Feb 4 10:07:28 1999 Ross Johnson + + * global.c: Remove ptw32_exception instantiation. + + * cancel.c (pthread_testcancel): Change C++ exception throw. + + * implement.h: Remove extern declaration. + +Wed Feb 3 13:04:44 1999 Ross Johnson + + * cleanup.c: Rename ptw32_*_cleanup() to pthread_*_cleanup(). + + * pthread.def: Ditto. + + * pthread.h: Ditto. + + * pthread.def (pthread_cleanup_push): Remove from export list; + the function is defined as a macro under all compilers. + (pthread_cleanup_pop): Ditto. + + * pthread.h: Remove #if defined(). + +Wed Feb 3 10:13:48 1999 Ross Johnson + + * sync.c (pthread_join): Check for NULL value_ptr arg; + check for detached threads. + +Tue Feb 2 18:07:43 1999 Ross Johnson + + * implement.h: Add #include . + Change sem_t to ptw32_sem_t. + +Tue Feb 2 18:07:43 1999 Kevin Ruland + + * signal.c (pthread_sigmask): Add and modify casts. + Reverse LHS/RHS bitwise assignments. + + * pthread.h: Remove #include . + (PTW32_ATTR_VALID): Add cast. + (struct pthread_t_): Add sigmask element. + + * dll.c: Add "extern C" for DLLMain. + (DllMain): Add cast. + + * create.c (pthread_create): Set sigmask in thread. + + * condvar.c: Remove #include. Change sem_* to ptw32_sem_*. + + * attr.c: Changed #include. + + * Makefile.in: Additional targets and changes to build the library + as a DLL. + +Fri Jan 29 11:56:28 1999 Ross Johnson + + * Makefile.in (OBJS): Add semaphore.o to list. + + * semaphore.c (ptw32_sem_timedwait): Move from private.c. + Rename sem_* to ptw32_sem_*. + + * pthread.h (pthread_cond_t): Change type of sem_t. + _POSIX_SEMAPHORES no longer defined. + + * semaphore.h: Contents moved to implement.h. + Removed from source tree. + + * implement.h: Add semaphore function prototypes and rename all + functions to prepend 'ptw32_'. They are + now private to the pthreads-win32 implementation. + + * private.c: Change #warning. + Move ptw32_sem_timedwait() to semaphore.c. + + * cleanup.c: Change #warning. + + * misc.c: Remove #include + + * pthread.def: Cleanup CVS merge conflicts. + + * global.c: Ditto. + + * ChangeLog: Ditto. + + * cleanup.c: Ditto. + +Sun Jan 24 01:34:52 1999 Ross Johnson + + * semaphore.c (sem_wait): Remove second arg to + pthreadCancelableWait() call. + +Sat Jan 23 17:36:40 1999 Ross Johnson + + * pthread.def: Add new functions to export list. + + * pthread.h (PTHREAD_MUTEX_AUTO_CS_NP): New. + (PTHREAD_MUTEX_FORCE_CS_NP): New. + + * README: Updated. + +Fri Jan 22 14:31:59 1999 Ross Johnson + + * Makefile.in (CFLAGS): Remove -fhandle-exceptions. Not needed + with egcs. Add -g for debugging. + + * create.c (pthread_create): Replace __stdcall with PT_STDCALL + macro. This is a hack and must be fixed. + + * misc.c (CancelableWait): Remove redundant statement. + + * mutex.c (pthread_mutexattr_init): Cast calloc return value. + + * misc.c (CancelableWait): Add cast. + (pthread_self): Add cast. + + * exit.c (pthread_exit): Add cast. + + * condvar.c (pthread_condattr_init): Cast calloc return value. + + * cleanup.c: Reorganise conditional compilation. + + * attr.c (pthread_attr_init): Remove unused 'result'. + Cast malloc return value. + + * private.c (ptw32_callUserDestroyRoutines): Redo conditional + compilation. + + * misc.c (CancelableWait): C++ version uses 'throw'. + + * cancel.c (pthread_testcancel): Ditto. + + * implement.h (class ptw32_exception): Define for C++. + + * pthread.h: Fix C, C++, and Win32 SEH condition compilation + mayhem around pthread_cleanup_* defines. C++ version now uses John + Bossom's cleanup handlers. + (pthread_attr_t): Make 'valid' unsigned. + Define '_timeb' as 'timeb' for Ming32. + Define PT_STDCALL as nothing for Mingw32. May be temporary. + + * cancel.c (pthread_testcancel): Cast return value. + +Wed Jan 20 09:31:28 1999 Ross Johnson + + * pthread.h (pthread_mutexattr_t): Changed to a pointer. + + * mutex.c (pthread_mutex_init): Conditionally create Win32 mutex + - from John Bossom's implementation. + (pthread_mutex_destroy): Conditionally close Win32 mutex + - from John Bossom's implementation. + (pthread_mutexattr_init): Replaced by John Bossom's version. + (pthread_mutexattr_destroy): Ditto. + (pthread_mutexattr_getpshared): New function from John Bossom's + implementation. + (pthread_mutexattr_setpshared): New function from John Bossom's + implementation. + +Tue Jan 19 18:27:42 1999 Ross Johnson + + * pthread.h (pthreadCancelableTimedWait): New prototype. + (pthreadCancelableWait): Remove second argument. + + * misc.c (CancelableWait): New static function is + pthreadCancelableWait() renamed. + (pthreadCancelableWait): Now just calls CancelableWait() with + INFINITE timeout. + (pthreadCancelableTimedWait): Just calls CancelableWait() + with passed in timeout. + +Tue Jan 19 18:27:42 1999 Scott Lightner + + * private.c (ptw32_sem_timedwait): 'abstime' arg really is + absolute time. Calculate relative time to wait from current + time before passing timeout to new routine + pthreadCancelableTimedWait(). + +Tue Jan 19 10:27:39 1999 Ross Johnson + + * pthread.h (pthread_mutexattr_setforcecs_np): New prototype. + + * mutex.c (pthread_mutexattr_init): Init 'pshared' and 'forcecs' + attributes to 0. + (pthread_mutexattr_setforcecs_np): New function (not portable). + + * pthread.h (pthread_mutex_t): + Add 'mutex' element. Set to NULL in PTHREAD_MUTEX_INITIALIZER. + The pthread_mutex_*() routines will try to optimise performance + by choosing either mutexes or critical sections as the basis + for pthread mutexes for each indevidual mutex. + (pthread_mutexattr_t_): Add 'forcecs' element. + Some applications may choose to force use of critical sections + if they know that:- + the mutex is PROCESS_PRIVATE and, + either the OS supports TryEnterCriticalSection() or + pthread_mutex_trylock() will never be called on the mutex. + This attribute will be setable via a non-portable routine. + + Note: We don't yet support PROCESS_SHARED mutexes, so the + implementation as it stands will default to Win32 mutexes only if + the OS doesn't support TryEnterCriticalSection. On Win9x, and early + versions of NT 'forcecs' will need to be set in order to get + critical section based mutexes. + +Sun Jan 17 12:01:26 1999 Ross Johnson + + * pthread.h (PTHREAD_MUTEX_INITIALIZER): Init new 'staticinit' + value to '1' and existing 'valid' value to '1'. + + * global.c (ptw32_mutex_test_init_lock): Add. + + * implement.h (ptw32_mutex_test_init_lock.): Add extern. + + * private.c (ptw32_processInitialize): Init critical section for + global lock used by _mutex_check_need_init(). + (ptw32_processTerminate): Ditto (:s/Init/Destroy/). + + * dll.c (dllMain): Move call to FreeLibrary() so that it is only + called once when the process detaches. + + * mutex.c (_mutex_check_need_init): New static function to test + and init PTHREAD_MUTEX_INITIALIZER mutexes. Provides serialised + access to the internal state of the uninitialised static mutex. + Called from pthread_mutex_trylock() and pthread_mutex_lock() which + do a quick unguarded test to check if _mutex_check_need_init() + needs to be called. This is safe as the test is conservative + and is repeated inside the guarded section of + _mutex_check_need_init(). Thus in all calls except the first + calls to lock static mutexes, the additional overhead to lock any + mutex is a single memory fetch and test for zero. + + * pthread.h (pthread_mutex_t_): Add 'staticinit' member. Mutexes + initialised by PTHREAD_MUTEX_INITIALIZER aren't really initialised + until the first attempt to lock it. Using the 'valid' + flag (which flags the mutex as destroyed or not) to record this + information would be messy. It is possible for a statically + initialised mutex such as this to be destroyed before ever being + used. + + * mutex.c (pthread_mutex_trylock): Call _mutex_check_need_init() + to test/init PTHREAD_MUTEX_INITIALIZER mutexes. + (pthread_mutex_lock): Ditto. + (pthread_mutex_unlock): Add check to ensure we don't try to unlock + an unitialised static mutex. + (pthread_mutex_destroy): Add check to ensure we don't try to delete + a critical section that we never created. Allows us to destroy + a static mutex that has never been locked (and hence initialised). + (pthread_mutex_init): Set 'staticinit' flag to 0 for the new mutex. + +Sun Jan 17 12:01:26 1999 Ross Johnson + + * private.c (ptw32_sem_timedwait): Move from semaphore.c. + + * semaphore.c : Remove redundant #includes. + (ptw32_sem_timedwait): Move to private.c. + (sem_wait): Add missing abstime arg to pthreadCancelableWait() call. + +Fri Jan 15 23:38:05 1999 Ross Johnson + + * condvar.c (cond_timedwait): Remove comment. + +Fri Jan 15 15:41:28 1999 Ross Johnson + + * pthread.h: Add new 'abstime' arg to pthreadCancelableWait() + prototype. + + * condvar.c (cond_timedwait): New generalised function called by + both pthread_cond_wait() and pthread_cond_timedwait(). This is + essentially pthread_cond_wait() renamed and modified to add the + 'abstime' arg and call the new ptw32_sem_timedwait() instead of + sem_wait(). + (pthread_cond_wait): Now just calls the internal static + function cond_timedwait() with an INFINITE wait. + (pthread_cond_timedwait): Now implemented. Calls the internal + static function cond_timedwait(). + + * implement.h (ptw32_sem_timedwait): New internal function + prototype. + + * misc.c (pthreadCancelableWait): Added new 'abstime' argument + to allow shorter than INFINITE wait. + + * semaphore.c (ptw32_sem_timedwait): New function for internal + use. This is essentially sem_wait() modified to add the + 'abstime' arg and call the modified (see above) + pthreadCancelableWait(). + +Thu Jan 14 14:27:13 1999 Ross Johnson + + * cleanup.c: Correct _cplusplus to __cplusplus wherever used. + + * Makefile.in: Add CC=g++ and add -fhandle-exceptions to CFLAGS. + The derived Makefile will compile all units of the package as C++ + so that those which include try/catch exception handling should work + properly. The package should compile ok if CC=gcc, however, exception + handling will not be included and thus thread cancellation, for + example, will not work. + + * cleanup.c (ptw32_pop_cleanup): Add #warning to compile this + file as C++ if using a cygwin32 environment. Perhaps the whole package + should be compiled using g++ under cygwin. + + * private.c (ptw32_threadStart): Change #error directive + into #warning and bracket for __CYGWIN__ and derivative compilers. + +Wed Jan 13 09:34:52 1999 Ross Johnson + + * build.bat: Delete old binaries before compiling/linking. + +Tue Jan 12 09:58:38 1999 Tor Lillqvist + + * dll.c: The Microsoft compiler pragmas probably are more + appropriately protected by _MSC_VER than by _WIN32. + + * pthread.h: Define ETIMEDOUT. This should be returned by + pthread_cond_timedwait which is not implemented yet as of + snapshot-1999-01-04-1305. It was implemented in the older version. + The Microsoft compiler pragmas probably are more appropriately + protected by _MSC_VER than by _WIN32. + + * pthread.def: pthread_mutex_destroy was missing from the def file + + * condvar.c (pthread_cond_broadcast): Ensure we only wait on threads + if there were any waiting on the condition. + I think pthread_cond_broadcast should do the WaitForSingleObject + only if cv->waiters > 0? Otherwise it seems to hang, at least in the + testg thread program from glib. + +Tue Jan 12 09:58:38 1999 Ross Johnson + + * condvar.c (pthread_cond_timedwait): Fix function description + comments. + + * semaphore.c (sem_post): Correct typo in comment. + +Mon Jan 11 20:33:19 1999 Ross Johnson + + * pthread.h: Re-arrange conditional compile of pthread_cleanup-* + macros. + + * cleanup.c (ptw32_push_cleanup): Provide conditional + compile of cleanup->prev. + +1999-01-11 Tor Lillqvist + + * condvar.c (pthread_cond_init): Invert logic when testing the + return value from calloc(). + +Sat Jan 9 14:32:08 1999 Ross Johnson + + * implement.h: Compile-time switch for CYGWIN derived environments + to use CreateThread instead of _beginthreadex. Ditto for ExitThread. + Patch provided by Anders Norlander . + +Tue Jan 5 16:33:04 1999 Ross Johnson + + * cleanup.c (ptw32_pop_cleanup): Add C++ version of __try/__except + block. Move trailing "}" out of #ifdef _WIN32 block left there by + (rpj's) mistake. + + * private.c: Remove #include which is included by pthread.h. + +1998-12-11 Ben Elliston + + * README: Update info about subscribing to the mailing list. + +Mon Jan 4 11:23:40 1999 Ross Johnson + + * all: No code changes, just cleanup. + - remove #if 0 /* Pre Bossom */ enclosed code. + - Remove some redundant #includes. + * pthread.h: Update implemented/unimplemented routines list. + * Tag the bossom merge branch getting ready to merge back to main + trunk. + +Tue Dec 29 13:11:16 1998 Ross Johnson + + * implement.h: Move the following struct definitions to pthread.h: + pthread_t_, pthread_attr_t_, pthread_mutex_t_, pthread_mutex_t_, + pthread_mutexattr_t_, pthread_key_t_, pthread_cond_t_, + pthread_condattr_t_, pthread_once_t_. + + * pthread.h: Add "_" prefix to pthread_push_cleanup and + pthread_pop_cleanup internal routines, and associated struct and + typedefs. + + * buildlib.bat: Add compile command for semaphore.c + + * pthread.def: Comment out pthread_atfork routine name. + Now unimplemented. + + * tsd.c (pthread_setspecific): Rename tkAssocCreate to + ptw32_tkAssocCreate. + (pthread_key_delete): Rename tkAssocDestroy to + ptw32_tkAssocDestroy. + + * sync.c (pthread_join): Rename threadDestroy to ptw32_threadDestroy + + * sched.c (is_attr): attr is now **attr (was *attr), so add extra + NULL pointer test. + (pthread_attr_setschedparam): Increase redirection for attr which is + now a **. + (pthread_attr_getschedparam): Ditto. + (pthread_setschedparam): Change thread validation and rename "thread" + Win32 thread Handle element name to match John Bossom's version. + (pthread_getschedparam): Ditto. + + * private.c (ptw32_threadDestroy): Rename call to + callUserDestroyRoutines() as ptw32_callUserDestroyRoutines() + + * misc.c: Add #include "implement.h". + + * dll.c: Remove defined(KLUDGE) wrapped code. + + * fork.c: Remove redefinition of ENOMEM. + Remove pthread_atfork() and fork() with #if 0/#endif. + + * create.c (pthread_create): Rename threadStart and threadDestroy calls + to ptw32_threadStart and ptw32_threadDestroy. + + * implement.h: Rename "detachedstate" to "detachstate". + + * attr.c: Rename "detachedstate" to "detachstate". + +Mon Dec 28 09:54:39 1998 John Bossom + + * semaphore.c: Initial version. + * semaphore.h: Initial version. + +Mon Dec 28 09:54:39 1998 Ross Johnson + + * pthread.h (pthread_attr_t_): Change to *pthread_attr_t. + +Mon Dec 28 09:54:39 1998 John Bossom, Ben Elliston + + * attr.c (pthread_attr_setstacksize): Merge with John's version. + (pthread_attr_getstacksize): Merge with John's version. + (pthread_attr_setstackaddr): Merge with John's version. + (pthread_attr_getstackaddr): Merge with John's version. + (pthread_attr_init): Merge with John's version. + (pthread_attr_destroy): Merge with John's version. + (pthread_attr_getdetachstate): Merge with John's version. + (pthread_attr_setdetachstate): Merge with John's version. + (is_attr): attr is now **attr (was *attr), so add extra NULL pointer + test. + +Mon Dec 28 09:54:39 1998 Ross Johnson + + * implement.h (pthread_attr_t_): Add and rename elements in JEB's + version to correspond to original, so that it can be used with + original attr routines. + + * pthread.h: Add #endif at end which was truncated in merging. + +Sun Dec 20 14:51:58 1998 Ross Johnson + + * misc.c (pthreadCancelableWait): New function by John Bossom. Non-standard + but provides a hook that can be used to implement cancellation points in + applications that use this library. + + * pthread.h (pthread_cleanup_pop): C++ (non-WIN32) version uses + try/catch to emulate John Bossom's WIN32 __try/__finally behaviour. + In the WIN32 version __finally block, add a test for AbnormalTermination otherwise + cleanup is only run if the cleanup_pop execute arg is non-zero. Cancellation + should cause the cleanup to run irrespective of the execute arg. + + * condvar.c (pthread_condattr_init): Replaced by John Bossom's version. + (pthread_condattr_destroy): Replaced by John Bossom's version. + (pthread_condattr_getpshared): Replaced by John Bossom's version. + (pthread_condattr_setpshared): Replaced by John Bossom's version. + (pthread_cond_init): Replaced by John Bossom's version. + Fix comment (refered to mutex rather than condition variable). + (pthread_cond_destroy): Replaced by John Bossom's version. + (pthread_cond_wait): Replaced by John Bossom's version. + (pthread_cond_timedwait): Replaced by John Bossom's version. + (pthread_cond_signal): Replaced by John Bossom's version. + (pthread_cond_broadcast): Replaced by John Bossom's version. + +Thu Dec 17 19:10:46 1998 Ross Johnson + + * tsd.c (pthread_key_create): Replaced by John Bossom's version. + (pthread_key_delete): Replaced by John Bossom's version. + (pthread_setspecific): Replaced by John Bossom's version. + (pthread_getspecific): Replaced by John Bossom's version. + +Mon Dec 7 09:44:40 1998 John Bossom + + * cancel.c (pthread_setcancelstate): Replaced. + (pthread_setcanceltype): Replaced. + (pthread_testcancel): Replaced. + (pthread_cancel): Replaced. + + * exit.c (pthread_exit): Replaced. + + * misc.c (pthread_self): Replaced. + (pthread_equal): Replaced. + + * sync.c (pthread_detach): Replaced. + (pthread_join): Replaced. + + * create.c (pthread_create): Replaced. + + * private.c (ptw32_processInitialize): New. + (ptw32_processTerminate): New. + (ptw32_threadStart): New. + (ptw32_threadDestroy): New. + (ptw32_cleanupStack): New. + (ptw32_tkAssocCreate): New. + (ptw32_tkAssocDestroy): New. + (ptw32_callUserDestroyRoutines): New. + + * implement.h: Added non-API structures and declarations. + + * dll.c (PthreadsEntryPoint): Cast return value of GetProcAddress + to resolve compile warning from MSVC. + + * dll.c (DLLmain): Replaced. + * dll.c (PthreadsEntryPoint): + Re-applied Anders Norlander's patch:- + Initialize ptw32_try_enter_critical_section at startup + and release kernel32 handle when DLL is being unloaded. + +Sun Dec 6 21:54:35 1998 Ross Johnson + + * buildlib.bat: Fix args to CL when building the .DLL + + * cleanup.c (ptw32_destructor_run_all): Fix TSD key management. + This is a tidy-up before TSD and Thread management is completely + replaced by John Bossom's code. + + * tsd.c (pthread_key_create): Fix TSD key management. + + * global.c (ptw32_key_virgin_next): Initialise. + + * build.bat: New DOS script to compile and link a pthreads app + using Microsoft's CL compiler linker. + * buildlib.bat: New DOS script to compile all the object files + and create pthread.lib and pthread.dll using Microsoft's CL + compiler linker. + +1998-12-05 Anders Norlander + + * implement.h (ptw32_try_enter_critical_section): New extern + * dll.c (ptw32_try_enter_critical_section): New pointer to + TryEnterCriticalSection if it exists; otherwise NULL. + * dll.c (PthreadsEntryPoint): + Initialize ptw32_try_enter_critical_section at startup + and release kernel32 handle when DLL is being unloaded. + * mutex.c (pthread_mutex_trylock): Replaced check for NT with + a check if ptw32_try_enter_critical_section is valid + pointer to a function. Call ptw32_try_enter_critical_section + instead of TryEnterCriticalSection to avoid errors on Win95. + +Thu Dec 3 13:32:00 1998 Ross Johnson + + * README: Correct cygwin32 compatibility statement. + +Sun Nov 15 21:24:06 1998 Ross Johnson + + * cleanup.c (ptw32_destructor_run_all): Declare missing void * arg. + Fixup CVS merge conflicts. + +1998-10-30 Ben Elliston + + * condvar.c (cond_wait): Fix semantic error. Test for equality + instead of making an assignment. + +Fri Oct 30 15:15:50 1998 Ross Johnson + + * cleanup.c (ptw32_handler_push): Fixed bug appending new + handler to list reported by Peter Slacik + . + (new_thread): Rename poorly named local variable to + "new_handler". + +Sat Oct 24 18:34:59 1998 Ross Johnson + + * global.c: Add TSD key management array and index declarations. + + * implement.h: Ditto for externs. + +Fri Oct 23 00:08:09 1998 Ross Johnson + + * implement.h (PTW32_TSD_KEY_REUSE): Add enum. + + * private.c (ptw32_delete_thread): Add call to + ptw32_destructor_run_all() to clean up the threads keys. + + * cleanup.c (ptw32_destructor_run_all): Check for no more dirty + keys to run destructors on. Assume that the destructor call always + succeeds and set the key value to NULL. + +Thu Oct 22 21:44:44 1998 Ross Johnson + + * tsd.c (pthread_setspecific): Add key management code. + (pthread_key_create): Ditto. + (pthread_key_delete): Ditto. + + * implement.h (struct ptw32_tsd_key): Add status member. + + * tsd.c: Add description of pthread_key_delete() from the + standard as a comment. + +Fri Oct 16 17:38:47 1998 Ross Johnson + + * cleanup.c (ptw32_destructor_run_all): Fix and improve + stepping through the key table. + +Thu Oct 15 14:05:01 1998 Ross Johnson + + * private.c (ptw32_new_thread): Remove init of destructorstack. + No longer an element of pthread_t. + + * tsd.c (pthread_setspecific): Fix type declaration and cast. + (pthread_getspecific): Ditto. + (pthread_getspecific): Change error return value to NULL if key + is not in use. + +Thu Oct 15 11:53:21 1998 Ross Johnson + + * global.c (ptw32_tsd_key_table): Fix declaration. + + * implement.h(ptw32_TSD_keys_TlsIndex): Add missing extern. + (ptw32_tsd_mutex): Ditto. + + * create.c (ptw32_start_call): Fix "keys" array declaration. + Add comment. + + * tsd.c (pthread_setspecific): Fix type declaration and cast. + (pthread_getspecific): Ditto. + + * cleanup.c (ptw32_destructor_run_all): Declare missing loop + counter. + +Wed Oct 14 21:09:24 1998 Ross Johnson + + * private.c (ptw32_new_thread): Increment ptw32_threads_count. + (ptw32_delete_thread): Decrement ptw32_threads_count. + Remove some comments. + + * exit.c (ptw32_exit): : Fix two pthread_mutex_lock() calls that + should have been pthread_mutex_unlock() calls. + (ptw32_vacuum): Remove call to ptw32_destructor_pop_all(). + + * create.c (pthread_create): Fix two pthread_mutex_lock() calls that + should have been pthread_mutex_unlock() calls. + + * global.c (ptw32_tsd_mutex): Add mutex for TSD operations. + + * tsd.c (pthread_key_create): Add critical section. + (pthread_setspecific): Ditto. + (pthread_getspecific): Ditto. + (pthread_key_delete): Ditto. + + * sync.c (pthread_join): Fix two pthread_mutex_lock() calls that + should have been pthread_mutex_unlock() calls. + +Mon Oct 12 00:00:44 1998 Ross Johnson + + * implement.h (ptw32_tsd_key_table): New. + + * create.c (ptw32_start_call): Initialise per-thread TSD keys + to NULL. + + * misc.c (pthread_once): Correct typo in comment. + + * implement.h (ptw32_destructor_push): Remove. + (ptw32_destructor_pop): Remove. + (ptw32_destructor_run_all): Rename from ptw32_destructor_pop_all. + (PTW32_TSD_KEY_DELETED): Add enum. + (PTW32_TSD_KEY_INUSE): Add enum. + + * cleanup.c (ptw32_destructor_push): Remove. + (ptw32_destructor_pop): Remove. + (ptw32_destructor_run_all): Totally revamped TSD. + + * dll.c (ptw32_TSD_keys_TlsIndex): Initialise. + + * tsd.c (pthread_setspecific): Totally revamped TSD. + (pthread_getspecific): Ditto. + (pthread_create): Ditto. + (pthread_delete): Ditto. + +Sun Oct 11 22:44:55 1998 Ross Johnson + + * global.c (ptw32_tsd_key_table): Add new global. + + * implement.h (ptw32_tsd_key_t and struct ptw32_tsd_key): + Add. + (struct _pthread): Remove destructorstack. + + * cleanup.c (ptw32_destructor_run_all): Rename from + ptw32_destructor_pop_all. The key destructor stack was made + global rather than per-thread. No longer removes destructor nodes + from the stack. Comments updated. + +1998-10-06 Ben Elliston + + * condvar.c (cond_wait): Use POSIX, not Win32 mutex calls. + (pthread_cond_broadcast): Likewise. + (pthread_cond_signal): Likewise. + +1998-10-05 Ben Elliston + + * pthread.def: Update. Some functions aren't available yet, others + are macros in . + + * tests/join.c: Remove; useless. + +Mon Oct 5 14:25:08 1998 Ross Johnson + + * pthread.def: New file for building the DLL. + +1998-10-05 Ben Elliston + + * misc.c (pthread_equal): Correct inverted logic bug. + (pthread_once): Use the POSIX mutex primitives, not Win32. Remove + irrelevant FIXME comment. + + * global.c (PTHREAD_MUTEX_INITIALIZER): Move to pthread.h. + + * pthread.h (PTHREAD_MUTEX_INITIALIZER): Define. + (pthread_mutex_t): Reimplement as a struct containing a valid + flag. If the flag is ever down upon entry to a mutex operation, + we call pthread_mutex_create() to initialise the object. This + fixes the problem of how to handle statically initialised objects + that can't call InitializeCriticalSection() due to their context. + (PTHREAD_ONCE_INIT): Define. + + * mutex.c (pthread_mutex_init): Set valid flag. + (pthread_mutex_destroy): Clear valid flag. + (pthread_mutex_lock): Check and handle the valid flag. + (pthread_mutex_unlock): Likewise. + (pthread_mutex_trylock): Likewise. + + * tests/mutex3.c: New file; test for the static initialisation + macro. Passes. + + * tests/create1.c: New file; test pthread_create(). Passes. + + * tests/equal.c: Poor test; remove. + + * tests/equal1.c New file; test pthread_equal(). Passes. + + * tests/once1.c: New file; test for pthread_once(). Passes. + + * tests/self.c: Remove; rename to self1.c. + + * tests/self1.c: This is the old self.c. + + * tests/self2.c: New file. Test pthread_self() with a single + thread. Passes. + + * tests/self3.c: New file. Test pthread_self() with a couple of + threads to ensure their thread IDs differ. Passes. + +1998-10-04 Ben Elliston + + * tests/mutex2.c: Test pthread_mutex_trylock(). Passes. + + * tests/mutex1.c: New basic test for mutex functions (it passes). + (main): Eliminate warning. + + * configure.in: Test for __stdcall, not _stdcall. Typo. + + * configure: Regenerate. + + * attr.c (pthread_attr_setstackaddr): Remove FIXME comment. Win32 + does know about ENOSYS after all. + (pthread_attr_setstackaddr): Likewise. + +1998-10-03 Ben Elliston + + * configure.in: Test for the `_stdcall' keyword. Define `STDCALL' + to `_stdcall' if we have it, null otherwise. + + * configure: Regenerate. + + * acconfig.h (STDCALL): New define. + + * config.h.in: Regenerate. + + * create.c (ptw32_start_call): Add STDCALL prefix. + + * mutex.c (pthread_mutex_init): Correct function signature. + + * attr.c (pthread_attr_init): Only zero out the `sigmask' member + if we have the sigset_t type. + + * pthread.h: No need to include . It doesn't even exist + on Win32! Again, an artifact of cross-compilation. + (pthread_sigmask): Only provide if we have the sigset_t type. + + * process.h: Remove. This was a stand-in before we started doing + native compilation under Win32. + + * pthread.h (pthread_mutex_init): Make `attr' argument const. + +1998-10-02 Ben Elliston + + * COPYING: Remove. + + * COPYING.LIB: Add. This library is under the LGPL. + +1998-09-13 Ben Elliston + + * configure.in: Test for required system features. + + * configure: Generate. + + * acconfig.h: New file. + + * config.h.in: Generate. + + * Makefile.in: Renamed from Makefile. + + * COPYING: Import from a recent GNU package. + + * config.guess: Likewise. + + * config.sub: Likewise. + + * install-sh: Likewise. + + * config.h: Remove. + + * Makefile: Likewise. + +1998-09-12 Ben Elliston + + * windows.h: No longer needed; remove. + + * windows.c: Likewise. + +Sat Sep 12 20:09:24 1998 Ross Johnson + + * windows.h: Remove error number definitions. These are in + + * tsd.c: Add comment explaining rationale for not building + POSIX TSD on top of Win32 TLS. + +1998-09-12 Ben Elliston + + * {most}.c: Include to get POSIX error values. + + * signal.c (pthread_sigmask): Only provide if HAVE_SIGSET_T is + defined. + + * config.h: #undef features, don't #define them. This will be + generated by autoconf very soon. + +1998-08-11 Ben Elliston + + * Makefile (LIB): Define. + (clean): Define target. + (all): Build a library not just the object files. + + * pthread.h: Provide a definition for struct timespec if we don't + already have one. + + * windows.c (TlsGetValue): Bug fix. + +Thu Aug 6 15:19:22 1998 Ross Johnson + + * misc.c (pthread_once): Fix arg 1 of EnterCriticalSection() + and LeaveCriticalSection() calls to pass address-of lock. + + * fork.c (pthread_atfork): Typecast (void (*)(void *)) funcptr + in each ptw32_handler_push() call. + + * exit.c (ptw32_exit): Fix attr arg in + pthread_attr_getdetachstate() call. + + * private.c (ptw32_new_thread): Typecast (HANDLE) NULL. + (ptw32_delete_thread): Ditto. + + * implement.h: (PTW32_MAX_THREADS): Add define. This keeps + changing in an attempt to make thread administration data types + opaque and cleanup DLL startup. + + * dll.c (PthreadsEntryPoint): + (ptw32_virgins): Remove malloc() and free() calls. + (ptw32_reuse): Ditto. + (ptw32_win32handle_map): Ditto. + (ptw32_threads_mutex_table): Ditto. + + * global.c (_POSIX_THREAD_THREADS_MAX): Initialise with + PTW32_MAX_THREADS. + (ptw32_virgins): Ditto. + (ptw32_reuse): Ditto. + (ptw32_win32handle_map): Ditto. + (ptw32_threads_mutex_table): Ditto. + + * create.c (pthread_create): Typecast (HANDLE) NULL. + Typecast (unsigned (*)(void *)) start_routine. + + * condvar.c (pthread_cond_init): Add address-of operator & to + arg 1 of pthread_mutex_init() call. + (pthread_cond_destroy): Add address-of operator & to + arg 1 of pthread_mutex_destroy() call. + + * cleanup.c (ptw32_destructor_pop_all): Add (int) cast to + pthread_getspecific() arg. + (ptw32_destructor_pop): Add (void *) cast to "if" conditional. + (ptw32_destructor_push): Add (void *) cast to + ptw32_handler_push() "key" arg. + (malloc.h): Add include. + + * implement.h (ptw32_destructor_pop): Add prototype. + + * tsd.c (implement.h): Add include. + + * sync.c (pthread_join): Remove target_thread_mutex and it's + initialisation. Rename getdetachedstate to getdetachstate. + Remove unused variable "exitcode". + (pthread_detach): Remove target_thread_mutex and it's + initialisation. Rename getdetachedstate to getdetachstate. + Rename setdetachedstate to setdetachstate. + + * signal.c (pthread_sigmask): Rename SIG_SET to SIG_SETMASK. + Cast "set" to (long *) in assignment to passify compiler warning. + Add address-of operator & to thread->attr.sigmask in memcpy() call + and assignment. + (pthread_sigmask): Add address-of operator & to thread->attr.sigmask + in memcpy() call and assignment. + + * windows.h (THREAD_PRIORITY_ERROR_RETURN): Add. + (THREAD_PRIORITY_LOWEST): Add. + (THREAD_PRIORITY_HIGHEST): Add. + + * sched.c (is_attr): Add function. + (implement.h): Add include. + (pthread_setschedparam): Rename all instances of "sched_policy" + to "sched_priority". + (pthread_getschedparam): Ditto. + +Tue Aug 4 16:57:58 1998 Ross Johnson + + * private.c (ptw32_delete_thread): Fix typo. Add missing ';'. + + * global.c (ptw32_virgins): Change types from pointer to + array pointer. + (ptw32_reuse): Ditto. + (ptw32_win32handle_map): Ditto. + (ptw32_threads_mutex_table): Ditto. + + * implement.h(ptw32_virgins): Change types from pointer to + array pointer. + (ptw32_reuse): Ditto. + (ptw32_win32handle_map): Ditto. + (ptw32_threads_mutex_table): Ditto. + + * private.c (ptw32_delete_thread): Fix "entry" should be "thread". + + * misc.c (pthread_self): Add extern for ptw32_threadID_TlsIndex. + + * global.c: Add comment. + + * misc.c (pthread_once): Fix member -> dereferences. + Change ptw32_once_flag to once_control->flag in "if" test. + +Tue Aug 4 00:09:30 1998 Ross Johnson + + * implement.h(ptw32_virgins): Add extern. + (ptw32_virgin_next): Ditto. + (ptw32_reuse): Ditto. + (ptw32_reuse_top): Ditto. + (ptw32_win32handle_map): Ditto. + (ptw32_threads_mutex_table): Ditto. + + * global.c (ptw32_virgins): Changed from array to pointer. + Storage allocation for the array moved into dll.c. + (ptw32_reuse): Ditto. + (ptw32_win32handle_map): Ditto. + (ptw32_threads_mutex_table): Ditto. + + * dll.c (PthreadsEntryPoint): Set up thread admin storage when + DLL is loaded. + + * fork.c (pthread_atfork): Fix function pointer arg to all + ptw32_handler_push() calls. Change "arg" arg to NULL in child push. + + * exit.c: Add windows.h and process.h includes. + (ptw32_exit): Add local detachstate declaration. + (ptw32_exit): Fix incorrect name for pthread_attr_getdetachstate(). + + * pthread.h (_POSIX_THREAD_ATTR_STACKSIZE): Move from global.c + (_POSIX_THREAD_ATTR_STACKADDR): Ditto. + + * create.c (pthread_create): Fix #if should be #ifdef. + (ptw32_start_call): Remove usused variables. + + * process.h: Create. + + * windows.h: Move _beginthreadex and _endthreadex into + process.h + +Mon Aug 3 21:19:57 1998 Ross Johnson + + * condvar.c (pthread_cond_init): Add NULL attr to + pthread_mutex_init() call - default attributes will be used. + (cond_wait): Fix typo. + (cond_wait): Fix typo - cv was ev. + (pthread_cond_broadcast): Fix two identical typos. + + * cleanup.c (ptw32_destructor_pop_all): Remove _ prefix from + PTHREAD_DESTRUCTOR_ITERATIONS. + + * pthread.h: Move _POSIX_* values into posix.h + + * pthread.h: Fix typo in pthread_mutex_init() prototype. + + * attr.c (pthread_attr_init): Fix error in priority member init. + + * windows.h (THREAD_PRIORITY_NORMAL): Add. + + * pthread.h (sched_param): Add missing ';' to struct definition. + + * attr.c (pthread_attr_init): Remove obsolete pthread_attr_t + member initialisation - cancelstate, canceltype, cancel_pending. + (is_attr): Make arg "attr" a const. + + * implement.h (PTW32_HANDLER_POP_LIFO): Remove definition. + (PTW32_HANDLER_POP_FIFO): Ditto. + (PTW32_VALID): Add missing newline escape (\). + (ptw32_handler_node): Make element "next" a pointer. + +1998-08-02 Ben Elliston + + * windows.h: Remove duplicate TlsSetValue() prototype. Add + TlsGetValue() prototype. + (FALSE): Define. + (TRUE): Likewise. + Add forgotten errno values. Guard against multiple #includes. + + * windows.c: New file. Implement stubs for Win32 functions. + + * Makefile (SRCS): Remove. Not explicitly needed. + (CFLAGS): Add -Wall for all warnings with GCC. + +Sun Aug 2 19:03:42 1998 Ross Johnson + + * config.h: Create. This is a temporary stand-in for autoconf yet + to be done. + (HAVE_SIGNAL_H): Add. + + * pthread.h: Minor rearrangement for temporary config.h. + +Fri Jul 31 14:00:29 1998 Ross Johnson + + * cleanup.c (ptw32_destructor_pop): Implement. Removes + destructors associated with a key without executing them. + (ptw32_destructor_pop_all): Add FIXME comment. + + * tsd.c (pthread_key_delete): Add call to ptw32_destructor_pop(). + +Fri Jul 31 00:05:45 1998 Ross Johnson + + * tsd.c (pthread_key_create): Update to properly associate + the destructor routine with the key. + (pthread_key_delete): Add FIXME comment. + + * exit.c (ptw32_vacuum): Add call to + ptw32_destructor_pop_all(). + + * implement.h (ptw32_handler_pop_all): Add prototype. + (ptw32_destructor_pop_all): Ditto. + + * cleanup.c (ptw32_destructor_push): Implement. This is just a + call to ptw32_handler_push(). + (ptw32_destructor_pop_all): Implement. This is significantly + different to ptw32_handler_pop_all(). + + * Makefile (SRCS): Create. Preliminary. + + * windows.h: Create. Contains Win32 definitions for compile + testing. This is just a standin for the real one. + + * pthread.h (SIG_UNBLOCK): Fix typo. Was SIG_BLOCK. + (windows.h): Add include. Required for CRITICAL_SECTION. + (pthread_cond_t): Move enum declaration outside of struct + definition. + (unistd.h): Add include - may be temporary. + + * condvar.c (windows.h): Add include. + + * implement.h (PTW32_THIS): Remove - no longer required. + (PTW32_STACK): Use pthread_self() instead of PTW32_THIS. + +Thu Jul 30 23:12:45 1998 Ross Johnson + + * implement.h: Remove ptw32_find_entry() prototype. + + * private.c: Extend comments. + Remove ptw32_find_entry() - no longer needed. + + * create.c (ptw32_start_call): Add call to TlsSetValue() to + store the thread ID. + + * dll.c (PthreadsEntryPoint): Implement. This is called + whenever a process loads the DLL. Used to initialise thread + local storage. + + * implement.h: Add ptw32_threadID_TlsIndex. + Add ()s around PTW32_VALID expression. + + * misc.c (pthread_self): Re-implement using Win32 TLS to store + the threads own ID. + +Wed Jul 29 11:39:03 1998 Ross Johnson + + * private.c: Corrections in comments. + (ptw32_new_thread): Alter "if" flow to be more natural. + + * cleanup.c (ptw32_handler_push): Same as below. + + * create.c (pthread_create): Same as below. + + * private.c (ptw32_new_thread): Rename "new" to "new_thread". + Since when has a C programmer been required to know C++? + +Tue Jul 28 14:04:29 1998 Ross Johnson + + * implement.h: Add PTW32_VALID macro. + + * sync.c (pthread_join): Modify to use the new thread + type and ptw32_delete_thread(). Rename "target" to "thread". + Remove extra local variable "target". + (pthread_detach): Ditto. + + * signal.c (pthread_sigmask): Move init of "us" out of inner block. + Fix instance of "this" should have been "us". Rename "us" to "thread". + + * sched.c (pthread_setschedparam): Modify to use the new thread + type. + (pthread_getschedparam): Ditto. + + * private.c (ptw32_find_thread): Fix return type and arg. + + * implement.h: Remove PTW32_YES and PTW32_NO. + (ptw32_new_thread): Add prototype. + (ptw32_find_thread): Ditto. + (ptw32_delete_thread): Ditto. + (ptw32_new_thread_entry): Remove prototype. + (ptw32_find_thread_entry): Ditto. + (ptw32_delete_thread_entry): Ditto. + ( PTW32_NEW, PTW32_INUSE, PTW32_EXITED, PTW32_REUSE): + Add. + + + * create.c (pthread_create): Minor rename "us" to "new" (I need + these cues but it doesn't stop me coming out with some major bugs + at times). + Load start_routine and arg into the thread so the wrapper can + call it. + + * exit.c (pthread_exit): Fix pthread_this should be pthread_self. + + * cancel.c (pthread_setcancelstate): Change + ptw32_threads_thread_t * to pthread_t and init with + pthread_this(). + (pthread_setcanceltype): Ditto. + + * exit.c (ptw32_exit): Add new pthread_t arg. + Rename ptw32_delete_thread_entry to ptw32_delete_thread. + Rename "us" to "thread". + (pthread_exit): Call ptw32_exit with added thread arg. + + * create.c (ptw32_start_call): Insert missing ")". + Add "us" arg to ptw32_exit() call. + (pthread_create): Modify to use new thread allocation scheme. + + * private.c: Added detailed explanation of the new thread + allocation scheme. + (ptw32_new_thread): Totally rewritten to use + new thread allocation scheme. + (ptw32_delete_thread): Ditto. + (ptw32_find_thread): Obsolete. + +Mon Jul 27 17:46:37 1998 Ross Johnson + + * create.c (pthread_create): Start of rewrite. Not completed yet. + + * private.c (ptw32_new_thread_entry): Start of rewrite. Not + complete. + + * implement.h (ptw32_threads_thread): Rename, remove thread + member, add win32handle and ptstatus members. + (ptw32_t): Add. + + * pthread.h: pthread_t is no longer mapped directly to a Win32 + HANDLE type. This is so we can let the Win32 thread terminate and + reuse the HANDLE while pthreads holds it's own thread ID until + the last waiting join exits. + +Mon Jul 27 00:20:37 1998 Ross Johnson + + * private.c (ptw32_delete_thread_entry): Destroy the thread + entry attribute object before deleting the thread entry itself. + + * attr.c (pthread_attr_init): Initialise cancel_pending = FALSE. + (pthread_attr_setdetachstate): Rename "detached" to "detachedstate". + (pthread_attr_getdetachstate): Ditto. + + * exit.c (ptw32_exit): Fix incorrect check for detachedstate. + + * implement.h (ptw32_call_t): Remove env member. + +Sun Jul 26 13:06:12 1998 Ross Johnson + + * implement.h (ptw32_new_thread_entry): Fix prototype. + (ptw32_find_thread_entry): Ditto. + (ptw32_delete_thread_entry): Ditto. + (ptw32_exit): Add prototype. + + * exit.c (ptw32_exit): New function. Called from pthread_exit() + and ptw32_start_call() to exit the thread. It allows an extra + argument which is the return code passed to _endthreadex(). + (ptw32_exit): Move thread entry delete call from ptw32_vacuum() + into here. Add more explanation of thread entry deletion. + (ptw32_exit): Clarify comment. + + * create.c (ptw32_start_call): Change pthread_exit() call to + ptw32_exit() call. + + * exit.c (ptw32_vacuum): Add thread entry deletion code + moved from ptw32_start_call(). See next item. + (pthread_exit): Remove longjmp(). Add mutex lock around thread table + manipulation code. This routine now calls _enthreadex(). + + * create.c (ptw32_start_call): Remove setjmp() call and move + cleanup code out. Call pthread_exit(NULL) to terminate the thread. + +1998-07-26 Ben Elliston + + * tsd.c (pthread_getspecific): Update comments. + + * mutex.c (pthread_mutexattr_setpshared): Not supported; remove. + (pthread_mutexattr_getpshared): Likewise. + + * pthread.h (pthread_mutexattr_setpshared): Remove prototype. + (pthread_mutexattr_getpshared): Likewise. + +Sun Jul 26 00:09:59 1998 Ross Johnson + + * sync.c: Rename all instances of ptw32_count_mutex to + ptw32_table_mutex. + + * implement.h: Rename ptw32_count_mutex to + ptw32_table_mutex. + + * global.c: Rename ptw32_count_mutex to + ptw32_table_mutex. + + * create.c (pthread_create): Add critical sections. + (ptw32_start_call): Rename ptw32_count_mutex to + ptw32_table_mutex. + + * cancel.c (pthread_setcancelstate): Fix indirection bug and rename + "this" to "us". + + * signal.c (pthread_sigmask): Rename "this" to "us" and fix some + minor syntax errors. Declare "us" and initialise it. + + * sync.c (pthread_detach): Rename "this" to "target". + + * pthread.h: Converting PTHREAD_* defines to alias the (const int) + values in global.c. + + * global.c: Started converting PTHREAD_* defines to (const int) as + a part of making the eventual pthreads DLL binary compatible + through version changes. + + * condvar.c (cond_wait): Add cancelation point. This applies the + point to both pthread_cond_wait() and pthread_cond_timedwait(). + + * exit.c (pthread_exit): Rename "this" to "us". + + * implement.h: Add comment. + + * sync.c (pthread_join): I've satisfied myself that pthread_detach() + does set the detached attribute in the thread entry attributes + to PTHREAD_CREATE_DETACHED. "if" conditions were changed to test + that attribute instead of a separate flag. + + * create.c (pthread_create): Rename "this" to "us". + (pthread_create): cancelstate and canceltype are not attributes + so the copy to thread entry attribute storage was removed. + Only the thread itself can change it's cancelstate or canceltype, + ie. the thread must exist already. + + * private.c (ptw32_delete_thread_entry): Mutex locks removed. + Mutexes must be applied at the caller level. + (ptw32_new_thread_entry): Ditto. + (ptw32_new_thread_entry): Init cancelstate, canceltype, and + cancel_pending to default values. + (ptw32_new_thread_entry): Rename "this" to "new". + (ptw32_find_thread_entry): Rename "this" to "entry". + (ptw32_delete_thread_entry): Rename "thread_entry" to "entry". + + * create.c (ptw32_start_call): Mutexes changed to + ptw32_count_mutex. All access to the threads table entries is + under the one mutex. Otherwise chaos reigns. + +Sat Jul 25 23:16:51 1998 Ross Johnson + + * implement.h (ptw32_threads_thread): Move cancelstate and + canceltype members out of pthread_attr_t into here. + + * fork.c (fork): Add comment. + +1998-07-25 Ben Elliston + + * fork.c (fork): Autoconfiscate. + +Sat Jul 25 00:00:13 1998 Ross Johnson + + * create.c (ptw32_start_call): Set thread priority. Ensure our + thread entry is removed from the thread table but only if + pthread_detach() was called and there are no waiting joins. + (pthread_create): Set detach flag in thread entry if the + thread is created PTHREAD_CREATE_DETACHED. + + * pthread.h (pthread_attr_t): Rename member "detachedstate". + + * attr.c (pthread_attr_init): Rename attr members. + + * exit.c (pthread_exit): Fix indirection mistake. + + * implement.h (PTW32_THREADS_TABLE_INDEX): Add. + + * exit.c (ptw32_vacuum): Fix incorrect args to + ptw32_handler_pop_all() calls. + Make thread entry removal conditional. + + * sync.c (pthread_join): Add multiple join and async detach handling. + + * implement.h (PTW32_THREADS_TABLE_INDEX): Add. + + * global.c (ptw32_threads_mutex_table): Add. + + * implement.h (ptw32_once_flag): Remove. + (ptw32_once_lock): Ditto. + (ptw32_threads_mutex_table): Add. + + * global.c (ptw32_once_flag): Remove. + (ptw32_once_lock): Ditto. + + * sync.c (pthread_join): Fix tests involving new return value + from ptw32_find_thread_entry(). + (pthread_detach): Ditto. + + * private.c (ptw32_find_thread_entry): Failure return code + changed from -1 to NULL. + +Fri Jul 24 23:09:33 1998 Ross Johnson + + * create.c (pthread_create): Change . to -> in sigmask memcpy() args. + + * pthread.h: (pthread_cancel): Add function prototype. + (pthread_testcancel): Ditto. + +1998-07-24 Ben Elliston + + * pthread.h (pthread_condattr_t): Rename dummy structure member. + (pthread_mutexattr_t): Likewise. + +Fri Jul 24 21:13:55 1998 Ross Johnson + + * cancel.c (pthread_cancel): Implement. + (pthread_testcancel): Implement. + + * exit.c (pthread_exit): Add comment explaining the longjmp(). + + * implement.h (ptw32_threads_thread_t): New member cancelthread. + (PTW32_YES): Define. + (PTW32_NO): Define. + (RND_SIZEOF): Remove. + + * create.c (pthread_create): Rename cancelability to cancelstate. + + * pthread.h (pthread_attr_t): Rename cancelability to cancelstate. + (PTHREAD_CANCELED): Define. + +1998-07-24 Ben Elliston + + * pthread.h (SIG_BLOCK): Define if not already defined. + (SIG_UNBLOCK): Likewise. + (SIG_SETMASK): Likewise. + (pthread_attr_t): Add signal mask member. + (pthread_sigmask): Add function prototype. + + * signal.c (pthread_sigmask): Implement. + + * create.c: #include to get a prototype for memcpy(). + (pthread_create): New threads inherit their creator's signal + mask. Copy the signal mask to the new thread structure if we know + about signals. + +Fri Jul 24 16:33:17 1998 Ross Johnson + + * fork.c (pthread_atfork): Add all the necessary push calls. + Local implementation semantics: + If we get an ENOMEM at any time then ALL handlers + (including those from previous pthread_atfork() calls) will be + popped off each of the three atfork stacks before we return. + (fork): Add all the necessary pop calls. Add the thread cancellation + and join calls to the child fork. + Add #includes. + + * implement.h: (ptw32_handler_push): Fix return type and stack arg + type in prototype. + (ptw32_handler_pop): Fix stack arg type in prototype. + (ptw32_handler_pop_all): Fix stack arg type in prototype. + + * cleanup.c (ptw32_handler_push): Change return type to int and + return ENOMEM if malloc() fails. + + * sync.c (pthread_detach): Use equality test, not assignment. + + * create.c (ptw32_start_call): Add call to Win32 CloseHandle() + if thread is detached. + +1998-07-24 Ben Elliston + + * sync.c (pthread_detach): Close the Win32 thread handle to + emulate detached (or daemon) threads. + +Fri Jul 24 03:00:25 1998 Ross Johnson + + * sync.c (pthread_join): Save valueptr arg in joinvalueptr for + pthread_exit() to use. + + * private.c (ptw32_new_thread_entry): Initialise joinvalueptr to + NULL. + + * create.c (ptw32_start_call): Rewrite to facilitate joins. + pthread_exit() will do a longjmp() back to here. Does appropriate + cleanup and exit/return from the thread. + (pthread_create): _beginthreadex() now passes a pointer to our + thread table entry instead of just the call member of that entry. + + * implement.h (ptw32_threads_thread): New member + void ** joinvalueptr. + (ptw32_call_t): New member jmpbuf env. + + * exit.c (pthread_exit): Major rewrite to handle joins and handing + value pointer to joining thread. Uses longjmp() back to + ptw32_start_call(). + + * create.c (pthread_create): Ensure values of new attribute members + are copied to the thread attribute object. + + * attr.c (pthread_attr_destroy): Fix merge conflicts. + (pthread_attr_getdetachstate): Fix merge conflicts. + (pthread_attr_setdetachstate): Fix merge conflicts. + + * pthread.h: Fix merge conflicts. + + * sync.c (pthread_join): Fix merge conflicts. + +Fri Jul 24 00:21:21 1998 Ross Johnson + + * sync.c (pthread_join): Add check for valid and joinable + thread. + (pthread_detach): Implement. After checking for a valid and joinable + thread, it's still a no-op. + + * private.c (ptw32_find_thread_entry): Bug prevented returning + an error value in some cases. + + * attr.c (pthread_attr_setdetachedstate): Implement. + (pthread_attr_getdetachedstate): Implement. + + * implement.h: Move more hidden definitions into here from + pthread.h. + +1998-07-24 Ben Elliston + + * pthread.h (PTHREAD_CREATE_JOINABLE): Define. + (PTHREAD_CREATE_DETACHED): Likewise. + (pthread_attr_t): Add new structure member `detached'. + (pthread_attr_getdetachstate): Add function prototype. + (pthread_attr_setdetachstate): Likewise. + + * sync.c (pthread_join): Return if the target thread is detached. + + * attr.c (pthread_attr_init): Initialise cancelability and + canceltype structure members. + (pthread_attr_getdetachstate): Implement. + (pthread_attr_setdetachstate): Likewise. + + * implement.h (PTW32_CANCEL_DEFAULTS): Remove. Bit fields + proved to be too cumbersome. Set the defaults in attr.c using the + public PTHREAD_CANCEL_* constants. + + * cancel.c: New file. + + * pthread.h (sched_param): Define this type. + (pthread_attr_getschedparam): Add function prototype. + (pthread_attr_setschedparam): Likewise. + (pthread_setcancelstate): Likewise. + (pthread_setcanceltype): Likewise. + (sched_get_priority_min): Likewise. + (sched_get_priority_max): Likewise. + (pthread_mutexattr_setprotocol): Remove; not supported. + (pthread_mutexattr_getprotocol): Likewise. + (pthread_mutexattr_setprioceiling): Likewise. + (pthread_mutexattr_getprioceiling): Likewise. + (pthread_attr_t): Add canceltype member. Update comments. + (SCHED_OTHER): Define this scheduling policy constant. + (SCHED_FIFO): Likewise. + (SCHED_RR): Likewise. + (SCHED_MIN): Define the lowest possible value for this constant. + (SCHED_MAX): Likewise, the maximum possible value. + (PTHREAD_CANCEL_ASYNCHRONOUS): Redefine. + (PTHREAD_CANCEL_DEFERRED): Likewise. + + * sched.c: New file. + (pthread_setschedparam): Implement. + (pthread_getschedparam): Implement. + (sched_get_priority_max): Validate policy argument. + (sched_get_priority_min): Likewise. + + * mutex.c (pthread_mutexattr_setprotocol): Remove; not supported. + (pthread_mutexattr_getprotocol): Likewise. + (pthread_mutexattr_setprioceiling): Likewise. + (pthread_mutexattr_getprioceiling): Likewise. + +Fri Jul 24 00:21:21 1998 Ross Johnson + + * create.c (pthread_create): Arg to ptw32_new_thread_entry() + changed. See next entry. Move mutex locks out. Changes made yesterday + and today allow us to start the new thread running rather than + temporarily suspended. + + * private.c (ptw32_new_thread_entry): ptw32_thread_table + was changed back to a table of thread structures rather than pointers. + As such we're trading storage for increaded speed. This routine + was modified to work with the new table. Mutex lock put in around + global data accesses. + (ptw32_find_thread_entry): Ditto + (ptw32_delete_thread_entry): Ditto + +Thu Jul 23 23:25:30 1998 Ross Johnson + + * global.c: New. Global data objects declared here. These moved from + pthread.h. + + * pthread.h: Move implementation hidden definitions into + implement.h. + + * implement.h: Move implementation hidden definitions from + pthread.h. Add constants to index into the different handler stacks. + + * cleanup.c (ptw32_handler_push): Simplify args. Restructure. + (ptw32_handler_pop): Simplify args. Restructure. + (ptw32_handler_pop_all): Simplify args. Restructure. + +Wed Jul 22 00:16:22 1998 Ross Johnson + + * attr.c, implement.h, pthread.h, ChangeLog: Resolve CVS merge + conflicts. + + * private.c (ptw32_find_thread_entry): Changes to return type + to support leaner ptw32_threads_table[] which now only stores + ptw32_thread_thread_t *. + (ptw32_new_thread_entry): Internal changes. + (ptw32_delete_thread_entry): Internal changes to avoid contention. + Calling routines changed accordingly. + + * pthread.h: Modified cleanup macros to use new generic push and pop. + Added destructor and atfork stacks to ptw32_threads_thread_t. + + * cleanup.c (ptw32_handler_push, ptw32_handler_pop, + ptw32_handler_pop_all): Renamed cleanup push and pop routines + and made generic to handle destructors and atfork handlers as + well. + + * create.c (ptw32_start_call): New function is a wrapper for + all new threads. It allows us to do some cleanup when the thread + returns, ie. that is otherwise only done if the thread is cancelled. + + * exit.c (ptw32_vacuum): New function contains code from + pthread_exit() that we need in the new ptw32_start_call() + as well. + + * implement.h: Various additions and minor changes. + + * pthread.h: Various additions and minor changes. + Change cleanup handler macros to use generic handler push and pop + functions. + + * attr.c: Minor mods to all functions. + (is_attr): Implemented missing function. + + * create.c (pthread_create): More clean up. + + * private.c (ptw32_find_thread_entry): Implement. + (ptw32_delete_thread_entry): Implement. + (ptw32_new_thread_entry): Implement. + These functions manipulate the implementations internal thread + table and are part of general code cleanup and modularisation. + They replace ptw32_getthreadindex() which was removed. + + * exit.c (pthread_exit): Changed to use the new code above. + + * pthread.h: Add cancelability constants. Update comments. + +1998-07-22 Ben Elliston + + * attr.c (pthread_setstacksize): Update test of attr argument. + (pthread_getstacksize): Likewise. + (pthread_setstackaddr): Likewise. + (pthread_getstackaddr): Likewise. + (pthread_attr_init): No need to allocate any storage. + (pthread_attr_destroy): No need to free any storage. + + * mutex.c (is_attr): Not likely to be needed; remove. + (remove_attr): Likewise. + (insert_attr): Likewise. + + * implement.h (ptw32_mutexattr_t): Moved to a public definition + in pthread.h. There was little gain in hiding these details. + (ptw32_condattr_t): Likewise. + (ptw32_attr_t): Likewise. + + * pthread.h (pthread_atfork): Add function prototype. + (pthread_attr_t): Moved here from implement.h. + + * fork.c (pthread_atfork): Preliminary implementation. + (ptw32_fork): Likewise. + +Wed Jul 22 00:16:22 1998 Ross Johnson + + * cleanup.c (ptw32_cleanup_push): Implement. + (ptw32_cleanup_pop): Implement. + (ptw32_do_cancellation): Implement. + These are private to the implementation. The real cleanup functions + are macros. See below. + + * pthread.h (pthread_cleanup_push): Implement as a macro. + (pthread_cleanup_pop): Implement as a macro. + Because these are macros which start and end a block, the POSIX scoping + requirement is observed. See the comment in the file. + + * exit.c (pthread_exit): Refine the code. + + * create.c (pthread_create): Code cleanup. + + * implement.h (RND_SIZEOF): Add RND_SIZEOF(T) to round sizeof(T) + up to multiple of DWORD. + Add function prototypes. + + * private.c (ptw32_getthreadindex): "*thread" should have been + "thread". Detect empty slot fail condition. + +1998-07-20 Ben Elliston + + * misc.c (pthread_once): Implement. Don't use a per-application + flag and mutex--make `pthread_once_t' contain these elements in + their structure. The earlier version had incorrect semantics. + + * pthread.h (ptw32_once_flag): Add new variable. Remove. + (ptw32_once_lock): Add new mutex lock to ensure integrity of + access to ptw32_once_flag. Remove. + (pthread_once): Add function prototype. + (pthread_once_t): Define this type. + +Mon Jul 20 02:31:05 1998 Ross Johnson + + * private.c (ptw32_getthreadindex): Implement. + + * pthread.h: Add application static data dependent on + _PTHREADS_BUILD_DLL define. This is needed to avoid allocating + non-sharable static data within the pthread DLL. + + * implement.h: Add ptw32_cleanup_stack_t, ptw32_cleanup_node_t + and PTW32_HASH_INDEX. + + * exit.c (pthread_exit): Begin work on cleanup and de-allocate + thread-private storage. + + * create.c (pthread_create): Add thread to thread table. + Keep a thread-private copy of the attributes with default values + filled in when necessary. Same for the cleanup stack. Make + pthread_create C run-time library friendly by using _beginthreadex() + instead of CreateThread(). Fix error returns. + +Sun Jul 19 16:26:23 1998 Ross Johnson + + * implement.h: Rename pthreads_thread_count to ptw32_threads_count. + Create ptw32_threads_thread_t struct to keep thread specific data. + + * create.c: Rename pthreads_thread_count to ptw32_threads_count. + (pthread_create): Handle errors from CreateThread(). + +1998-07-19 Ben Elliston + + * condvar.c (pthread_cond_wait): Generalise. Moved from here .. + (cond_wait): To here. + (pthread_cond_timedwait): Implement; use generalised cond_wait(). + + * pthread.h (pthread_key_t): Define this type. + (pthread_key_create): Add function prototype. + (pthread_setspecific): Likewise. + (pthread_getspecific): Likwise. + (pthread_key_delete): Likewise. + + * tsd.c (pthread_key_create): Implement. + (pthread_setspecific): Likewise. + (pthread_getspecific): Likewise. + (pthread_key_delete): Likewise. + + * mutex.c (pthread_mutex_trylock): Return ENOSYS if this function + is called on a Win32 platform which is not Windows NT. + +1998-07-18 Ben Elliston + + * condvar.c (pthread_condattr_init): Do not attempt to malloc any + storage; none is needed now that condattr_t is an empty struct. + (pthread_condattr_destory): Likewise; do not free storage. + (pthread_condattr_setpshared): No longer supported; return ENOSYS. + (pthread_condattr_getpshared): Likewise. + (pthread_cond_init): Implement with help from Douglas Schmidt. + Remember to initialise the cv's internal mutex. + (pthread_cond_wait): Likewise. + (pthread_cond_signal): Likewise. + (pthread_cond_broadcast): Likewise. + (pthread_cond_timedwait): Preliminary implementation, but I need + to see some API documentation for `WaitForMultipleObject'. + (pthread_destory): Implement. + + * pthread.h (pthread_cond_init): Add function protoype. + (pthread_cond_broadcast): Likewise. + (pthread_cond_signal): Likewise. + (pthread_cond_timedwait): Likewise. + (pthread_cond_wait): Likewise. + (pthread_cond_destroy): Likewise. + (pthread_cond_t): Define this type. Fix for u_int. Do not assume + that the mutex contained withing the pthread_cond_t structure will + be a critical section. Use our new POSIX type! + + * implement.h (ptw32_condattr_t): Remove shared attribute. + +1998-07-17 Ben Elliston + + * pthread.h (PTHREADS_PROCESS_PRIVATE): Remove. + (PTHREAD_PROCESS_SHARED): Likewise. No support for mutexes shared + across processes for now. + (pthread_mutex_t): Use a Win32 CRITICAL_SECTION type for better + performance. + + * implement.h (ptw32_mutexattr_t): Remove shared attribute. + + * mutex.c (pthread_mutexattr_setpshared): This optional function + is no longer supported, since we want to implement POSIX mutex + variables using the much more efficient Win32 critical section + primitives. Critical section objects in Win32 cannot be shared + between processes. + (pthread_mutexattr_getpshared): Likewise. + (pthread_mutexattr_init): No need to malloc any storage; the + attributes structure is now empty. + (pthread_mutexattr_destroy): This is now a nop. + (pthread_mutex_init): Use InitializeCriticalSection(). + (pthread_mutex_destroy): Use DeleteCriticalSection(). + (pthread_mutex_lock): Use EnterCriticalSection(). + (pthread_mutex_trylock): Use TryEnterCriticalSection(). This is + not supported by Windows 9x, but trylock is a hack anyway, IMHO. + (pthread_mutex_unlock): Use LeaveCriticalSection(). + +1998-07-14 Ben Elliston + + * attr.c (pthread_attr_setstacksize): Implement. + (pthread_attr_getstacksize): Likewise. + (pthread_attr_setstackaddr): Likewise. + (pthread_attr_getstackaddr): Likewise. + (pthread_attr_init): Likewise. + (pthread_attr_destroy): Likewise. + + * condvar.c (pthread_condattr_init): Add `_cond' to function name. + + * mutex.c (pthread_mutex_lock): Add `_mutex' to function name. + (pthread_mutex_trylock): Likewise. + (pthread_mutex_unlock): Likewise. + + * pthread.h (pthread_condattr_setpshared): Fix typo. + (pthread_attr_init): Add function prototype. + (pthread_attr_destroy): Likewise. + (pthread_attr_setstacksize): Likewise. + (pthread_attr_getstacksize): Likewise. + (pthread_attr_setstackaddr): Likewise. + (pthread_attr_getstackaddr): Likewise. + +Mon Jul 13 01:09:55 1998 Ross Johnson + + * implement.h: Wrap in #ifndef _IMPLEMENT_H + + * create.c (pthread_create): Map stacksize attr to Win32. + + * mutex.c: Include implement.h + +1998-07-13 Ben Elliston + + * condvar.c (pthread_condattr_init): Implement. + (pthread_condattr_destroy): Likewise. + (pthread_condattr_setpshared): Likewise. + (pthread_condattr_getpshared): Likewise. + + * implement.h (PTHREAD_THREADS_MAX): Remove trailing semicolon. + (PTHREAD_STACK_MIN): Specify; needs confirming. + (ptw32_attr_t): Define this type. + (ptw32_condattr_t): Likewise. + + * pthread.h (pthread_mutex_t): Define this type. + (pthread_condattr_t): Likewise. + (pthread_mutex_destroy): Add function prototype. + (pthread_lock): Likewise. + (pthread_trylock): Likewise. + (pthread_unlock): Likewise. + (pthread_condattr_init): Likewise. + (pthread_condattr_destroy): Likewise. + (pthread_condattr_setpshared): Likewise. + (pthread_condattr_getpshared): Likewise. + + * mutex.c (pthread_mutex_init): Implement. + (pthread_mutex_destroy): Likewise. + (pthread_lock): Likewise. + (pthread_trylock): Likewise. + (pthread_unlock): Likewise. + +1998-07-12 Ben Elliston + + * implement.h (ptw32_mutexattr_t): Define this implementation + internal type. Application programmers only see a mutex attribute + object as a void pointer. + + * pthread.h (pthread_mutexattr_t): Define this type. + (pthread_mutexattr_init): Add function prototype. + (pthread_mutexattr_destroy): Likewise. + (pthread_mutexattr_setpshared): Likewise. + (pthread_mutexattr_getpshared): Likewise. + (pthread_mutexattr_setprotocol): Likewise. + (pthread_mutexattr_getprotocol): Likewise. + (pthread_mutexattr_setprioceiling): Likewise. + (pthread_mutexattr_getprioceiling): Likewise. + (PTHREAD_PROCESS_PRIVATE): Define. + (PTHREAD_PROCESS_SHARED): Define. + + * mutex.c (pthread_mutexattr_init): Implement. + (pthread_mutexattr_destroy): Implement. + (pthread_mutexattr_setprotocol): Implement. + (pthread_mutexattr_getprotocol): Likewise. + (pthread_mutexattr_setprioceiling): Likewise. + (pthread_mutexattr_getprioceiling): Likewise. + (pthread_mutexattr_setpshared): Likewise. + (pthread_mutexattr_getpshared): Likewise. + (insert_attr): New function; very preliminary implementation! + (is_attr): Likewise. + (remove_attr): Likewise. + +Sat Jul 11 14:48:54 1998 Ross Johnson + + * implement.h: Preliminary implementation specific defines. + + * create.c (pthread_create): Preliminary implementation. + +1998-07-11 Ben Elliston + + * sync.c (pthread_join): Implement. + + * misc.c (pthread_equal): Likewise. + + * pthread.h (pthread_join): Add function prototype. + (pthread_equal): Likewise. + +1998-07-10 Ben Elliston + + * misc.c (pthread_self): Implement. + + * exit.c (pthread_exit): Implement. + + * pthread.h (pthread_exit): Add function prototype. + (pthread_self): Likewise. + (pthread_t): Define this type. + +1998-07-09 Ben Elliston + + * create.c (pthread_create): A dummy stub right now. + + * pthread.h (pthread_create): Add function prototype. diff --git a/src/WinLibs/pthreads/FAQ b/src/WinLibs/pthreads/FAQ new file mode 100644 index 000000000..ee8968ba4 --- /dev/null +++ b/src/WinLibs/pthreads/FAQ @@ -0,0 +1,403 @@ + ========================================= + PTHREADS-WIN32 Frequently Asked Questions + ========================================= + +INDEX +----- + +Q 1 What is it? + +Q 2 Which of the several dll versions do I use? + or, + What are all these pthread*.dll and pthread*.lib files? + +Q 3 What is the library naming convention? + +Q 4 Cleanup code default style or: it used to work when I built + the library myself, but now it doesn't - why? + +Q 5 Why is the default library version now less exception-friendly? + +Q 6 Should I use Cygwin or Mingw32 as a development environment? + +Q 7 Now that pthreads-win32 builds under Mingw32, why do I get + memory access violations (segfaults)? + +Q 8 How do I use pthread.dll for Win32 (Visual C++ 5.0) + +Q 9 Cancelation doesn't work for me, why? + +Q 10 How do I generate pthreadGCE.dll and libpthreadw32.a for use + with Mingw32? + +============================================================================= + +Q 1 What is it? +--- + +Pthreads-win32 is an Open Source Software implementation of the +Threads component of the POSIX 1003.1c 1995 Standard for Microsoft's +Win32 environment. Some functions from POSIX 1003.1b are also +supported including semaphores. Other related functions include +the set of read-write lock functions. The library also supports +some of the functionality of the Open Group's Single Unix +specification, version 2, namely mutex types. + +See the file "ANNOUNCE" for more information including standards +conformance details and list of supported routines. + + +------------------------------------------------------------------------------ + +Q 2 Which of the several dll versions do I use? +--- or, + What are all these pthread*.dll and pthread*.lib files? + +Simply, you only use one of them, but you need to choose carefully. + +The most important choice you need to make is whether to use a +version that uses exceptions internally, or not (there are versions +of the library that use exceptions as part of the thread +cancelation and cleanup implementation, and one that uses +setjmp/longjmp instead). + +There is some contension amongst POSIX threads experts as +to how POSIX threads cancelation and exit should work +with languages that include exceptions and handlers, e.g. +C++ and even C (Microsoft's Structured Exceptions). + +The issue is: should cancelation of a thread in, say, +a C++ application cause object destructors and C++ exception +handlers to be invoked as the stack unwinds during thread +exit, or not? + +There seems to be more opinion in favour of using the +standard C version of the library (no EH) with C++ applications +since this appears to be the assumption commercial pthreads +implementations make. Therefore, if you use an EH version +of pthreads-win32 then you may be under the illusion that +your application will be portable, when in fact it is likely to +behave very differently linked with other pthreads libraries. + +Now you may be asking: why have you kept the EH versions of +the library? + +There are a couple of reasons: +- there is division amongst the experts and so the code may + be needed in the future. (Yes, it's in the repository and we + can get it out anytime in the future, but ...) +- pthreads-win32 is one of the few implementations, and possibly + the only freely available one, that has EH versions. It may be + useful to people who want to play with or study application + behaviour under these conditions. + + +------------------------------------------------------------------------------ + +Q 3 What is the library naming convention? +--- + +Because the library is being built using various exception +handling schemes and compilers - and because the library +may not work reliably if these are mixed in an application, +each different version of the library has it's own name. + +Note 1: the incompatibility is really between EH implementations +of the different compilers. It should be possible to use the +standard C version from either compiler with C++ applications +built with a different compiler. If you use an EH version of +the library, then you must use the same compiler for the +application. This is another complication and dependency that +can be avoided by using only the standard C library version. + +Note 2: if you use a standard C pthread*.dll with a C++ +application, then any functions that you define that are +intended to be called via pthread_cleanup_push() must be +__cdecl. + +Note 3: the intention is to also name either the VC or GC +version (it should be arbitrary) as pthread.dll, including +pthread.lib and libpthread.a as appropriate. + +In general: + pthread[VG]{SE,CE,C}.dll + pthread[VG]{SE,CE,C}.lib + +where: + [VG] indicates the compiler + V - MS VC + G - GNU C + + {SE,CE,C} indicates the exception handling scheme + SE - Structured EH + CE - C++ EH + C - no exceptions - uses setjmp/longjmp + +For example: + pthreadVSE.dll (MSVC/SEH) + pthreadGCE.dll (GNUC/C++ EH) + pthreadGC.dll (GNUC/not dependent on exceptions) + +The GNU library archive file names have changed to: + + libpthreadGCE.a + libpthreadGC.a + + +------------------------------------------------------------------------------ + +Q 4 Cleanup code default style or: it used to work when I built +--- the library myself, but now it doesn't - why? + +Up to and including snapshot 2001-07-12, if not defined, the cleanup +style was determined automatically from the compiler used, and one +of the following was defined accordingly: + + __CLEANUP_SEH MSVC only + __CLEANUP_CXX C++, including MSVC++, GNU G++ + __CLEANUP_C C, including GNU GCC, not MSVC + +These defines determine the style of cleanup (see pthread.h) and, +most importantly, the way that cancelation and thread exit (via +pthread_exit) is performed (see the routine ptw32_throw() in private.c). + +In short, the exceptions versions of the library throw an exception +when a thread is canceled or exits (via pthread_exit()), which is +caught by a handler in the thread startup routine, so that the +the correct stack unwinding occurs regardless of where the thread +is when it's canceled or exits via pthread_exit(). + +After snapshot 2001-07-12, unless your build explicitly defines (e.g. +via a compiler option) __CLEANUP_SEH, __CLEANUP_CXX, or __CLEANUP_C, then +the build now ALWAYS defaults to __CLEANUP_C style cleanup. This style +uses setjmp/longjmp in the cancelation and pthread_exit implementations, +and therefore won't do stack unwinding even when linked to applications +that have it (e.g. C++ apps). This is for consistency with most/all +commercial Unix POSIX threads implementations. + +Although it was not clearly documented before, it is still necessary to +build your application using the same __CLEANUP_* define as was +used for the version of the library that you link with, so that the +correct parts of pthread.h are included. That is, the possible +defines require the following library versions: + + __CLEANUP_SEH pthreadVSE.dll + __CLEANUP_CXX pthreadVCE.dll or pthreadGCE.dll + __CLEANUP_C pthreadVC.dll or pthreadGC.dll + +THE POINT OF ALL THIS IS: if you have not been defining one of these +explicitly, then the defaults have been set according to the compiler +and language you are using, as described at the top of this +section. + +THIS NOW CHANGES, as has been explained above. For example: + +If you were building your application with MSVC++ i.e. using C++ +exceptions (rather than SEH) and not explicitly defining one of +__CLEANUP_*, then __CLEANUP_C++ was defined for you in pthread.h. +You should have been linking with pthreadVCE.dll, which does +stack unwinding. + +If you now build your application as you had before, pthread.h will now +set __CLEANUP_C as the default style, and you will need to link +with pthreadVC.dll. Stack unwinding will now NOT occur when a +thread is canceled, nor when the thread calls pthread_exit(). + +Your application will now most likely behave differently to previous +versions, and in non-obvious ways. Most likely is that local +objects may not be destroyed or cleaned up after a thread +is canceled. + +If you want the same behaviour as before, then you must now define +__CLEANUP_C++ explicitly using a compiler option and link with +pthreadVCE.dll as you did before. + + +------------------------------------------------------------------------------ + +Q 5 Why is the default library version now less exception-friendly? +--- + +Because most commercial Unix POSIX threads implementations don't allow you to +choose to have stack unwinding. (Compaq's TRU64 Unix is possibly an exception.) + +Therefore, providing it in pthread-win32 as a default could be dangerous +and non-portable. We still provide the choice but you must now consciously +make it. + +WHY NOT REMOVE THE EXCEPTIONS VERSIONS OF THE LIBRARY ALTOGETHER? +There are a few reasons: +- because there are well respected POSIX threads people who believe + that POSIX threads implementations should be exceptions-aware and + do the expected thing in that context. (There are equally respected + people who believe it should not be easily accessible, if it's there + at all.) +- because pthreads-win32 is one of the few implementations that has + the choice, perhaps the only freely available one, and so offers + a laboratory to people who may want to explore the effects; +- although the code will always be around somewhere for anyone who + wants it, once it's removed from the current version it will not be + nearly as visible to people who may have a use for it. + + +------------------------------------------------------------------------------ + +Q 6 Should I use Cygwin or Mingw32 as a development environment? +--- + +Important: see Q7 also. + +Use Mingw32 with the MSVCRT library to build applications that use +the pthreads DLL. + +Cygwin's own internal support for POSIX threads is growing. +Consult that project's documentation for more information. + +------------------------------------------------------------------------------ + +Q 7 Now that pthreads-win32 builds under Mingw32, why do I get +--- memory access violations (segfaults)? + +The latest Mingw32 package has thread-safe exception handling (see Q10). +Also, see Q6 above. + +------------------------------------------------------------------------------ + +Q 8 How do I use pthread.dll for Win32 (Visual C++ 5.0) +--- + +> +> I'm a "rookie" when it comes to your pthread implementation. I'm currently +> desperately trying to install the prebuilt .dll file into my MSVC compiler. +> Could you please provide me with explicit instructions on how to do this (or +> direct me to a resource(s) where I can acquire such information)? +> +> Thank you, +> + +You should have a .dll, .lib, .def, and three .h files. It is recommended +that you use pthreadVC.dll, rather than pthreadVCE.dll or pthreadVSE.dll +(see Q2 above). + +The .dll can go in any directory listed in your PATH environment +variable, so putting it into C:\WINDOWS should work. + +The .lib file can go in any directory listed in your LIB environment +variable. + +The .h files can go in any directory listed in your INCLUDE +environment variable. + +Or you might prefer to put the .lib and .h files into a new directory +and add its path to LIB and INCLUDE. You can probably do this easiest +by editing the file:- + +C:\Program Files\DevStudio\vc\bin\vcvars32.bat + +The .def file isn't used by anything in the pre-compiled version but +is included for information. + +Cheers. +Ross + +------------------------------------------------------------------------------ + +Q 9 Cancelation doesn't work for me, why? +--- + +> I'm investigating a problem regarding thread cancelation. The thread I want +> to cancel has PTHREAD_CANCEL_ASYNCHRONOUS, however, this piece of code +> blocks on the join(): +> +> if ((retv = Pthread_cancel( recvThread )) == 0) +> { +> retv = Pthread_join( recvThread, 0 ); +> } +> +> Pthread_* are just macro's; they call pthread_*. +> +> The thread recvThread seems to block on a select() call. It doesn't get +> cancelled. +> +> Two questions: +> +> 1) is this normal behaviour? +> +> 2) if not, how does the cancel mechanism work? I'm not very familliar to +> win32 programming, so I don't really understand how the *Event() family of +> calls work. + +The answer to your first question is, normal POSIX behaviour would +be to asynchronously cancel the thread. However, even that doesn't +guarantee cancelation as the standard only says it should be +cancelled as soon as possible. + +Snapshot 99-11-02 or earlier only partially supports asynchronous cancellation. +Snapshots since then simulate async cancelation by poking the address of +a cancelation routine into the PC of the threads context. This requires +the thread to be resumed in some way for the cancelation to actually +proceed. This is not true async cancelation, but it is as close as we've +been able to get to it. + +If the thread you're trying to cancel is blocked (for instance, it could be +waiting for data from the network), it will only get cancelled when it unblocks +(when the data arrives). For true pre-emptive cancelation in these cases, +pthreads-win32 from snapshot 2004-05-16 can automatically recognise and use the +QueueUserAPCEx package by Panagiotis E. Hadjidoukas. This package is available +from the pthreads-win32 ftp site and is included in the pthreads-win32 +self-unpacking zip from 2004-05-16 onwards. + +Using deferred cancelation would normally be the way to go, however, +even though the POSIX threads standard lists a number of C library +functions that are defined as deferred cancelation points, there is +no hookup between those which are provided by Windows and the +pthreads-win32 library. + +Incidently, it's worth noting for code portability that the older POSIX +threads standards cancelation point lists didn't include "select" because +(as I read in Butenhof) it wasn't part of POSIX. However, it does appear in +the SUSV3. + +Effectively, the only mandatory cancelation points that pthreads-win32 +recognises are those the library implements itself, ie. + + pthread_testcancel + pthread_cond_wait + pthread_cond_timedwait + pthread_join + sem_wait + sem_timedwait + pthread_delay_np + +The following routines from the non-mandatory list in SUSV3 are +cancelation points in pthreads-win32: + + pthread_rwlock_wrlock + pthread_rwlock_timedwrlock + +The following routines from the non-mandatory list in SUSV3 are not +cancelation points in pthreads-win32: + + pthread_rwlock_rdlock + pthread_rwlock_timedrdlock + +Pthreads-win32 also provides two functions that allow you to create +cancelation points within your application, but only for cases where +a thread is going to block on a Win32 handle. These are: + + pthreadCancelableWait(HANDLE waitHandle) /* Infinite wait */ + + pthreadCancelableTimedWait(HANDLE waitHandle, DWORD timeout) + +------------------------------------------------------------------------------ + + +Q 10 How do I create thread-safe applications using +---- pthreadGCE.dll, libpthreadw32.a and Mingw32? + +This should not be a problem with recent versions of MinGW32. + +For early versions, see Thomas Pfaff's email at: +http://sources.redhat.com/ml/pthreads-win32/2002/msg00000.html +------------------------------------------------------------------------------ + diff --git a/src/WinLibs/pthreads/MAINTAINERS b/src/WinLibs/pthreads/MAINTAINERS new file mode 100644 index 000000000..5b04e43f8 --- /dev/null +++ b/src/WinLibs/pthreads/MAINTAINERS @@ -0,0 +1,4 @@ +CVS Repository maintainers + +Ross Johnson rpj@ise.canberra.edu.au +Ben Elliston bje@cygnus.com diff --git a/src/WinLibs/pthreads/NEWS b/src/WinLibs/pthreads/NEWS new file mode 100644 index 000000000..4cd25f750 --- /dev/null +++ b/src/WinLibs/pthreads/NEWS @@ -0,0 +1,1110 @@ +RELEASE 2.8.0 +------------- +(2006-12-22) + +General +------- +New bug fixes in this release since 2.7.0 have not been applied to the +version 1.x.x series. It is probably time to drop version 1. + +Testing and verification +------------------------ +This release has not yet been tested on SMP architechtures. All tests pass +on a uni-processor system. + +Bug fixes +--------- +Sem_destroy could return EBUSY even though no threads were waiting on the +semaphore. Other races around invalidating semaphore structs (internally) +have been removed as well. + +New tests +--------- +semaphore5.c - tests the bug fix referred to above. + + +RELEASE 2.7.0 +------------- +(2005-06-04) + +General +------- +All new features in this release have been back-ported in release 1.11.0, +including the incorporation of MCS locks in pthread_once, however, versions +1 and 2 remain incompatible even though they are now identical in +performance and functionality. + +Testing and verification +------------------------ +This release has been tested (passed the test suite) on both uni-processor +and multi-processor systems. +- Tim Theisen + +Bug fixes +--------- +Pthread_once has been re-implemented to remove priority boosting and other +complexity to improve robustness. Races for Win32 handles that are not +recycle-unique have been removed. The general form of pthread_once is now +the same as that suggested earlier by Alexander Terekhov, but instead of the +'named mutex', a queue-based lock has been implemented which has the required +properties of dynamic self initialisation and destruction. This lock is also +efficient. The ABI is unaffected in as much as the size of pthread_once_t has +not changed and PTHREAD_ONCE_INIT has not changed, however, applications that +peek inside pthread_once_t, which is supposed to be opaque, will break. +- Vladimir Kliatchko + +New features +------------ +* Support for Mingw cross development tools added to GNUmakefile. +Mingw cross tools allow building the libraries on Linux. +- Mikael Magnusson + + +RELEASE 2.6.0 +------------- +(2005-05-19) + +General +------- +All of the bug fixes and new features in this release have been +back-ported in release 1.10.0. + +Testing and verification +------------------------ +This release has been tested (passed the test suite) on both uni-processor +and multi-processor systems. Thanks to Tim Theisen at TomoTherapy for +exhaustively running the MP tests and for providing crutial observations +and data when faults are detected. + +Bugs fixed +---------- + +* pthread_detach() now reclaims remaining thread resources if called after +the target thread has terminated. Previously, this routine did nothing in +this case. + +New tests +--------- + +* detach1.c - tests that pthread_detach properly invalidates the target +thread, which indicates that the thread resources have been reclaimed. + + +RELEASE 2.5.0 +------------- +(2005-05-09) + +General +------- + +The package now includes a reference documentation set consisting of +HTML formatted Unix-style manual pages that have been edited for +consistency with Pthreads-w32. The set can also be read online at: +http://sources.redhat.com/pthreads-win32/manual/index.html + +Thanks again to Tim Theisen for running the test suite pre-release +on an MP system. + +All of the bug fixes and new features in this release have been +back-ported in release 1.9.0. + +Bugs fixed +---------- + +* Thread Specific Data (TSD) key management has been ammended to +eliminate a source of (what was effectively) resource leakage (a HANDLE +plus memory for each key destruct routine/thread association). This was +not a true leak because these resources were eventually reclaimed when +pthread_key_delete was run AND each thread referencing the key had exited. +The problem was that these two conditions are often not met until very +late, and often not until the process is about to exit. + +The ammended implementation avoids the need for the problematic HANDLE +and reclaims the memory as soon as either the key is deleted OR the +thread exits, whichever is first. + +Thanks to Richard Hughes at Aculab for identifying and locating the leak. + +* TSD key destructors are now processed up to PTHREAD_DESTRUCTOR_ITERATIONS +times instead of just once. PTHREAD_DESTRUCTOR_ITERATIONS has been +defined in pthread.h for some time but not used. + +* Fix a semaphore accounting race between sem_post/sem_post_multiple +and sem_wait cancellation. This is the same issue as with +sem_timedwait that was fixed in the last release. + +* sem_init, sem_post, and sem_post_multiple now check that the +semaphore count never exceeds _POSIX_SEM_VALUE_MAX. + +* Although sigwait() is nothing more than a no-op, it should at least +be a cancellation point to be consistent with the standard. + +New tests +--------- + +* stress1.c - attempts to expose problems in condition variable +and semaphore timed wait logic. This test was inspired by Stephan +Mueller's sample test code used to identify the sem_timedwait bug +from the last release. It's not a part of the regular test suite +because it can take awhile to run. To run it: +nmake clean VC-stress + +* tsd2.c - tests that key destructors are re-run if the tsd key value is +not NULL after the destructor routine has run. Also tests that +pthread_setspecific() and pthread_getspecific() are callable from +destructors. + + +RELEASE 2.4.0 +------------- +(2005-04-26) + +General +------- + +There is now no plan to release a version 3.0.0 to fix problems in +pthread_once(). Other possible implementations of pthread_once +will still be investigated for a possible future release in an attempt +to reduce the current implementation's complexity. + +All of the bug fixes and new features in this release have been +back-ported for release 1.8.0. + +Bugs fixed +---------- + +* Fixed pthread_once race (failures on an MP system). Thanks to +Tim Theisen for running exhaustive pre-release testing on his MP system +using a range of compilers: + VC++ 6 + VC++ 7.1 + Intel C++ version 8.0 +All tests passed. +Some minor speed improvements were also done. + +* Fix integer overrun error in pthread_mutex_timedlock() - missed when +sem_timedwait() was fixed in release 2.2.0. This routine no longer returns +ENOTSUP when NEED_SEM is defined - it is supported (NEED_SEM is only +required for WinCE versions prior to 3.0). + +* Fix timeout bug in sem_timedwait(). +- Thanks to Stephan Mueller for reporting, providing diagnostic output +and test code. + +* Fix several problems in the NEED_SEM conditionally included code. +NEED_SEM included code is provided for systems that don't implement W32 +semaphores, such as WinCE prior to version 3.0. An alternate implementation +of POSIX semaphores is built using W32 events for these systems when +NEED_SEM is defined. This code has been completely rewritten in this +release to reuse most of the default POSIX semaphore code, and particularly, +to implement all of the sem_* routines supported by pthreads-win32. Tim +Theisen also run the test suite over the NEED_SEM code on his MP system. All +tests passed. + +* The library now builds without errors for the Borland Builder 5.5 compiler. + +New features +------------ + +* pthread_mutex_timedlock() and all sem_* routines provided by +pthreads-win32 are now implemented for WinCE versions prior to 3.0. Those +versions did not implement W32 semaphores. Define NEED_SEM in config.h when +building the library for these systems. + +Known issues in this release +---------------------------- + +* pthread_once is too complicated - but it works as far as testing can +determine.. + +* The Borland version of the dll fails some of the tests with a memory read +exception. The cause is not yet known but a compiler bug has not been ruled +out. + + +RELEASE 2.3.0 +------------- +(2005-04-12) + +General +------- + +Release 1.7.0 is a backport of features and bug fixes new in +this release. See earlier notes under Release 2.0.0/General. + +Bugs fixed +---------- + +* Fixed pthread_once potential for post once_routine cancellation +hanging due to starvation. See comments in pthread_once.c. +Momentary priority boosting is used to ensure that, after a +once_routine is cancelled, the thread that will run the +once_routine is not starved by higher priority waiting threads at +critical times. Priority boosting occurs only AFTER a once_routine +cancellation, and is applied only to that once_control. The +once_routine is run at the thread's normal base priority. + +New tests +--------- + +* once4.c: Aggressively tests pthread_once() under realtime +conditions using threads with varying priorities. Windows' +random priority boosting does not occur for threads with realtime +priority levels. + + +RELEASE 2.2.0 +------------- +(2005-04-04) + +General +------- + +* Added makefile targets to build static link versions of the library. +Both MinGW and MSVC. Please note that this does not imply any change +to the LGPL licensing, which still imposes psecific conditions on +distributing software that has been statically linked with this library. + +* There is a known bug in pthread_once(). Cancellation of the init_routine +exposes a potential starvation (i.e. deadlock) problem if a waiting thread +has a higher priority than the initting thread. This problem will be fixed +in version 3.0.0 of the library. + +Bugs fixed +---------- + +* Fix integer overrun error in sem_timedwait(). +Kevin Lussier + +* Fix preprocessor directives for static linking. +Dimitar Panayotov + + +RELEASE 2.1.0 +------------- +(2005-03-16) + +Bugs fixed +---------- + +* Reverse change to pthread_setcancelstate() in 2.0.0. + + +RELEASE 2.0.0 +------------- +(2005-03-16) + +General +------- + +This release represents an ABI change and the DLL version naming has +incremented from 1 to 2, e.g. pthreadVC2.dll. + +Version 1.4.0 back-ports the new functionality included in this +release. Please distribute DLLs built from that version with updates +to applications built on pthreads-win32 version 1.x.x. + +The package naming has changed, replacing the snapshot date with +the version number + descriptive information. E.g. this +release is "pthreads-w32-2-0-0-release". + +Bugs fixed +---------- + +* pthread_setcancelstate() no longer checks for a pending +async cancel event if the library is using alertable async +cancel. See the README file (Prerequisites section) for info +on adding alertable async cancelation. + +New features +------------ + +* pthread_once() now supports init_routine cancellability. + +New tests +--------- + +* Agressively test pthread_once() init_routine cancellability. + + +SNAPSHOT 2005-03-08 +------------------- +Version 1.3.0 + +Bug reports (fixed) +------------------- + +* Implicitly created threads leave Win32 handles behind after exiting. +- Dmitrii Semii + +* pthread_once() starvation problem. +- Gottlob Frege + +New tests +--------- + +* More intense testing of pthread_once(). + + +SNAPSHOT 2005-01-25 +------------------- +Version 1.2.0 + +Bug fixes +--------- + +* Attempted acquisition of a recursive mutex could cause waiting threads +to not be woken when the mutex was released. +- Ralf Kubis + +* Various package omissions have been fixed. + + +SNAPSHOT 2005-01-03 +------------------- +Version 1.1.0 + +Bug fixes +--------- + +* Unlocking recursive or errorcheck mutexes would sometimes +unexpectedly return an EPERM error (bug introduced in +snapshot-2004-11-03). +- Konstantin Voronkov + + +SNAPSHOT 2004-11-22 +------------------- +Version 1.0.0 + +This snapshot primarily fixes the condvar bug introduced in +snapshot-2004-11-03. DLL versioning has also been included to allow +applications to runtime check the Microsoft compatible DLL version +information, and to extend the DLL naming system for ABI and major +(non-backward compatible) API changes. See the README file for details. + +Bug fixes +--------- + +* Condition variables no longer deadlock (bug introduced in +snapshot-2004-11-03). +- Alexander Kotliarov and Nicolas at saintmac + +* DLL naming extended to avoid 'DLL hell' in the future, and to +accommodate the ABI change introduced in snapshot-2004-11-03. Snapshot +2004-11-03 will be removed from FTP sites. + +New features +------------ + +* A Microsoft-style version resource has been added to the DLL for +applications that wish to check DLL compatibility at runtime. + +* Pthreads-win32 DLL naming has been extended to allow incompatible DLL +versions to co-exist in the same filesystem. See the README file for details, +but briefly: while the version information inside the DLL will change with +each release from now on, the DLL version names will only change if the new +DLL is not backward compatible with older applications. + +The versioning scheme has been borrowed from GNU Libtool, and the DLL +naming scheme is from Cygwin. Provided the Libtool-style numbering rules are +honoured, the Cygwin DLL naming scheme automatcally ensures that DLL name +changes are minimal and that applications will not load an incompatible +pthreads-win32 DLL. + +Those who use the pre-built DLLs will find that the DLL/LIB names have a new +suffix (1) in this snapshot. E.g. pthreadVC1.dll etc. + +* The POSIX thread ID reuse uniqueness feature introduced in the last snapshot +has been kept as default, but the behaviour can now be controlled when the DLL +is built to effectively switch it off. This makes the library much more +sensitive to applications that assume that POSIX thread IDs are unique, i.e. +are not strictly compliant with POSIX. See the PTW32_THREAD_ID_REUSE_INCREMENT +macro comments in config.h for details. + +Other changes +------------- +Certain POSIX macros have changed. + +These changes are intended to conform to the Single Unix Specification version 3, +which states that, if set to 0 (zero) or not defined, then applications may use +sysconf() to determine their values at runtime. Pthreads-win32 does not +implement sysconf(). + +The following macros are no longer undefined, but defined and set to -1 +(not implemented): + + _POSIX_THREAD_ATTR_STACKADDR + _POSIX_THREAD_PRIO_INHERIT + _POSIX_THREAD_PRIO_PROTECT + _POSIX_THREAD_PROCESS_SHARED + +The following macros are defined and set to 200112L (implemented): + + _POSIX_THREADS + _POSIX_THREAD_SAFE_FUNCTIONS + _POSIX_THREAD_ATTR_STACKSIZE + _POSIX_THREAD_PRIORITY_SCHEDULING + _POSIX_SEMAPHORES + _POSIX_READER_WRITER_LOCKS + _POSIX_SPIN_LOCKS + _POSIX_BARRIERS + +The following macros are defined and set to appropriate values: + + _POSIX_THREAD_THREADS_MAX + _POSIX_SEM_VALUE_MAX + _POSIX_SEM_NSEMS_MAX + PTHREAD_DESTRUCTOR_ITERATIONS + PTHREAD_KEYS_MAX + PTHREAD_STACK_MIN + PTHREAD_THREADS_MAX + + +SNAPSHOT 2004-11-03 +------------------- + +DLLs produced from this snapshot cannot be used with older applications without +recompiling the application, due to a change to pthread_t to provide unique POSIX +thread IDs. + +Although this snapshot passes the extended test suite, many of the changes are +fairly major, and some applications may show different behaviour than previously, +so adopt with care. Hopefully, any changed behaviour will be due to the library +being better at it's job, not worse. + +Bug fixes +--------- + +* pthread_create() no longer accepts NULL as the thread reference arg. +A segfault (memory access fault) will result, and no thread will be +created. + +* pthread_barrier_wait() no longer acts as a cancelation point. + +* Fix potential race condition in pthread_once() +- Tristan Savatier + +* Changes to pthread_cond_destroy() exposed some coding weaknesses in several +test suite mini-apps because pthread_cond_destroy() now returns EBUSY if the CV +is still in use. + +New features +------------ + +* Added for compatibility: +PTHREAD_RECURSIVE_MUTEX_INITIALIZER, +PTHREAD_ERRORCHECK_MUTEX_INITIALIZER, +PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, +PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP + +* Initial support for Digital Mars compiler +- Anuj Goyal + +* Faster Mutexes. These have been been rewritten following a model provided by +Alexander Terekhov that reduces kernel space checks, and eliminates some additional +critical sections used to manage a race between timedlock expiration and unlock. +Please be aware that the new mutexes do not enforce strict absolute FIFO scheduling +of mutexes, however any out-of-order lock acquisition should be very rare. + +* Faster semaphores. Following a similar model to mutexes above, these have been +rewritten to use preliminary users space checks. + +* sem_getvalue() now returns the number of waiters. + +* The POSIX thread ID now has much stronger uniqueness characteristics. The library +garrantees not to reuse the same thread ID for at least 2^(wordsize) thread +destruction/creation cycles. + +New tests +--------- + +* semaphore4.c: Tests cancelation of the new sem_wait(). + +* semaphore4t.c: Likewise for sem_timedwait(). + +* rwlock8.c: Tests and times the slow execution paths of r/w locks, and the CVs, +mutexes, and semaphores that they're built on. + + +SNAPSHOT 2004-05-16 +------------------- + +Attempt to add Watcom to the list of compilers that can build the library. +This failed in the end due to it's non-thread-aware errno. The library +builds but the test suite fails. See README.Watcom for more details. + +Bug fixes +--------- +* Bug and memory leak in sem_init() +- Alex Blanco + +* ptw32_getprocessors() now returns CPU count of 1 for WinCE. +- James Ewing + +* pthread_cond_wait() could be canceled at a point where it should not +be cancelable. Fixed. +- Alexander Terekhov + +* sem_timedwait() had an incorrect timeout calculation. +- Philippe Di Cristo + +* Fix a memory leak left behind after threads are destroyed. +- P. van Bruggen + +New features +------------ +* Ported to AMD64. +- Makoto Kato + +* True pre-emptive asynchronous cancelation of threads. This is optional +and requires that Panagiotis E. Hadjidoukas's QueueUserAPCEx package be +installed. This package is included in the pthreads-win32 self-unpacking +Zip archive starting from this snapshot. See the README.txt file inside +the package for installation details. + +Note: If you don't use async cancelation in your application, or don't need +to cancel threads that are blocked on system resources such as network I/O, +then the default non-preemptive async cancelation is probably good enough. +However, pthreads-win32 auto-detects the availability of these components +at run-time, so you don't need to rebuild the library from source if you +change your mind later. + +All of the advice available in books and elsewhere on the undesirability +of using async cancelation in any application still stands, but this +feature is a welcome addition with respect to the library's conformance to +the POSIX standard. + +SNAPSHOT 2003-09-18 +------------------- + +Cleanup of thread priority management. In particular, setting of thread +priority now attempts to map invalid Win32 values within the range returned +by sched_get_priority_min/max() to useful values. See README.NONPORTABLE +under "Thread priority". + +Bug fixes +--------- +* pthread_getschedparam() now returns the priority given by the most recent +call to pthread_setschedparam() or established by pthread_create(), as +required by the standard. Previously, pthread_getschedparam() incorrectly +returned the running thread priority at the time of the call, which may have +been adjusted or temporarily promoted/demoted. + +* sched_get_priority_min() and sched_get_priority_max() now return -1 on error +and set errno. Previously, they incorrectly returned the error value directly. + + +SNAPSHOT 2003-09-04 +------------------- + +Bug fixes +--------- +* ptw32_cancelableWait() now allows cancelation of waiting implicit POSIX +threads. + +New test +-------- +* cancel8.c tests cancelation of Win32 threads waiting at a POSIX cancelation +point. + + +SNAPSHOT 2003-09-03 +------------------- + +Bug fixes +--------- +* pthread_self() would free the newly created implicit POSIX thread handle if +DuplicateHandle failed instead of recycle it (very unlikely). + +* pthread_exit() was neither freeing nor recycling the POSIX thread struct +for implicit POSIX threads. + +New feature - Cancelation of/by Win32 (non-POSIX) threads +--------------------------------------------------------- +Since John Bossom's original implementation, the library has allowed non-POSIX +initialised threads (Win32 threads) to call pthreads-win32 routines and +therefore interact with POSIX threads. This is done by creating an on-the-fly +POSIX thread ID for the Win32 thread that, once created, allows fully +reciprical interaction. This did not extend to thread cancelation (async or +deferred). Now it does. + +Any thread can be canceled by any other thread (Win32 or POSIX) if the former +thread's POSIX pthread_t value is known. It's TSD destructors and POSIX +cleanup handlers will be run before the thread exits with an exit code of +PTHREAD_CANCELED (retrieved with GetExitCodeThread()). + +This allows a Win32 thread to, for example, call POSIX CV routines in the same way +that POSIX threads would/should, with pthread_cond_wait() cancelability and +cleanup handlers (pthread_cond_wait() is a POSIX cancelation point). + +By adding cancelation, Win32 threads should now be able to call all POSIX +threads routines that make sense including semaphores, mutexes, condition +variables, read/write locks, barriers, spinlocks, tsd, cleanup push/pop, +cancelation, pthread_exit, scheduling, etc. + +Note that these on-the-fly 'implicit' POSIX thread IDs are initialised as detached +(not joinable) with deferred cancelation type. The POSIX thread ID will be created +automatically by any POSIX routines that need a POSIX handle (unless the routine +needs a pthread_t as a parameter of course). A Win32 thread can discover it's own +POSIX thread ID by calling pthread_self(), which will create the handle if +necessary and return the pthread_t value. + +New tests +--------- +Test the above new feature. + + +SNAPSHOT 2003-08-19 +------------------- + +This snapshot fixes some accidental corruption to new test case sources. +There are no changes to the library source code. + + +SNAPSHOT 2003-08-15 +------------------- + +Bug fixes +--------- + +* pthread.dsp now uses correct compile flags (/MD). +- Viv + +* pthread_win32_process_detach_np() fixed memory leak. +- Steven Reddie + +* pthread_mutex_destroy() fixed incorrect return code. +- Nicolas Barry + +* pthread_spin_destroy() fixed memory leak. +- Piet van Bruggen + +* Various changes to tighten arg checking, and to work with later versions of +MinGW32 and MsysDTK. + +* pthread_getschedparam() etc, fixed dangerous thread validity checking. +- Nicolas Barry + +* POSIX thread handles are now reused and their memory is not freed on thread exit. +This allows for stronger thread validity checking. + +New standard routine +-------------------- + +* pthread_kill() added to provide thread validity checking to applications. +It does not accept any non zero values for the signal arg. + +New test cases +-------------- + +* New test cases to confirm validity checking, pthread_kill(), and thread reuse. + + +SNAPSHOT 2003-05-10 +------------------- + +Bug fixes +--------- + +* pthread_mutex_trylock() now returns correct error values. +pthread_mutex_destroy() will no longer destroy a recursively locked mutex. +pthread_mutex_lock() is no longer inadvertantly behaving as a cancelation point. +- Thomas Pfaff + +* pthread_mutex_timedlock() no longer occasionally sets incorrect mutex +ownership, causing deadlocks in some applications. +- Robert Strycek and Alexander Terekhov + + +SNAPSHOT 2002-11-04 +------------------- + +Bug fixes +--------- + +* sem_getvalue() now returns the correct value under Win NT and WinCE. +- Rob Fanner + +* sem_timedwait() now uses tighter checks for unreasonable +abstime values - that would result in unexpected timeout values. + +* ptw32_cond_wait_cleanup() no longer mysteriously consumes +CV signals but may produce more spurious wakeups. It is believed +that the sem_timedwait() call is consuming a CV signal that it +shouldn't. +- Alexander Terekhov + +* Fixed a memory leak in ptw32_threadDestroy() for implicit threads. + +* Fixed potential for deadlock in pthread_cond_destroy(). +A deadlock could occur for statically declared CVs (PTHREAD_COND_INITIALIZER), +when one thread is attempting to destroy the condition variable while another +is attempting to dynamically initialize it. +- Michael Johnson + + +SNAPSHOT 2002-03-02 +------------------- + +Cleanup code default style. (IMPORTANT) +---------------------------------------------------------------------- +Previously, if not defined, the cleanup style was determined automatically +from the compiler/language, and one of the following was defined accordingly: + + __CLEANUP_SEH MSVC only + __CLEANUP_CXX C++, including MSVC++, GNU G++ + __CLEANUP_C C, including GNU GCC, not MSVC + +These defines determine the style of cleanup (see pthread.h) and, +most importantly, the way that cancelation and thread exit (via +pthread_exit) is performed (see the routine ptw32_throw() in private.c). + +In short, the exceptions versions of the library throw an exception +when a thread is canceled or exits (via pthread_exit()), which is +caught by a handler in the thread startup routine, so that the +the correct stack unwinding occurs regardless of where the thread +is when it's canceled or exits via pthread_exit(). + +In this and future snapshots, unless the build explicitly defines (e.g. +via a compiler option) __CLEANUP_SEH, __CLEANUP_CXX, or __CLEANUP_C, then +the build NOW always defaults to __CLEANUP_C style cleanup. This style +uses setjmp/longjmp in the cancelation and pthread_exit implementations, +and therefore won't do stack unwinding even when linked to applications +that have it (e.g. C++ apps). This is for consistency with most +current commercial Unix POSIX threads implementations. Compaq's TRU64 +may be an exception (no pun intended) and possible future trend. + +Although it was not clearly documented before, it is still necessary to +build your application using the same __CLEANUP_* define as was +used for the version of the library that you link with, so that the +correct parts of pthread.h are included. That is, the possible +defines require the following library versions: + + __CLEANUP_SEH pthreadVSE.dll + __CLEANUP_CXX pthreadVCE.dll or pthreadGCE.dll + __CLEANUP_C pthreadVC.dll or pthreadGC.dll + +E.g. regardless of whether your app is C or C++, if you link with +pthreadVC.lib or libpthreadGC.a, then you must define __CLEANUP_C. + + +THE POINT OF ALL THIS IS: if you have not been defining one of these +explicitly, then the defaults as described at the top of this +section were being used. + +THIS NOW CHANGES, as has been explained above, but to try to make this +clearer here's an example: + +If you were building your application with MSVC++ i.e. using C++ +exceptions and not explicitly defining one of __CLEANUP_*, then +__CLEANUP_C++ was automatically defined for you in pthread.h. +You should have been linking with pthreadVCE.dll, which does +stack unwinding. + +If you now build your application as you had before, pthread.h will now +automatically set __CLEANUP_C as the default style, and you will need to +link with pthreadVC.dll. Stack unwinding will now NOT occur when a thread +is canceled, or the thread calls pthread_exit(). + +Your application will now most likely behave differently to previous +versions, and in non-obvious ways. Most likely is that locally +instantiated objects may not be destroyed or cleaned up after a thread +is canceled. + +If you want the same behaviour as before, then you must now define +__CLEANUP_C++ explicitly using a compiler option and link with +pthreadVCE.dll as you did before. + + +WHY ARE WE MAKING THE DEFAULT STYLE LESS EXCEPTION-FRIENDLY? +Because no commercial Unix POSIX threads implementation allows you to +choose to have stack unwinding. Therefore, providing it in pthread-win32 +as a default is dangerous. We still provide the choice but unless +you consciously choose to do otherwise, your pthreads applications will +now run or crash in similar ways irrespective of the threads platform +you use. Or at least this is the hope. + + +WHY NOT REMOVE THE EXCEPTIONS VERSIONS OF THE LIBRARY ALTOGETHER? +There are a few reasons: +- because there are well respected POSIX threads people who believe + that POSIX threads implementations should be exceptions aware and + do the expected thing in that context. (There are equally respected + people who believe it should not be easily accessible, if it's there + at all, for unconditional conformity to other implementations.) +- because pthreads-win32 is one of the few implementations that has + the choice, perhaps the only freely available one, and so offers + a laboratory to people who may want to explore the effects; +- although the code will always be around somewhere for anyone who + wants it, once it's removed from the current version it will not be + nearly as visible to people who may have a use for it. + + +Source module splitting +----------------------- +In order to enable smaller image sizes to be generated +for applications that link statically with the library, +most routines have been separated out into individual +source code files. + +This is being done in such a way as to be backward compatible. +The old source files are reused to congregate the individual +routine files into larger translation units (via a bunch of +# includes) so that the compiler can still optimise wherever +possible, e.g. through inlining, which can only be done +within the same translation unit. + +It is also possible to build the entire library by compiling +the single file named "pthread.c", which just #includes all +the secondary congregation source files. The compiler +may be able to use this to do more inlining of routines. + +Although the GNU compiler is able to produce libraries with +the necessary separation (the -ffunction-segments switch), +AFAIK, the MSVC and other compilers don't have this feature. + +Finally, since I use makefiles and command-line compilation, +I don't know what havoc this reorganisation may wreak amongst +IDE project file users. You should be able to continue +using your existing project files without modification. + + +New non-portable functions +-------------------------- +pthread_num_processors_np(): + Returns the number of processors in the system that are + available to the process, as determined from the processor + affinity mask. + +pthread_timechange_handler_np(): + To improve tolerance against operator or time service initiated + system clock changes. + + This routine can be called by an application when it + receives a WM_TIMECHANGE message from the system. At present + it broadcasts all condition variables so that waiting threads + can wake up and re-evaluate their conditions and restart + their timed waits if required. + - Suggested by Alexander Terekhov + + +Platform dependence +------------------- +As Win95 doesn't provide one, the library now contains +it's own InterlockedCompareExchange() routine, which is used +whenever Windows doesn't provide it. InterlockedCompareExchange() +is used to implement spinlocks and barriers, and also in mutexes. +This routine relies on the CMPXCHG machine instruction which +is not available on i386 CPUs. This library (from snapshot +20010712 onwards) is therefore no longer supported on i386 +processor platforms. + + +New standard routines +--------------------- +For source code portability only - rwlocks cannot be process shared yet. + + pthread_rwlockattr_init() + pthread_rwlockattr_destroy() + pthread_rwlockattr_setpshared() + pthread_rwlockattr_getpshared() + +As defined in the new POSIX standard, and the Single Unix Spec version 3: + + sem_timedwait() + pthread_mutex_timedlock() - Alexander Terekhov and Thomas Pfaff + pthread_rwlock_timedrdlock() - adapted from pthread_rwlock_rdlock() + pthread_rwlock_timedwrlock() - adapted from pthread_rwlock_wrlock() + + +pthread.h no longer includes windows.h +-------------------------------------- +[Not yet for G++] + +This was done to prevent conflicts. + +HANDLE, DWORD, and NULL are temporarily defined within pthread.h if +they are not already. + + +pthread.h, sched.h and semaphore.h now use dllexport/dllimport +-------------------------------------------------------------- +Not only to avoid the need for the pthread.def file, but to +improve performance. Apparently, declaring functions with dllimport +generates a direct call to the function and avoids the overhead +of a stub function call. + +Bug fixes +--------- +* Fixed potential NULL pointer dereferences in pthread_mutexattr_init, +pthread_mutexattr_getpshared, pthread_barrierattr_init, +pthread_barrierattr_getpshared, and pthread_condattr_getpshared. +- Scott McCaskill + +* Removed potential race condition in pthread_mutex_trylock and +pthread_mutex_lock; +- Alexander Terekhov + +* The behaviour of pthread_mutex_trylock in relation to +recursive mutexes was inconsistent with commercial implementations. +Trylock would return EBUSY if the lock was owned already by the +calling thread regardless of mutex type. Trylock now increments the +recursion count and returns 0 for RECURSIVE mutexes, and will +return EDEADLK rather than EBUSY for ERRORCHECK mutexes. This is +consistent with Solaris. +- Thomas Pfaff + +* Found a fix for the library and workaround for applications for +the known bug #2, i.e. where __CLEANUP_CXX or __CLEANUP_SEH is defined. +See the "Known Bugs in this snapshot" section below. + +This could be made transparent to applications by replacing the macros that +define the current C++ and SEH versions of pthread_cleanup_push/pop +with the C version, but AFAIK cleanup handlers would not then run in the +correct sequence with destructors and exception cleanup handlers when +an exception occurs. + +* Cancelation once started in a thread cannot now be inadvertantly +double canceled. That is, once a thread begins it's cancelation run, +cancelation is disabled and a subsequent cancel request will +return an error (ESRCH). + +* errno: An incorrect compiler directive caused a local version +of errno to be used instead of the Win32 errno. Both instances are +thread-safe but applications checking errno after a pthreads-win32 +call would be wrong. Fixing this also fixed a bad compiler +option in the testsuite (/MT should have been /MD) which is +needed to link with the correct library MSVCRT.LIB. + + +SNAPSHOT 2001-07-12 +------------------- + +To be added + + +SNAPSHOT 2001-07-03 +------------------- + +To be added + + +SNAPSHOT 2000-08-13 +------------------- + +New: +- Renamed DLL and LIB files: + pthreadVSE.dll (MS VC++/Structured EH) + pthreadVSE.lib + pthreadVCE.dll (MS VC++/C++ EH) + pthreadVCE.lib + pthreadGCE.dll (GNU G++/C++ EH) + libpthreadw32.a + + Both your application and the pthread dll should use the + same exception handling scheme. + +Bugs fixed: +- MSVC++ C++ exception handling. + +Some new tests have been added. + + +SNAPSHOT 2000-08-10 +------------------- + +New: +- asynchronous cancelation on X86 (Jason Nye) +- Makefile compatible with MS nmake to replace + buildlib.bat +- GNUmakefile for Mingw32 +- tests/Makefile for MS nmake replaces runall.bat +- tests/GNUmakefile for Mingw32 + +Bugs fixed: +- kernel32 load/free problem +- attempt to hide internel exceptions from application + exception handlers (__try/__except and try/catch blocks) +- Win32 thread handle leakage bug + (David Baggett/Paul Redondo/Eyal Lebedinsky) + +Some new tests have been added. + + +SNAPSHOT 1999-11-02 +------------------- + +Bugs fixed: +- ctime_r macro had an incorrect argument (Erik Hensema), +- threads were not being created + PTHREAD_CANCEL_DEFERRED. This should have + had little effect as deferred is the only + supported type. (Ross Johnson). + +Some compatibility improvements added, eg. +- pthread_setcancelstate accepts NULL pointer + for the previous value argument. Ditto for + pthread_setcanceltype. This is compatible + with Solaris but should not affect + standard applications (Erik Hensema) + +Some new tests have been added. + + +SNAPSHOT 1999-10-17 +------------------- + +Bug fix - Cancelation of threads waiting on condition variables +now works properly (Lorin Hochstein and Peter Slacik) + + +SNAPSHOT 1999-08-12 +------------------- + +Fixed exception stack cleanup if calling pthread_exit() +- (Lorin Hochstein and John Bossom). + +Fixed bugs in condition variables - (Peter Slacik): + - additional contention checks + - properly adjust number of waiting threads after timed + condvar timeout. + + +SNAPSHOT 1999-05-30 +------------------- + +Some minor bugs have been fixed. See the ChangeLog file for details. + +Some more POSIX 1b functions are now included but ony return an +error (ENOSYS) if called. They are: + + sem_open + sem_close + sem_unlink + sem_getvalue + + +SNAPSHOT 1999-04-07 +------------------- + +Some POSIX 1b functions which were internally supported are now +available as exported functions: + + sem_init + sem_destroy + sem_wait + sem_trywait + sem_post + sched_yield + sched_get_priority_min + sched_get_priority_max + +Some minor bugs have been fixed. See the ChangeLog file for details. + + +SNAPSHOT 1999-03-16 +------------------- + +Initial release. + diff --git a/src/WinLibs/pthreads/PROGRESS b/src/WinLibs/pthreads/PROGRESS new file mode 100644 index 000000000..3e90bec7e --- /dev/null +++ b/src/WinLibs/pthreads/PROGRESS @@ -0,0 +1,4 @@ +Please see the ANNOUNCE file "Level of Standards Conformance" +or the web page: + +http://sources.redhat.com/pthreads-win32/conformance.html diff --git a/src/WinLibs/pthreads/README b/src/WinLibs/pthreads/README new file mode 100644 index 000000000..8c3af6097 --- /dev/null +++ b/src/WinLibs/pthreads/README @@ -0,0 +1,593 @@ +PTHREADS-WIN32 +============== + +Pthreads-win32 is free software, distributed under the GNU Lesser +General Public License (LGPL). See the file 'COPYING.LIB' for terms +and conditions. Also see the file 'COPYING' for information +specific to pthreads-win32, copyrights and the LGPL. + + +What is it? +----------- + +Pthreads-win32 is an Open Source Software implementation of the +Threads component of the POSIX 1003.1c 1995 Standard (or later) +for Microsoft's Win32 environment. Some functions from POSIX +1003.1b are also supported including semaphores. Other related +functions include the set of read-write lock functions. The +library also supports some of the functionality of the Open +Group's Single Unix specification, version 2, namely mutex types, +plus some common and pthreads-win32 specific non-portable +routines (see README.NONPORTABLE). + +See the file "ANNOUNCE" for more information including standards +conformance details and the list of supported and unsupported +routines. + + +Prerequisites +------------- +MSVC or GNU C (MinGW32 MSys development kit) + To build from source. + +QueueUserAPCEx by Panagiotis E. Hadjidoukas + For true async cancelation of threads (including blocked threads). + This is a DLL and Windows driver that provides pre-emptive APC + by forcing threads into an alertable state when the APC is queued. + Both the DLL and driver are provided with the pthreads-win32.exe + self-unpacking ZIP, and on the pthreads-win32 FTP site (in source + and pre-built forms). Currently this is a separate LGPL package to + pthreads-win32. See the README in the QueueUserAPCEx folder for + installation instructions. + + Pthreads-win32 will automatically detect if the QueueUserAPCEx DLL + QuserEx.DLL is available and whether the driver AlertDrv.sys is + loaded. If it is not available, pthreads-win32 will simulate async + cancelation, which means that it can async cancel only threads that + are runnable. The simulated async cancellation cannot cancel blocked + threads. + + +Library naming +-------------- + +Because the library is being built using various exception +handling schemes and compilers - and because the library +may not work reliably if these are mixed in an application, +each different version of the library has it's own name. + +Note 1: the incompatibility is really between EH implementations +of the different compilers. It should be possible to use the +standard C version from either compiler with C++ applications +built with a different compiler. If you use an EH version of +the library, then you must use the same compiler for the +application. This is another complication and dependency that +can be avoided by using only the standard C library version. + +Note 2: if you use a standard C pthread*.dll with a C++ +application, then any functions that you define that are +intended to be called via pthread_cleanup_push() must be +__cdecl. + +Note 3: the intention was to also name either the VC or GC +version (it should be arbitrary) as pthread.dll, including +pthread.lib and libpthread.a as appropriate. This is no longer +likely to happen. + +Note 4: the compatibility number was added so that applications +can differentiate between binary incompatible versions of the +libs and dlls. + +In general: + pthread[VG]{SE,CE,C}c.dll + pthread[VG]{SE,CE,C}c.lib + +where: + [VG] indicates the compiler + V - MS VC, or + G - GNU C + + {SE,CE,C} indicates the exception handling scheme + SE - Structured EH, or + CE - C++ EH, or + C - no exceptions - uses setjmp/longjmp + + c - DLL compatibility number indicating ABI and API + compatibility with applications built against + any snapshot with the same compatibility number. + See 'Version numbering' below. + +The name may also be suffixed by a 'd' to indicate a debugging version +of the library. E.g. pthreadVC2d.lib. Debugging versions contain +additional information for debugging (symbols etc) and are often not +optimised in any way (compiled with optimisation turned off). + +For example: + pthreadVSE.dll (MSVC/SEH) + pthreadGCE.dll (GNUC/C++ EH) + pthreadGC.dll (GNUC/not dependent on exceptions) + pthreadVC1.dll (MSVC/not dependent on exceptions - not binary + compatible with pthreadVC.dll) + pthreadVC2.dll (MSVC/not dependent on exceptions - not binary + compatible with pthreadVC1.dll or pthreadVC.dll) + +The GNU library archive file names have correspondingly changed to: + + libpthreadGCEc.a + libpthreadGCc.a + + +Versioning numbering +-------------------- + +Version numbering is separate from the snapshot dating system, and +is the canonical version identification system embedded within the +DLL using the Microsoft version resource system. The versioning +system chosen follows the GNU Libtool system. See +http://www.gnu.org/software/libtool/manual.html section 6.2. + +See the resource file 'version.rc'. + +Microsoft version numbers use 4 integers: + + 0.0.0.0 + +Pthreads-win32 uses the first 3 following the Libtool convention. +The fourth is commonly used for the build number, but will be reserved +for future use. + + current.revision.age.0 + +The numbers are changed as follows: + +1. If the library source code has changed at all since the last update, + then increment revision (`c:r:a' becomes `c:r+1:a'). +2. If any interfaces have been added, removed, or changed since the last + update, increment current, and set revision to 0. +3. If any interfaces have been added since the last public release, then + increment age. +4. If any interfaces have been removed or changed since the last public + release, then set age to 0. + + +DLL compatibility numbering is an attempt to ensure that applications +always load a compatible pthreads-win32 DLL by using a DLL naming system +that is consistent with the version numbering system. It also allows +older and newer DLLs to coexist in the same filesystem so that older +applications can continue to be used. For pre .NET Windows systems, +this inevitably requires incompatible versions of the same DLLs to have +different names. + +Pthreads-win32 has adopted the Cygwin convention of appending a single +integer number to the DLL name. The number used is based on the library +version number and is computed as 'current' - 'age'. + +(See http://home.att.net/~perlspinr/libversioning.html for a nicely +detailed explanation.) + +Using this method, DLL name/s will only change when the DLL's +backwards compatibility changes. Note that the addition of new +'interfaces' will not of itself change the DLL's compatibility for older +applications. + + +Which of the several dll versions to use? +----------------------------------------- +or, +--- +What are all these pthread*.dll and pthread*.lib files? +------------------------------------------------------- + +Simple, use either pthreadGCv.* if you use GCC, or pthreadVCv.* if you +use MSVC - where 'v' is the DLL versioning (compatibility) number. + +Otherwise, you need to choose carefully and know WHY. + +The most important choice you need to make is whether to use a +version that uses exceptions internally, or not. There are versions +of the library that use exceptions as part of the thread +cancelation and exit implementation. The default version uses +setjmp/longjmp. + +There is some contension amongst POSIX threads experts as +to how POSIX threads cancelation and exit should work +with languages that use exceptions, e.g. C++ and even C +(Microsoft's Structured Exceptions). + +The issue is: should cancelation of a thread in, say, +a C++ application cause object destructors and C++ exception +handlers to be invoked as the stack unwinds during thread +exit, or not? + +There seems to be more opinion in favour of using the +standard C version of the library (no EH) with C++ applications +for the reason that this appears to be the assumption commercial +pthreads implementations make. Therefore, if you use an EH version +of pthreads-win32 then you may be under the illusion that +your application will be portable, when in fact it is likely to +behave differently when linked with other pthreads libraries. + +Now you may be asking: then why have you kept the EH versions of +the library? + +There are a couple of reasons: +- there is division amongst the experts and so the code may + be needed in the future. Yes, it's in the repository and we + can get it out anytime in the future, but it would be difficult + to find. +- pthreads-win32 is one of the few implementations, and possibly + the only freely available one, that has EH versions. It may be + useful to people who want to play with or study application + behaviour under these conditions. + +Notes: + +[If you use either pthreadVCE or pthreadGCE] + +1. [See also the discussion in the FAQ file - Q2, Q4, and Q5] + +If your application contains catch(...) blocks in your POSIX +threads then you will need to replace the "catch(...)" with the macro +"PtW32Catch", eg. + + #ifdef PtW32Catch + PtW32Catch { + ... + } + #else + catch(...) { + ... + } + #endif + +Otherwise neither pthreads cancelation nor pthread_exit() will work +reliably when using versions of the library that use C++ exceptions +for cancelation and thread exit. + +This is due to what is believed to be a C++ compliance error in VC++ +whereby you may not have multiple handlers for the same exception in +the same try/catch block. GNU G++ doesn't have this restriction. + + +Other name changes +------------------ + +All snapshots prior to and including snapshot 2000-08-13 +used "_pthread_" as the prefix to library internal +functions, and "_PTHREAD_" to many library internal +macros. These have now been changed to "ptw32_" and "PTW32_" +respectively so as to not conflict with the ANSI standard's +reservation of identifiers beginning with "_" and "__" for +use by compiler implementations only. + +If you have written any applications and you are linking +statically with the pthreads-win32 library then you may have +included a call to _pthread_processInitialize. You will +now have to change that to ptw32_processInitialize. + + +Cleanup code default style +-------------------------- + +Previously, if not defined, the cleanup style was determined automatically +from the compiler used, and one of the following was defined accordingly: + + __CLEANUP_SEH MSVC only + __CLEANUP_CXX C++, including MSVC++, GNU G++ + __CLEANUP_C C, including GNU GCC, not MSVC + +These defines determine the style of cleanup (see pthread.h) and, +most importantly, the way that cancelation and thread exit (via +pthread_exit) is performed (see the routine ptw32_throw()). + +In short, the exceptions versions of the library throw an exception +when a thread is canceled, or exits via pthread_exit(). This exception is +caught by a handler in the thread startup routine, so that the +the correct stack unwinding occurs regardless of where the thread +is when it's canceled or exits via pthread_exit(). + +In this snapshot, unless the build explicitly defines (e.g. via a +compiler option) __CLEANUP_SEH, __CLEANUP_CXX, or __CLEANUP_C, then +the build NOW always defaults to __CLEANUP_C style cleanup. This style +uses setjmp/longjmp in the cancelation and pthread_exit implementations, +and therefore won't do stack unwinding even when linked to applications +that have it (e.g. C++ apps). This is for consistency with most/all +commercial Unix POSIX threads implementations. + +Although it was not clearly documented before, it is still necessary to +build your application using the same __CLEANUP_* define as was +used for the version of the library that you link with, so that the +correct parts of pthread.h are included. That is, the possible +defines require the following library versions: + + __CLEANUP_SEH pthreadVSE.dll + __CLEANUP_CXX pthreadVCE.dll or pthreadGCE.dll + __CLEANUP_C pthreadVC.dll or pthreadGC.dll + +It is recommended that you let pthread.h use it's default __CLEANUP_C +for both library and application builds. That is, don't define any of +the above, and then link with pthreadVC.lib (MSVC or MSVC++) and +libpthreadGC.a (MinGW GCC or G++). The reason is explained below, but +another reason is that the prebuilt pthreadVCE.dll is currently broken. +Versions built with MSVC++ later than version 6 may not be broken, but I +can't verify this yet. + +WHY ARE WE MAKING THE DEFAULT STYLE LESS EXCEPTION-FRIENDLY? +Because no commercial Unix POSIX threads implementation allows you to +choose to have stack unwinding. Therefore, providing it in pthread-win32 +as a default is dangerous. We still provide the choice but unless +you consciously choose to do otherwise, your pthreads applications will +now run or crash in similar ways irrespective of the pthreads platform +you use. Or at least this is the hope. + + +Building under VC++ using C++ EH, Structured EH, or just C +---------------------------------------------------------- + +From the source directory run nmake without any arguments to list +help information. E.g. + +$ nmake + +Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 +Copyright (C) Microsoft Corp 1988-1998. All rights reserved. + +Run one of the following command lines: +nmake clean VCE (to build the MSVC dll with C++ exception handling) +nmake clean VSE (to build the MSVC dll with structured exception handling) +nmake clean VC (to build the MSVC dll with C cleanup code) +nmake clean VCE-inlined (to build the MSVC inlined dll with C++ exception handling) +nmake clean VSE-inlined (to build the MSVC inlined dll with structured exception handling) +nmake clean VC-inlined (to build the MSVC inlined dll with C cleanup code) +nmake clean VC-static (to build the MSVC static lib with C cleanup code) +nmake clean VCE-debug (to build the debug MSVC dll with C++ exception handling) +nmake clean VSE-debug (to build the debug MSVC dll with structured exception handling) +nmake clean VC-debug (to build the debug MSVC dll with C cleanup code) +nmake clean VCE-inlined-debug (to build the debug MSVC inlined dll with C++ exception handling) +nmake clean VSE-inlined-debug (to build the debug MSVC inlined dll with structured exception handling) +nmake clean VC-inlined-debug (to build the debug MSVC inlined dll with C cleanup code) +nmake clean VC-static-debug (to build the debug MSVC static lib with C cleanup code) + + +The pre-built dlls are normally built using the *-inlined targets. + +You can run the testsuite by changing to the "tests" directory and +running nmake. E.g.: + +$ cd tests +$ nmake + +Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 +Copyright (C) Microsoft Corp 1988-1998. All rights reserved. + +Run one of the following command lines: +nmake clean VC (to test using VC dll with VC (no EH) applications) +nmake clean VCX (to test using VC dll with VC++ (EH) applications) +nmake clean VCE (to test using the VCE dll with VC++ EH applications) +nmake clean VSE (to test using VSE dll with VC (SEH) applications) +nmake clean VC-bench (to benchtest using VC dll with C bench app) +nmake clean VCX-bench (to benchtest using VC dll with C++ bench app) +nmake clean VCE-bench (to benchtest using VCE dll with C++ bench app) +nmake clean VSE-bench (to benchtest using VSE dll with SEH bench app) +nmake clean VC-static (to test using VC static lib with VC (no EH) applications) + + +Building under Mingw32 +---------------------- + +The dll can be built easily with recent versions of Mingw32. +(The distributed versions are built using Mingw32 and MsysDTK +from www.mingw32.org.) + +From the source directory, run make for help information. E.g.: + +$ make +Run one of the following command lines: +make clean GC (to build the GNU C dll with C cleanup code) +make clean GCE (to build the GNU C dll with C++ exception handling) +make clean GC-inlined (to build the GNU C inlined dll with C cleanup code) +make clean GCE-inlined (to build the GNU C inlined dll with C++ exception handling) +make clean GC-static (to build the GNU C inlined static lib with C cleanup code) +make clean GC-debug (to build the GNU C debug dll with C cleanup code) +make clean GCE-debug (to build the GNU C debug dll with C++ exception handling) +make clean GC-inlined-debug (to build the GNU C inlined debug dll with C cleanup code) +make clean GCE-inlined-debug (to build the GNU C inlined debug dll with C++ exception handling) +make clean GC-static-debug (to build the GNU C inlined static debug lib with C cleanup code) + + +The pre-built dlls are normally built using the *-inlined targets. + +You can run the testsuite by changing to the "tests" directory and +running make for help information. E.g.: + +$ cd tests +$ make +Run one of the following command lines: +make clean GC (to test using GC dll with C (no EH) applications) +make clean GCX (to test using GC dll with C++ (EH) applications) +make clean GCE (to test using GCE dll with C++ (EH) applications) +make clean GC-bench (to benchtest using GNU C dll with C cleanup code) +make clean GCE-bench (to benchtest using GNU C dll with C++ exception handling) +make clean GC-static (to test using GC static lib with C (no EH) applications) + + +Building under Linux using the Mingw32 cross development tools +-------------------------------------------------------------- + +You can build the library without leaving Linux by using the Mingw32 cross +development toolchain. See http://www.libsdl.org/extras/win32/cross/ for +tools and info. The GNUmakefile contains some support for this, for example: + +make CROSS=i386-mingw32msvc- clean GC-inlined + +will build pthreadGCn.dll and libpthreadGCn.a (n=version#), provided your +cross-tools/bin directory is in your PATH (or use the cross-make.sh script +at the URL above). + + +Building the library as a statically linkable library +----------------------------------------------------- + +General: PTW32_STATIC_LIB must be defined for both the library build and the +application build. The makefiles supplied and used by the following 'make' +command lines will define this for you. + +MSVC (creates pthreadVCn.lib as a static link lib): + +nmake clean VC-static + + +MinGW32 (creates libpthreadGCn.a as a static link lib): + +make clean GC-static + + +Define PTW32_STATIC_LIB when building your application. Also, your +application must call a two non-portable routines to initialise the +some state on startup and cleanup before exit. One other routine needs +to be called to cleanup after any Win32 threads have called POSIX API +routines. See README.NONPORTABLE or the html reference manual pages for +details on these routines: + +BOOL pthread_win32_process_attach_np (void); +BOOL pthread_win32_process_detach_np (void); +BOOL pthread_win32_thread_attach_np (void); // Currently a no-op +BOOL pthread_win32_thread_detach_np (void); + + +The tests makefiles have the same targets but only check that the +static library is statically linkable. They don't run the full +testsuite. To run the full testsuite, build the dlls and run the +dll test targets. + + +Building the library under Cygwin +--------------------------------- + +Cygwin is implementing it's own POSIX threads routines and these +will be the ones to use if you develop using Cygwin. + + +Ready to run binaries +--------------------- + +For convenience, the following ready-to-run files can be downloaded +from the FTP site (see under "Availability" below): + + pthread.h + semaphore.h + sched.h + pthreadVC.dll - built with MSVC compiler using C setjmp/longjmp + pthreadVC.lib + pthreadVCE.dll - built with MSVC++ compiler using C++ EH + pthreadVCE.lib + pthreadVSE.dll - built with MSVC compiler using SEH + pthreadVSE.lib + pthreadGC.dll - built with Mingw32 GCC + libpthreadGC.a - derived from pthreadGC.dll + pthreadGCE.dll - built with Mingw32 G++ + libpthreadGCE.a - derived from pthreadGCE.dll + +As of August 2003 pthreads-win32 pthreadG* versions are built and tested +using the MinGW + MsysDTK environment current as of that date or later. +The following file MAY be needed for older MinGW environments. + + gcc.dll - needed to build and run applications that use + pthreadGCE.dll. + + +Building applications with GNU compilers +---------------------------------------- + +If you're using pthreadGC.dll: + +With the three header files, pthreadGC.dll and libpthreadGC.a in the +same directory as your application myapp.c, you could compile, link +and run myapp.c under Mingw32 as follows: + + gcc -o myapp.exe myapp.c -I. -L. -lpthreadGC + myapp + +Or put pthreadGC.dll in an appropriate directory in your PATH, +put libpthreadGC.a in your system lib directory, and +put the three header files in your system include directory, +then use: + + gcc -o myapp.exe myapp.c -lpthreadGC + myapp + + +If you're using pthreadGCE.dll: + +With the three header files, pthreadGCE.dll, gcc.dll and libpthreadGCE.a +in the same directory as your application myapp.c, you could compile, +link and run myapp.c under Mingw32 as follows: + + gcc -x c++ -o myapp.exe myapp.c -I. -L. -lpthreadGCE + myapp + +Or put pthreadGCE.dll and gcc.dll in an appropriate directory in +your PATH, put libpthreadGCE.a in your system lib directory, and +put the three header files in your system include directory, +then use: + + gcc -x c++ -o myapp.exe myapp.c -lpthreadGCE + myapp + + +Availability +------------ + +The complete source code in either unbundled, self-extracting +Zip file, or tar/gzipped format can be found at: + + ftp://sources.redhat.com/pub/pthreads-win32 + +The pre-built DLL, export libraries and matching pthread.h can +be found at: + + ftp://sources.redhat.com/pub/pthreads-win32/dll-latest + +Home page: + + http://sources.redhat.com/pthreads-win32/ + + +Mailing list +------------ + +There is a mailing list for discussing pthreads on Win32. +To join, send email to: + + pthreads-win32-subscribe@sources.redhat.com + +Unsubscribe by sending mail to: + + pthreads-win32-unsubscribe@sources.redhat.com + + +Acknowledgements +---------------- + +See the ANNOUNCE file for acknowledgements. +See the 'CONTRIBUTORS' file for the list of contributors. + +As much as possible, the ChangeLog file attributes +contributions and patches that have been incorporated +in the library to the individuals responsible. + +Finally, thanks to all those who work on and contribute to the +POSIX and Single Unix Specification standards. The maturity of an +industry can be measured by it's open standards. + +---- +Ross Johnson + + + + + + + + + diff --git a/src/WinLibs/pthreads/README.Borland b/src/WinLibs/pthreads/README.Borland new file mode 100644 index 000000000..5f836cd17 --- /dev/null +++ b/src/WinLibs/pthreads/README.Borland @@ -0,0 +1,57 @@ +In ptw32_InterlockedCompareExchange.c, I've added a section for +Borland's compiler; it's identical to that for the MS compiler except +that it uses /* ... */ comments instead of ; comments. + +[RPJ: need to define HAVE_TASM32 in config.h to use the above.] + + +The other file is a makefile suitable for use with Borland's compiler +(run "make -fBmakefile" in the directory). It builds a single version +of the library, pthreadBC.dll and the corresponding pthreadBC.lib +import library, which is comparable to the pthreadVC version; I can't +personally see any demand for the versions that include structured or +C++ exception cancellation handling so I haven't attempted to build +those versions of the library. (I imagine a static version might be +of use to some, but we can't legally use that on my commercial +projects so I can't try that out, unfortunately.) + +[RPJ: Added tests\Bmakefile as well.] + +Borland C++ doesn't define the ENOSYS constant used by pthreads-win32; +rather than make more extensive patches to the pthreads-win32 source I +have a mostly-arbitrary constant for it in the makefile. However this +doesn't make it visible to the application using the library, so if +anyone actually wants to use this constant in their apps (why?) +someone might like to make a seperate NEED_BCC_something define to add +this stuff. + +The makefile also #defines EDEADLK as EDEADLOCK, _timeb as timeb, and +_ftime as ftime, to deal with the minor differences between the two +RTLs' naming conventions, and sets the compiler flags as required to +get a normal compile of the library. + +[RPJ: Moved errno values and _timeb etc to pthread.h, so apps will also +use them.] + +(While I'm on the subject, the reason Borland users should recompile +the library, rather than using the impdef/implib technique suggested +previously on the mailing list, is that a) the errno constants are +different, so the results returned by the pthread_* functions can be +meaningless, and b) the errno variable/pseudo-variable itself is +different in the MS & BCC runtimes, so you can't access the +pthreadVC's errno from a Borland C++-compiled host application +correctly - I imagine there are other potential problems from the RTL +mismatch too.) + +[RPJ: Make sure you use the same RTL in both dll and application builds. +The dll and tests Bmakefiles use cw32mti.lib. Having some trouble with +memory read exceptions running the test suite using BCC55.] + +Best regards, +Will + +-- +Will Bryant +Systems Architect, eCOSM Limited +Cell +64 21 655 443, office +64 3 365 4176 +http://www.ecosm.com/ diff --git a/src/WinLibs/pthreads/README.CV b/src/WinLibs/pthreads/README.CV new file mode 100644 index 000000000..522fa602b --- /dev/null +++ b/src/WinLibs/pthreads/README.CV @@ -0,0 +1,3036 @@ +README.CV -- Condition Variables +-------------------------------- + +The original implementation of condition variables in +pthreads-win32 was based on a discussion paper: + +"Strategies for Implementing POSIX Condition Variables +on Win32": http://www.cs.wustl.edu/~schmidt/win32-cv-1.html + +The changes suggested below were made on Feb 6 2001. This +file is included in the package for the benefit of anyone +interested in understanding the pthreads-win32 implementation +of condition variables and the (sometimes subtle) issues that +it attempts to resolve. + +Thanks go to the individuals whose names appear throughout +the following text. + +Ross Johnson + +-------------------------------------------------------------------- + +fyi.. (more detailed problem description/demos + possible fix/patch) + +regards, +alexander. + + +Alexander Terekhov +31.01.2001 17:43 + +To: ace-bugs@cs.wustl.edu +cc: +From: Alexander Terekhov/Germany/IBM@IBMDE +Subject: Implementation of POSIX CVs: spur.wakeups/lost + signals/deadlocks/unfairness + + + + ACE VERSION: + + 5.1.12 (pthread-win32 snapshot 2000-12-29) + + HOST MACHINE and OPERATING SYSTEM: + + IBM IntelliStation Z Pro, 2 x XEON 1GHz, Win2K + + TARGET MACHINE and OPERATING SYSTEM, if different from HOST: + COMPILER NAME AND VERSION (AND PATCHLEVEL): + + Microsoft Visual C++ 6.0 + + AREA/CLASS/EXAMPLE AFFECTED: + + Implementation of POSIX condition variables - OS.cpp/.h + + DOES THE PROBLEM AFFECT: + + EXECUTION? YES! + + SYNOPSIS: + + a) spurious wakeups (minor problem) + b) lost signals + c) broadcast deadlock + d) unfairness (minor problem) + + DESCRIPTION: + + Please see attached copy of discussion thread + from comp.programming.threads for more details on + some reported problems. (i've also posted a "fyi" + message to ace-users a week or two ago but + unfortunately did not get any response so far). + + It seems that current implementation suffers from + two essential problems: + + 1) cond.waiters_count does not accurately reflect + number of waiters blocked on semaphore - w/o + proper synchronisation that could result (in the + time window when counter is not accurate) + in spurious wakeups organised by subsequent + _signals and _broadcasts. + + 2) Always having (with no e.g. copy_and_clear/..) + the same queue in use (semaphore+counter) + neither signal nor broadcast provide 'atomic' + behaviour with respect to other threads/subsequent + calls to signal/broadcast/wait. + + Each problem and combination of both could produce + various nasty things: + + a) spurious wakeups (minor problem) + + it is possible that waiter(s) which was already + unblocked even so is still counted as blocked + waiter. signal and broadcast will release + semaphore which will produce a spurious wakeup + for a 'real' waiter coming later. + + b) lost signals + + signalling thread ends up consuming its own + signal. please see demo/discussion below. + + c) broadcast deadlock + + last_waiter processing code does not correctly + handle the case with multiple threads + waiting for the end of broadcast. + please see demo/discussion below. + + d) unfairness (minor problem) + + without SignalObjectAndWait some waiter(s) + may end up consuming broadcasted signals + multiple times (spurious wakeups) because waiter + thread(s) can be preempted before they call + semaphore wait (but after count++ and mtx.unlock). + + REPEAT BY: + + See below... run problem demos programs (tennis.cpp and + tennisb.cpp) number of times concurrently (on multiprocessor) + and in multiple sessions or just add a couple of "Sleep"s + as described in the attached copy of discussion thread + from comp.programming.threads + + SAMPLE FIX/WORKAROUND: + + See attached patch to pthread-win32.. well, I can not + claim that it is completely bug free but at least my + test and tests provided by pthreads-win32 seem to work. + Perhaps that will help. + + regards, + alexander. + + +>> Forum: comp.programming.threads +>> Thread: pthread_cond_* implementation questions +. +. +. +David Schwartz wrote: + +> terekhov@my-deja.com wrote: +> +>> BTW, could you please also share your view on other perceived +>> "problems" such as nested broadcast deadlock, spurious wakeups +>> and (the latest one) lost signals?? +> +>I'm not sure what you mean. The standard allows an implementation +>to do almost whatever it likes. In fact, you could implement +>pthread_cond_wait by releasing the mutex, sleeping a random +>amount of time, and then reacquiring the mutex. Of course, +>this would be a pretty poor implementation, but any code that +>didn't work under that implementation wouldn't be strictly +>compliant. + +The implementation you suggested is indeed correct +one (yes, now I see it :). However it requires from +signal/broadcast nothing more than to "{ return 0; }" +That is not the case for pthread-win32 and ACE +implementations. I do think that these implementations +(basically the same implementation) have some serious +problems with wait/signal/broadcast calls. I am looking +for help to clarify whether these problems are real +or not. I think that I can demonstrate what I mean +using one or two small sample programs. +. +. +. +========== +tennis.cpp +========== + +#include "ace/Synch.h" +#include "ace/Thread.h" + +enum GAME_STATE { + + START_GAME, + PLAYER_A, // Player A playes the ball + PLAYER_B, // Player B playes the ball + GAME_OVER, + ONE_PLAYER_GONE, + BOTH_PLAYERS_GONE + +}; + +enum GAME_STATE eGameState; +ACE_Mutex* pmtxGameStateLock; +ACE_Condition< ACE_Mutex >* pcndGameStateChange; + +void* + playerA( + void* pParm + ) +{ + + // For access to game state variable + pmtxGameStateLock->acquire(); + + // Play loop + while ( eGameState < GAME_OVER ) { + + // Play the ball + cout << endl << "PLAYER-A" << endl; + + // Now its PLAYER-B's turn + eGameState = PLAYER_B; + + // Signal to PLAYER-B that now it is his turn + pcndGameStateChange->signal(); + + // Wait until PLAYER-B finishes playing the ball + do { + + pcndGameStateChange->wait(); + + if ( PLAYER_B == eGameState ) + cout << endl << "----PLAYER-A: SPURIOUS WAKEUP!!!" << endl; + + } while ( PLAYER_B == eGameState ); + + } + + // PLAYER-A gone + eGameState = (GAME_STATE)(eGameState+1); + cout << endl << "PLAYER-A GONE" << endl; + + // No more access to state variable needed + pmtxGameStateLock->release(); + + // Signal PLAYER-A gone event + pcndGameStateChange->broadcast(); + + return 0; + +} + +void* + playerB( + void* pParm + ) +{ + + // For access to game state variable + pmtxGameStateLock->acquire(); + + // Play loop + while ( eGameState < GAME_OVER ) { + + // Play the ball + cout << endl << "PLAYER-B" << endl; + + // Now its PLAYER-A's turn + eGameState = PLAYER_A; + + // Signal to PLAYER-A that now it is his turn + pcndGameStateChange->signal(); + + // Wait until PLAYER-A finishes playing the ball + do { + + pcndGameStateChange->wait(); + + if ( PLAYER_A == eGameState ) + cout << endl << "----PLAYER-B: SPURIOUS WAKEUP!!!" << endl; + + } while ( PLAYER_A == eGameState ); + + } + + // PLAYER-B gone + eGameState = (GAME_STATE)(eGameState+1); + cout << endl << "PLAYER-B GONE" << endl; + + // No more access to state variable needed + pmtxGameStateLock->release(); + + // Signal PLAYER-B gone event + pcndGameStateChange->broadcast(); + + return 0; + +} + + +int +main (int, ACE_TCHAR *[]) +{ + + pmtxGameStateLock = new ACE_Mutex(); + pcndGameStateChange = new ACE_Condition< ACE_Mutex >( *pmtxGameStateLock +); + + // Set initial state + eGameState = START_GAME; + + // Create players + ACE_Thread::spawn( playerA ); + ACE_Thread::spawn( playerB ); + + // Give them 5 sec. to play + Sleep( 5000 );//sleep( 5 ); + + // Set game over state + pmtxGameStateLock->acquire(); + eGameState = GAME_OVER; + + // Let them know + pcndGameStateChange->broadcast(); + + // Wait for players to stop + do { + + pcndGameStateChange->wait(); + + } while ( eGameState < BOTH_PLAYERS_GONE ); + + // Cleanup + cout << endl << "GAME OVER" << endl; + pmtxGameStateLock->release(); + delete pcndGameStateChange; + delete pmtxGameStateLock; + + return 0; + +} + +=========== +tennisb.cpp +=========== +#include "ace/Synch.h" +#include "ace/Thread.h" + +enum GAME_STATE { + + START_GAME, + PLAYER_A, // Player A playes the ball + PLAYER_B, // Player B playes the ball + GAME_OVER, + ONE_PLAYER_GONE, + BOTH_PLAYERS_GONE + +}; + +enum GAME_STATE eGameState; +ACE_Mutex* pmtxGameStateLock; +ACE_Condition< ACE_Mutex >* pcndGameStateChange; + +void* + playerA( + void* pParm + ) +{ + + // For access to game state variable + pmtxGameStateLock->acquire(); + + // Play loop + while ( eGameState < GAME_OVER ) { + + // Play the ball + cout << endl << "PLAYER-A" << endl; + + // Now its PLAYER-B's turn + eGameState = PLAYER_B; + + // Signal to PLAYER-B that now it is his turn + pcndGameStateChange->broadcast(); + + // Wait until PLAYER-B finishes playing the ball + do { + + pcndGameStateChange->wait(); + + if ( PLAYER_B == eGameState ) + cout << endl << "----PLAYER-A: SPURIOUS WAKEUP!!!" << endl; + + } while ( PLAYER_B == eGameState ); + + } + + // PLAYER-A gone + eGameState = (GAME_STATE)(eGameState+1); + cout << endl << "PLAYER-A GONE" << endl; + + // No more access to state variable needed + pmtxGameStateLock->release(); + + // Signal PLAYER-A gone event + pcndGameStateChange->broadcast(); + + return 0; + +} + +void* + playerB( + void* pParm + ) +{ + + // For access to game state variable + pmtxGameStateLock->acquire(); + + // Play loop + while ( eGameState < GAME_OVER ) { + + // Play the ball + cout << endl << "PLAYER-B" << endl; + + // Now its PLAYER-A's turn + eGameState = PLAYER_A; + + // Signal to PLAYER-A that now it is his turn + pcndGameStateChange->broadcast(); + + // Wait until PLAYER-A finishes playing the ball + do { + + pcndGameStateChange->wait(); + + if ( PLAYER_A == eGameState ) + cout << endl << "----PLAYER-B: SPURIOUS WAKEUP!!!" << endl; + + } while ( PLAYER_A == eGameState ); + + } + + // PLAYER-B gone + eGameState = (GAME_STATE)(eGameState+1); + cout << endl << "PLAYER-B GONE" << endl; + + // No more access to state variable needed + pmtxGameStateLock->release(); + + // Signal PLAYER-B gone event + pcndGameStateChange->broadcast(); + + return 0; + +} + + +int +main (int, ACE_TCHAR *[]) +{ + + pmtxGameStateLock = new ACE_Mutex(); + pcndGameStateChange = new ACE_Condition< ACE_Mutex >( *pmtxGameStateLock +); + + // Set initial state + eGameState = START_GAME; + + // Create players + ACE_Thread::spawn( playerA ); + ACE_Thread::spawn( playerB ); + + // Give them 5 sec. to play + Sleep( 5000 );//sleep( 5 ); + + // Make some noise + pmtxGameStateLock->acquire(); + cout << endl << "---Noise ON..." << endl; + pmtxGameStateLock->release(); + for ( int i = 0; i < 100000; i++ ) + pcndGameStateChange->broadcast(); + cout << endl << "---Noise OFF" << endl; + + // Set game over state + pmtxGameStateLock->acquire(); + eGameState = GAME_OVER; + cout << endl << "---Stopping the game..." << endl; + + // Let them know + pcndGameStateChange->broadcast(); + + // Wait for players to stop + do { + + pcndGameStateChange->wait(); + + } while ( eGameState < BOTH_PLAYERS_GONE ); + + // Cleanup + cout << endl << "GAME OVER" << endl; + pmtxGameStateLock->release(); + delete pcndGameStateChange; + delete pmtxGameStateLock; + + return 0; + +} +. +. +. +David Schwartz wrote: +>> > It's compliant +>> +>> That is really good. +> +>> Tomorrow (I have to go urgently now) I will try to +>> demonstrate the lost-signal "problem" of current +>> pthread-win32 and ACE-(variant w/o SingleObjectAndWait) +>> implementations: players start suddenly drop their balls :-) +>> (with no change in source code). +> +>Signals aren't lost, they're going to the main thread, +>which isn't coded correctly to handle them. Try this: +> +> // Wait for players to stop +> do { +> +> pthread_cond_wait( &cndGameStateChange,&mtxGameStateLock ); +>printf("Main thread stole a signal\n"); +> +> } while ( eGameState < BOTH_PLAYERS_GONE ); +> +>I bet everytime you thing a signal is lost, you'll see that printf. +>The signal isn't lost, it was stolen by another thread. + +well, you can probably loose your bet.. it was indeed stolen +by "another" thread but not the one you seem to think of. + +I think that what actually happens is the following: + +H:\SA\UXX\pt\PTHREADS\TESTS>tennis3.exe + +PLAYER-A + +PLAYER-B + +----PLAYER-B: SPURIOUS WAKEUP!!! + +PLAYER-A GONE + +PLAYER-B GONE + +GAME OVER + +H:\SA\UXX\pt\PTHREADS\TESTS> + +here you can see that PLAYER-B after playing his first +ball (which came via signal from PLAYER-A) just dropped +it down. What happened is that his signal to player A +was consumed as spurious wakeup by himself (player B). + +The implementation has a problem: + +================ +waiting threads: +================ + +{ /** Critical Section + + inc cond.waiters_count + +} + + /* + /* Atomic only if using Win32 SignalObjectAndWait + /* + cond.mtx.release + + /*** ^^-- A THREAD WHICH DID SIGNAL MAY ACQUIRE THE MUTEX, + /*** GO INTO WAIT ON THE SAME CONDITION AND OVERTAKE + /*** ORIGINAL WAITER(S) CONSUMING ITS OWN SIGNAL! + + cond.sem.wait + +Player-A after playing game's initial ball went into +wait (called _wait) but was pre-empted before reaching +wait semaphore. He was counted as waiter but was not +actually waiting/blocked yet. + +=============== +signal threads: +=============== + +{ /** Critical Section + + waiters_count = cond.waiters_count + +} + + if ( waiters_count != 0 ) + + sem.post 1 + + endif + +Player-B after he received signal/ball from Player A +called _signal. The _signal did see that there was +one waiter blocked on the condition (Player-A) and +released the semaphore.. (but it did not unblock +Player-A because he was not actually blocked). +Player-B thread continued its execution, called _wait, +was counted as second waiter BUT was allowed to slip +through opened semaphore gate (which was opened for +Player-B) and received his own signal. Player B remained +blocked followed by Player A. Deadlock happened which +lasted until main thread came in and said game over. + +It seems to me that the implementation fails to +correctly implement the following statement +from specification: + +http://www.opengroup.org/ +onlinepubs/007908799/xsh/pthread_cond_wait.html + +"These functions atomically release mutex and cause +the calling thread to block on the condition variable +cond; atomically here means "atomically with respect +to access by another thread to the mutex and then the +condition variable". That is, if another thread is +able to acquire the mutex after the about-to-block +thread has released it, then a subsequent call to +pthread_cond_signal() or pthread_cond_broadcast() +in that thread behaves as if it were issued after +the about-to-block thread has blocked." + +Question: Am I right? + +(I produced the program output above by simply +adding ?Sleep( 1 )?: + +================ +waiting threads: +================ + +{ /** Critical Section + + inc cond.waiters_count + +} + + /* + /* Atomic only if using Win32 SignalObjectAndWait + /* + cond.mtx.release + +Sleep( 1 ); // Win32 + + /*** ^^-- A THREAD WHICH DID SIGNAL MAY ACQUIRE THE MUTEX, + /*** GO INTO WAIT ON THE SAME CONDITION AND OVERTAKE + /*** ORIGINAL WAITER(S) CONSUMING ITS OWN SIGNAL! + + cond.sem.wait + +to the source code of pthread-win32 implementation: + +http://sources.redhat.com/cgi-bin/cvsweb.cgi/pthreads/ +condvar.c?rev=1.36&content-type=text/ +x-cvsweb-markup&cvsroot=pthreads-win32 + + + /* + * We keep the lock held just long enough to increment the count of + * waiters by one (above). + * Note that we can't keep it held across the + * call to sem_wait since that will deadlock other calls + * to pthread_cond_signal + */ + cleanup_args.mutexPtr = mutex; + cleanup_args.cv = cv; + cleanup_args.resultPtr = &result; + + pthread_cleanup_push (ptw32_cond_wait_cleanup, (void *) +&cleanup_args); + + if ((result = pthread_mutex_unlock (mutex)) == 0) + {((result +Sleep( 1 ); // @AT + + /* + * Wait to be awakened by + * pthread_cond_signal, or + * pthread_cond_broadcast, or + * a timeout + * + * Note: + * ptw32_sem_timedwait is a cancelation point, + * hence providing the + * mechanism for making pthread_cond_wait a cancelation + * point. We use the cleanup mechanism to ensure we + * re-lock the mutex and decrement the waiters count + * if we are canceled. + */ + if (ptw32_sem_timedwait (&(cv->sema), abstime) == -1) { + result = errno; + } + } + + pthread_cleanup_pop (1); /* Always cleanup */ + + +BTW, on my system (2 CPUs) I can manage to get +signals lost even without any source code modification +if I run the tennis program many times in different +shell sessions. +. +. +. +David Schwartz wrote: +>terekhov@my-deja.com wrote: +> +>> well, it might be that the program is in fact buggy. +>> but you did not show me any bug. +> +>You're right. I was close but not dead on. I was correct, however, +>that the code is buggy because it uses 'pthread_cond_signal' even +>though not any thread waiting on the condition variable can do the +>job. I was wrong in which thread could be waiting on the cv but +>unable to do the job. + +Okay, lets change 'pthread_cond_signal' to 'pthread_cond_broadcast' +but also add some noise from main() right before declaring the game +to be over (I need it in order to demonstrate another problem of +pthread-win32/ACE implementations - broadcast deadlock)... +. +. +. +It is my understanding of POSIX conditions, +that on correct implementation added noise +in form of unnecessary broadcasts from main, +should not break the tennis program. The +only 'side effect' of added noise on correct +implementation would be 'spurious wakeups' of +players (in fact they are not spurious, +players just see them as spurious) unblocked, +not by another player but by main before +another player had a chance to acquire the +mutex and change the game state variable: +. +. +. + +PLAYER-B + +PLAYER-A + +---Noise ON... + +PLAYER-B + +PLAYER-A + +. +. +. + +PLAYER-B + +PLAYER-A + +----PLAYER-A: SPURIOUS WAKEUP!!! + +PLAYER-B + +PLAYER-A + +---Noise OFF + +PLAYER-B + +---Stopping the game... + +PLAYER-A GONE + +PLAYER-B GONE + +GAME OVER + +H:\SA\UXX\pt\PTHREADS\TESTS> + +On pthread-win32/ACE implementations the +program could stall: + +. +. +. + +PLAYER-A + +PLAYER-B + +PLAYER-A + +PLAYER-B + +PLAYER-A + +PLAYER-B + +PLAYER-A + +PLAYER-B + +---Noise ON... + +PLAYER-A + +---Noise OFF +^C +H:\SA\UXX\pt\PTHREADS\TESTS> + + +The implementation has problems: + +================ +waiting threads: +================ + +{ /** Critical Section + + inc cond.waiters_count + +} + + /* + /* Atomic only if using Win32 SignalObjectAndWait + /* + cond.mtx.release + cond.sem.wait + + /*** ^^-- WAITER CAN BE PREEMPTED AFTER BEING UNBLOCKED... + +{ /** Critical Section + + dec cond.waiters_count + + /*** ^^- ...AND BEFORE DECREMENTING THE COUNT (1) + + last_waiter = ( cond.was_broadcast && + cond.waiters_count == 0 ) + + if ( last_waiter ) + + cond.was_broadcast = FALSE + + endif + +} + + if ( last_waiter ) + + /* + /* Atomic only if using Win32 SignalObjectAndWait + /* + cond.auto_reset_event_or_sem.post /* Event for Win32 + cond.mtx.acquire + + /*** ^^-- ...AND BEFORE CALL TO mtx.acquire (2) + + /*** ^^-- NESTED BROADCASTS RESULT IN A DEADLOCK + + + else + + cond.mtx.acquire + + /*** ^^-- ...AND BEFORE CALL TO mtx.acquire (3) + + endif + + +================== +broadcast threads: +================== + +{ /** Critical Section + + waiters_count = cond.waiters_count + + if ( waiters_count != 0 ) + + cond.was_broadcast = TRUE + + endif + +} + +if ( waiters_count != 0 ) + + cond.sem.post waiters_count + + /*** ^^^^^--- SPURIOUS WAKEUPS DUE TO (1) + + cond.auto_reset_event_or_sem.wait /* Event for Win32 + + /*** ^^^^^--- DEADLOCK FOR FURTHER BROADCASTS IF THEY + HAPPEN TO GO INTO WAIT WHILE PREVIOUS + BROADCAST IS STILL IN PROGRESS/WAITING + +endif + +a) cond.waiters_count does not accurately reflect +number of waiters blocked on semaphore - that could +result (in the time window when counter is not accurate) +in spurios wakeups organised by subsequent _signals +and _broadcasts. From standard compliance point of view +that is OK but that could be a real problem from +performance/efficiency point of view. + +b) If subsequent broadcast happen to go into wait on +cond.auto_reset_event_or_sem before previous +broadcast was unblocked from cond.auto_reset_event_or_sem +by its last waiter, one of two blocked threads will +remain blocked because last_waiter processing code +fails to unblock both threads. + +In the situation with tennisb.c the Player-B was put +in a deadlock by noise (broadcast) coming from main +thread. And since Player-B holds the game state +mutex when it calls broadcast, the whole program +stalled: Player-A was deadlocked on mutex and +main thread after finishing with producing the noise +was deadlocked on mutex too (needed to declare the +game over) + +(I produced the program output above by simply +adding ?Sleep( 1 )?: + +================== +broadcast threads: +================== + +{ /** Critical Section + + waiters_count = cond.waiters_count + + if ( waiters_count != 0 ) + + cond.was_broadcast = TRUE + + endif + +} + +if ( waiters_count != 0 ) + +Sleep( 1 ); //Win32 + + cond.sem.post waiters_count + + /*** ^^^^^--- SPURIOUS WAKEUPS DUE TO (1) + + cond.auto_reset_event_or_sem.wait /* Event for Win32 + + /*** ^^^^^--- DEADLOCK FOR FURTHER BROADCASTS IF THEY + HAPPEN TO GO INTO WAIT WHILE PREVIOUS + BROADCAST IS STILL IN PROGRESS/WAITING + +endif + +to the source code of pthread-win32 implementation: + +http://sources.redhat.com/cgi-bin/cvsweb.cgi/pthreads/ +condvar.c?rev=1.36&content-type=text/ +x-cvsweb-markup&cvsroot=pthreads-win32 + + if (wereWaiters) + {(wereWaiters)sroot=pthreads-win32eb.cgi/pthreads/Yem...m + /* + * Wake up all waiters + */ + +Sleep( 1 ); //@AT + +#ifdef NEED_SEM + + result = (ptw32_increase_semaphore( &cv->sema, cv->waiters ) + ? 0 + : EINVAL); + +#else /* NEED_SEM */ + + result = (ReleaseSemaphore( cv->sema, cv->waiters, NULL ) + ? 0 + : EINVAL); + +#endif /* NEED_SEM */ + + } + + (void) pthread_mutex_unlock(&(cv->waitersLock)); + + if (wereWaiters && result == 0) + {(wereWaiters + /* + * Wait for all the awakened threads to acquire their part of + * the counting semaphore + */ + + if (WaitForSingleObject (cv->waitersDone, INFINITE) + == WAIT_OBJECT_0) + { + result = 0; + } + else + { + result = EINVAL; + } + + } + + return (result); + +} + +BTW, on my system (2 CPUs) I can manage to get +the program stalled even without any source code +modification if I run the tennisb program many +times in different shell sessions. + +=================== +pthread-win32 patch +=================== +struct pthread_cond_t_ { + long nWaitersBlocked; /* Number of threads blocked +*/ + long nWaitersUnblocked; /* Number of threads unblocked +*/ + long nWaitersToUnblock; /* Number of threads to unblock +*/ + sem_t semBlockQueue; /* Queue up threads waiting for the +*/ + /* condition to become signalled +*/ + sem_t semBlockLock; /* Semaphore that guards access to +*/ + /* | waiters blocked count/block queue +*/ + /* +-> Mandatory Sync.LEVEL-1 +*/ + pthread_mutex_t mtxUnblockLock; /* Mutex that guards access to +*/ + /* | waiters (to)unblock(ed) counts +*/ + /* +-> Optional* Sync.LEVEL-2 +*/ +}; /* Opt*) for _timedwait and +cancellation*/ + +int +pthread_cond_init (pthread_cond_t * cond, const pthread_condattr_t * attr) + int result = EAGAIN; + pthread_cond_t cv = NULL; + + if (cond == NULL) + {(cond + return EINVAL; + } + + if ((attr != NULL && *attr != NULL) && + ((*attr)->pshared == PTHREAD_PROCESS_SHARED)) + { + /* + * Creating condition variable that can be shared between + * processes. + */ + result = ENOSYS; + + goto FAIL0; + } + + cv = (pthread_cond_t) calloc (1, sizeof (*cv)); + + if (cv == NULL) + {(cv + result = ENOMEM; + goto FAIL0; + } + + cv->nWaitersBlocked = 0; + cv->nWaitersUnblocked = 0; + cv->nWaitersToUnblock = 0; + + if (sem_init (&(cv->semBlockLock), 0, 1) != 0) + {(sem_init + goto FAIL0; + } + + if (sem_init (&(cv->semBlockQueue), 0, 0) != 0) + {(sem_init + goto FAIL1; + } + + if (pthread_mutex_init (&(cv->mtxUnblockLock), 0) != 0) + {(pthread_mutex_init + goto FAIL2; + } + + + result = 0; + + goto DONE; + + /* + * ------------- + * Failed... + * ------------- + */ +FAIL2: + (void) sem_destroy (&(cv->semBlockQueue)); + +FAIL1: + (void) sem_destroy (&(cv->semBlockLock)); + +FAIL0: +DONE: + *cond = cv; + + return (result); + +} /* pthread_cond_init */ + +int +pthread_cond_destroy (pthread_cond_t * cond) +{ + int result = 0; + pthread_cond_t cv; + + /* + * Assuming any race condition here is harmless. + */ + if (cond == NULL + || *cond == NULL) + { + return EINVAL; + } + + if (*cond != (pthread_cond_t) PTW32_OBJECT_AUTO_INIT) + {(*cond + cv = *cond; + + /* + * Synchronize access to waiters blocked count (LEVEL-1) + */ + if (sem_wait(&(cv->semBlockLock)) != 0) + {(sem_wait(&(cv->semBlockLock)) + return errno; + } + + /* + * Synchronize access to waiters (to)unblock(ed) counts (LEVEL-2) + */ + if ((result = pthread_mutex_lock(&(cv->mtxUnblockLock))) != 0) + {((result + (void) sem_post(&(cv->semBlockLock)); + return result; + } + + /* + * Check whether cv is still busy (still has waiters blocked) + */ + if (cv->nWaitersBlocked - cv->nWaitersUnblocked > 0) + {(cv->nWaitersBlocked + (void) sem_post(&(cv->semBlockLock)); + (void) pthread_mutex_unlock(&(cv->mtxUnblockLock)); + return EBUSY; + } + + /* + * Now it is safe to destroy + */ + (void) sem_destroy (&(cv->semBlockLock)); + (void) sem_destroy (&(cv->semBlockQueue)); + (void) pthread_mutex_unlock (&(cv->mtxUnblockLock)); + (void) pthread_mutex_destroy (&(cv->mtxUnblockLock)); + + free(cv); + *cond = NULL; + } + else + { + /* + * See notes in ptw32_cond_check_need_init() above also. + */ + EnterCriticalSection(&ptw32_cond_test_init_lock); + + /* + * Check again. + */ + if (*cond == (pthread_cond_t) PTW32_OBJECT_AUTO_INIT) + {(*cond + /* + * This is all we need to do to destroy a statically + * initialised cond that has not yet been used (initialised). + * If we get to here, another thread + * waiting to initialise this cond will get an EINVAL. + */ + *cond = NULL; + } + else + { + /* + * The cv has been initialised while we were waiting + * so assume it's in use. + */ + result = EBUSY; + } + + LeaveCriticalSection(&ptw32_cond_test_init_lock); + } + + return (result); +} + +/* + * Arguments for cond_wait_cleanup, since we can only pass a + * single void * to it. + */ +typedef struct { + pthread_mutex_t * mutexPtr; + pthread_cond_t cv; + int * resultPtr; +} ptw32_cond_wait_cleanup_args_t; + +static void +ptw32_cond_wait_cleanup(void * args) +{ + ptw32_cond_wait_cleanup_args_t * cleanup_args = +(ptw32_cond_wait_cleanup_args_t *) args; + pthread_cond_t cv = cleanup_args->cv; + int * resultPtr = cleanup_args->resultPtr; + int eLastSignal; /* enum: 1=yes 0=no -1=cancelled/timedout w/o signal(s) +*/ + int result; + + /* + * Whether we got here as a result of signal/broadcast or because of + * timeout on wait or thread cancellation we indicate that we are no + * longer waiting. The waiter is responsible for adjusting waiters + * (to)unblock(ed) counts (protected by unblock lock). + * Unblock lock/Sync.LEVEL-2 supports _timedwait and cancellation. + */ + if ((result = pthread_mutex_lock(&(cv->mtxUnblockLock))) != 0) + {((result + *resultPtr = result; + return; + } + + cv->nWaitersUnblocked++; + + eLastSignal = (cv->nWaitersToUnblock == 0) ? + -1 : (--cv->nWaitersToUnblock == 0); + + /* + * No more LEVEL-2 access to waiters (to)unblock(ed) counts needed + */ + if ((result = pthread_mutex_unlock(&(cv->mtxUnblockLock))) != 0) + {((result + *resultPtr = result; + return; + } + + /* + * If last signal... + */ + if (eLastSignal == 1) + {(eLastSignal + /* + * ...it means that we have end of 'atomic' signal/broadcast + */ + if (sem_post(&(cv->semBlockLock)) != 0) + {(sem_post(&(cv->semBlockLock)) + *resultPtr = errno; + return; + } + } + /* + * If not last signal and not timed out/cancelled wait w/o signal... + */ + else if (eLastSignal == 0) + { + /* + * ...it means that next waiter can go through semaphore + */ + if (sem_post(&(cv->semBlockQueue)) != 0) + {(sem_post(&(cv->semBlockQueue)) + *resultPtr = errno; + return; + } + } + + /* + * XSH: Upon successful return, the mutex has been locked and is owned + * by the calling thread + */ + if ((result = pthread_mutex_lock(cleanup_args->mutexPtr)) != 0) + {((result + *resultPtr = result; + } + +} /* ptw32_cond_wait_cleanup */ + +static int +ptw32_cond_timedwait (pthread_cond_t * cond, + pthread_mutex_t * mutex, + const struct timespec *abstime) +{ + int result = 0; + pthread_cond_t cv; + ptw32_cond_wait_cleanup_args_t cleanup_args; + + if (cond == NULL || *cond == NULL) + {(cond + return EINVAL; + } + + /* + * We do a quick check to see if we need to do more work + * to initialise a static condition variable. We check + * again inside the guarded section of ptw32_cond_check_need_init() + * to avoid race conditions. + */ + if (*cond == (pthread_cond_t) PTW32_OBJECT_AUTO_INIT) + {(*cond + result = ptw32_cond_check_need_init(cond); + } + + if (result != 0 && result != EBUSY) + {(result + return result; + } + + cv = *cond; + + /* + * Synchronize access to waiters blocked count (LEVEL-1) + */ + if (sem_wait(&(cv->semBlockLock)) != 0) + {(sem_wait(&(cv->semBlockLock)) + return errno; + } + + cv->nWaitersBlocked++; + + /* + * Thats it. Counted means waiting, no more access needed + */ + if (sem_post(&(cv->semBlockLock)) != 0) + {(sem_post(&(cv->semBlockLock)) + return errno; + } + + /* + * Setup this waiter cleanup handler + */ + cleanup_args.mutexPtr = mutex; + cleanup_args.cv = cv; + cleanup_args.resultPtr = &result; + + pthread_cleanup_push (ptw32_cond_wait_cleanup, (void *) &cleanup_args); + + /* + * Now we can release 'mutex' and... + */ + if ((result = pthread_mutex_unlock (mutex)) == 0) + {((result + + /* + * ...wait to be awakened by + * pthread_cond_signal, or + * pthread_cond_broadcast, or + * timeout, or + * thread cancellation + * + * Note: + * + * ptw32_sem_timedwait is a cancellation point, + * hence providing the mechanism for making + * pthread_cond_wait a cancellation point. + * We use the cleanup mechanism to ensure we + * re-lock the mutex and adjust (to)unblock(ed) waiters + * counts if we are cancelled, timed out or signalled. + */ + if (ptw32_sem_timedwait (&(cv->semBlockQueue), abstime) != 0) + {(ptw32_sem_timedwait + result = errno; + } + } + + /* + * Always cleanup + */ + pthread_cleanup_pop (1); + + + /* + * "result" can be modified by the cleanup handler. + */ + return (result); + +} /* ptw32_cond_timedwait */ + + +static int +ptw32_cond_unblock (pthread_cond_t * cond, + int unblockAll) +{ + int result; + pthread_cond_t cv; + + if (cond == NULL || *cond == NULL) + {(cond + return EINVAL; + } + + cv = *cond; + + /* + * No-op if the CV is static and hasn't been initialised yet. + * Assuming that any race condition is harmless. + */ + if (cv == (pthread_cond_t) PTW32_OBJECT_AUTO_INIT) + {(cv + return 0; + } + + /* + * Synchronize access to waiters blocked count (LEVEL-1) + */ + if (sem_wait(&(cv->semBlockLock)) != 0) + {(sem_wait(&(cv->semBlockLock)) + return errno; + } + + /* + * Synchronize access to waiters (to)unblock(ed) counts (LEVEL-2) + * This sync.level supports _timedwait and cancellation + */ + if ((result = pthread_mutex_lock(&(cv->mtxUnblockLock))) != 0) + {((result + return result; + } + + /* + * Adjust waiters blocked and unblocked counts (collect garbage) + */ + if (cv->nWaitersUnblocked != 0) + {(cv->nWaitersUnblocked + cv->nWaitersBlocked -= cv->nWaitersUnblocked; + cv->nWaitersUnblocked = 0; + } + + /* + * If (after adjustment) there are still some waiters blocked counted... + */ + if ( cv->nWaitersBlocked > 0) + {( + /* + * We will unblock first waiter and leave semBlockLock/LEVEL-1 locked + * LEVEL-1 access is left disabled until last signal/unblock +completes + */ + cv->nWaitersToUnblock = (unblockAll) ? cv->nWaitersBlocked : 1; + + /* + * No more LEVEL-2 access to waiters (to)unblock(ed) counts needed + * This sync.level supports _timedwait and cancellation + */ + if ((result = pthread_mutex_unlock(&(cv->mtxUnblockLock))) != 0) + {((result + return result; + } + + + /* + * Now, with LEVEL-2 lock released let first waiter go through +semaphore + */ + if (sem_post(&(cv->semBlockQueue)) != 0) + {(sem_post(&(cv->semBlockQueue)) + return errno; + } + } + /* + * No waiter blocked - no more LEVEL-1 access to blocked count needed... + */ + else if (sem_post(&(cv->semBlockLock)) != 0) + { + return errno; + } + /* + * ...and no more LEVEL-2 access to waiters (to)unblock(ed) counts needed +too + * This sync.level supports _timedwait and cancellation + */ + else + { + result = pthread_mutex_unlock(&(cv->mtxUnblockLock)); + } + + return(result); + +} /* ptw32_cond_unblock */ + +int +pthread_cond_wait (pthread_cond_t * cond, + pthread_mutex_t * mutex) +{ + /* The NULL abstime arg means INFINITE waiting. */ + return(ptw32_cond_timedwait(cond, mutex, NULL)); +} /* pthread_cond_wait */ + + +int +pthread_cond_timedwait (pthread_cond_t * cond, + pthread_mutex_t * mutex, + const struct timespec *abstime) +{ + if (abstime == NULL) + {(abstime + return EINVAL; + } + + return(ptw32_cond_timedwait(cond, mutex, abstime)); +} /* pthread_cond_timedwait */ + + +int +pthread_cond_signal (pthread_cond_t * cond) +{ + /* The '0'(FALSE) unblockAll arg means unblock ONE waiter. */ + return(ptw32_cond_unblock(cond, 0)); +} /* pthread_cond_signal */ + +int +pthread_cond_broadcast (pthread_cond_t * cond) +{ + /* The '1'(TRUE) unblockAll arg means unblock ALL waiters. */ + return(ptw32_cond_unblock(cond, 1)); +} /* pthread_cond_broadcast */ + + + + +TEREKHOV@de.ibm.com on 17.01.2001 01:00:57 + +Please respond to TEREKHOV@de.ibm.com + +To: pthreads-win32@sourceware.cygnus.com +cc: schmidt@uci.edu +Subject: win32 conditions: sem+counter+event = broadcast_deadlock + + spur.wakeup/unfairness/incorrectness ?? + + + + + + + +Hi, + +Problem 1: broadcast_deadlock + +It seems that current implementation does not provide "atomic" +broadcasts. That may lead to "nested" broadcasts... and it seems +that nested case is not handled correctly -> producing a broadcast +DEADLOCK as a result. + +Scenario: + +N (>1) waiting threads W1..N are blocked (in _wait) on condition's +semaphore. + +Thread B1 calls pthread_cond_broadcast, which results in "releasing" N +W threads via incrementing semaphore counter by N (stored in +cv->waiters) BUT cv->waiters counter does not change!! The caller +thread B1 remains blocked on cv->waitersDone event (auto-reset!!) BUT +condition is not protected from starting another broadcast (when called +on another thread) while still waiting for the "old" broadcast to +complete on thread B1. + +M (>=0, waiters counter. + +L (N-M) "late" waiter W threads are a) still blocked/not returned from +their semaphore wait call or b) were preempted after sem_wait but before +lock( &cv->waitersLock ) or c) are blocked on cv->waitersLock. + +cv->waiters is still > 0 (= L). + +Another thread B2 (or some W thread from M group) calls +pthread_cond_broadcast and gains access to counter... neither a) nor b) +prevent thread B2 in pthread_cond_broadcast from gaining access to +counter and starting another broadcast ( for c) - it depends on +cv->waitersLock scheduling rules: FIFO=OK, PRTY=PROBLEM,... ) + +That call to pthread_cond_broadcast (on thread B2) will result in +incrementing semaphore by cv->waiters (=L) which is INCORRECT (all +W1..N were in fact already released by thread B1) and waiting on +_auto-reset_ event cv->waitersDone which is DEADLY WRONG (produces a +deadlock)... + +All late W1..L threads now have a chance to complete their _wait call. +Last W_L thread sets an auto-reselt event cv->waitersDone which will +release either B1 or B2 leaving one of B threads in a deadlock. + +Problem 2: spur.wakeup/unfairness/incorrectness + +It seems that: + +a) because of the same problem with counter which does not reflect the +actual number of NOT RELEASED waiters, the signal call may increment +a semaphore counter w/o having a waiter blocked on it. That will result +in (best case) spurious wake ups - performance degradation due to +unnecessary context switches and predicate re-checks and (in worth case) +unfairness/incorrectness problem - see b) + +b) neither signal nor broadcast prevent other threads - "new waiters" +(and in the case of signal, the caller thread as well) from going into +_wait and overtaking "old" waiters (already released but still not returned +from sem_wait on condition's semaphore). Win semaphore just [API DOC]: +"Maintains a count between zero and some maximum value, limiting the number +of threads that are simultaneously accessing a shared resource." Calling +ReleaseSemaphore does not imply (at least not documented) that on return +from ReleaseSemaphore all waiters will in fact become released (returned +from their Wait... call) and/or that new waiters calling Wait... afterwards +will become less importance. It is NOT documented to be an atomic release +of +waiters... And even if it would be there is still a problem with a thread +being preempted after Wait on semaphore and before Wait on cv->waitersLock +and scheduling rules for cv->waitersLock itself +(??WaitForMultipleObjects??) +That may result in unfairness/incorrectness problem as described +for SetEvent impl. in "Strategies for Implementing POSIX Condition +Variables +on Win32": http://www.cs.wustl.edu/~schmidt/win32-cv-1.html + +Unfairness -- The semantics of the POSIX pthread_cond_broadcast function is +to wake up all threads currently blocked in wait calls on the condition +variable. The awakened threads then compete for the external_mutex. To +ensure +fairness, all of these threads should be released from their +pthread_cond_wait calls and allowed to recheck their condition expressions +before other threads can successfully complete a wait on the condition +variable. + +Unfortunately, the SetEvent implementation above does not guarantee that +all +threads sleeping on the condition variable when cond_broadcast is called +will +acquire the external_mutex and check their condition expressions. Although +the Pthreads specification does not mandate this degree of fairness, the +lack of fairness can cause starvation. + +To illustrate the unfairness problem, imagine there are 2 threads, C1 and +C2, +that are blocked in pthread_cond_wait on condition variable not_empty_ that +is guarding a thread-safe message queue. Another thread, P1 then places two +messages onto the queue and calls pthread_cond_broadcast. If C1 returns +from +pthread_cond_wait, dequeues and processes the message, and immediately +waits +again then it and only it may end up acquiring both messages. Thus, C2 will +never get a chance to dequeue a message and run. + +The following illustrates the sequence of events: + +1. Thread C1 attempts to dequeue and waits on CV non_empty_ +2. Thread C2 attempts to dequeue and waits on CV non_empty_ +3. Thread P1 enqueues 2 messages and broadcasts to CV not_empty_ +4. Thread P1 exits +5. Thread C1 wakes up from CV not_empty_, dequeues a message and runs +6. Thread C1 waits again on CV not_empty_, immediately dequeues the 2nd + message and runs +7. Thread C1 exits +8. Thread C2 is the only thread left and blocks forever since + not_empty_ will never be signaled + +Depending on the algorithm being implemented, this lack of fairness may +yield +concurrent programs that have subtle bugs. Of course, application +developers +should not rely on the fairness semantics of pthread_cond_broadcast. +However, +there are many cases where fair implementations of condition variables can +simplify application code. + +Incorrectness -- A variation on the unfairness problem described above +occurs +when a third consumer thread, C3, is allowed to slip through even though it +was not waiting on condition variable not_empty_ when a broadcast occurred. + +To illustrate this, we will use the same scenario as above: 2 threads, C1 +and +C2, are blocked dequeuing messages from the message queue. Another thread, +P1 +then places two messages onto the queue and calls pthread_cond_broadcast. +C1 +returns from pthread_cond_wait, dequeues and processes the message. At this +time, C3 acquires the external_mutex, calls pthread_cond_wait and waits on +the events in WaitForMultipleObjects. Since C2 has not had a chance to run +yet, the BROADCAST event is still signaled. C3 then returns from +WaitForMultipleObjects, and dequeues and processes the message in the +queue. +Thus, C2 will never get a chance to dequeue a message and run. + +The following illustrates the sequence of events: + +1. Thread C1 attempts to dequeue and waits on CV non_empty_ +2. Thread C2 attempts to dequeue and waits on CV non_empty_ +3. Thread P1 enqueues 2 messages and broadcasts to CV not_empty_ +4. Thread P1 exits +5. Thread C1 wakes up from CV not_empty_, dequeues a message and runs +6. Thread C1 exits +7. Thread C3 waits on CV not_empty_, immediately dequeues the 2nd + message and runs +8. Thread C3 exits +9. Thread C2 is the only thread left and blocks forever since + not_empty_ will never be signaled + +In the above case, a thread that was not waiting on the condition variable +when a broadcast occurred was allowed to proceed. This leads to incorrect +semantics for a condition variable. + + +COMMENTS??? + +regards, +alexander. + +----------------------------------------------------------------------------- + +Subject: RE: FYI/comp.programming.threads/Re: pthread_cond_* + implementation questions +Date: Wed, 21 Feb 2001 11:54:47 +0100 +From: TEREKHOV@de.ibm.com +To: lthomas@arbitrade.com +CC: rpj@ise.canberra.edu.au, Thomas Pfaff , + Nanbor Wang + +Hi Louis, + +generation number 8.. + +had some time to revisit timeouts/spurious wakeup problem.. +found some bugs (in 7.b/c/d) and something to improve +(7a - using IPC semaphores but it should speedup Win32 +version as well). + +regards, +alexander. + +---------- Algorithm 8a / IMPL_SEM,UNBLOCK_STRATEGY == UNBLOCK_ALL ------ +given: +semBlockLock - bin.semaphore +semBlockQueue - semaphore +mtxExternal - mutex or CS +mtxUnblockLock - mutex or CS +nWaitersGone - int +nWaitersBlocked - int +nWaitersToUnblock - int + +wait( timeout ) { + + [auto: register int result ] // error checking omitted + [auto: register int nSignalsWasLeft ] + [auto: register int nWaitersWasGone ] + + sem_wait( semBlockLock ); + nWaitersBlocked++; + sem_post( semBlockLock ); + + unlock( mtxExternal ); + bTimedOut = sem_wait( semBlockQueue,timeout ); + + lock( mtxUnblockLock ); + if ( 0 != (nSignalsWasLeft = nWaitersToUnblock) ) { + if ( bTimeout ) { // timeout (or canceled) + if ( 0 != nWaitersBlocked ) { + nWaitersBlocked--; + } + else { + nWaitersGone++; // count spurious wakeups + } + } + if ( 0 == --nWaitersToUnblock ) { + if ( 0 != nWaitersBlocked ) { + sem_post( semBlockLock ); // open the gate + nSignalsWasLeft = 0; // do not open the gate below +again + } + else if ( 0 != (nWaitersWasGone = nWaitersGone) ) { + nWaitersGone = 0; + } + } + } + else if ( INT_MAX/2 == ++nWaitersGone ) { // timeout/canceled or spurious +semaphore :-) + sem_wait( semBlockLock ); + nWaitersBlocked -= nWaitersGone; // something is going on here - +test of timeouts? :-) + sem_post( semBlockLock ); + nWaitersGone = 0; + } + unlock( mtxUnblockLock ); + + if ( 1 == nSignalsWasLeft ) { + if ( 0 != nWaitersWasGone ) { + // sem_adjust( -nWaitersWasGone ); + while ( nWaitersWasGone-- ) { + sem_wait( semBlockLock ); // better now than spurious +later + } + } + sem_post( semBlockLock ); // open the gate + } + + lock( mtxExternal ); + + return ( bTimedOut ) ? ETIMEOUT : 0; +} + +signal(bAll) { + + [auto: register int result ] + [auto: register int nSignalsToIssue] + + lock( mtxUnblockLock ); + + if ( 0 != nWaitersToUnblock ) { // the gate is closed!!! + if ( 0 == nWaitersBlocked ) { // NO-OP + return unlock( mtxUnblockLock ); + } + if (bAll) { + nWaitersToUnblock += nSignalsToIssue=nWaitersBlocked; + nWaitersBlocked = 0; + } + else { + nSignalsToIssue = 1; + nWaitersToUnblock++; + nWaitersBlocked--; + } + } + else if ( nWaitersBlocked > nWaitersGone ) { // HARMLESS RACE CONDITION! + sem_wait( semBlockLock ); // close the gate + if ( 0 != nWaitersGone ) { + nWaitersBlocked -= nWaitersGone; + nWaitersGone = 0; + } + if (bAll) { + nSignalsToIssue = nWaitersToUnblock = nWaitersBlocked; + nWaitersBlocked = 0; + } + else { + nSignalsToIssue = nWaitersToUnblock = 1; + nWaitersBlocked--; + } + } + else { // NO-OP + return unlock( mtxUnblockLock ); + } + + unlock( mtxUnblockLock ); + sem_post( semBlockQueue,nSignalsToIssue ); + return result; +} + +---------- Algorithm 8b / IMPL_SEM,UNBLOCK_STRATEGY == UNBLOCK_ONEBYONE +------ +given: +semBlockLock - bin.semaphore +semBlockQueue - bin.semaphore +mtxExternal - mutex or CS +mtxUnblockLock - mutex or CS +nWaitersGone - int +nWaitersBlocked - int +nWaitersToUnblock - int + +wait( timeout ) { + + [auto: register int result ] // error checking omitted + [auto: register int nWaitersWasGone ] + [auto: register int nSignalsWasLeft ] + + sem_wait( semBlockLock ); + nWaitersBlocked++; + sem_post( semBlockLock ); + + unlock( mtxExternal ); + bTimedOut = sem_wait( semBlockQueue,timeout ); + + lock( mtxUnblockLock ); + if ( 0 != (nSignalsWasLeft = nWaitersToUnblock) ) { + if ( bTimeout ) { // timeout (or canceled) + if ( 0 != nWaitersBlocked ) { + nWaitersBlocked--; + nSignalsWasLeft = 0; // do not unblock next waiter +below (already unblocked) + } + else { + nWaitersGone = 1; // spurious wakeup pending!! + } + } + if ( 0 == --nWaitersToUnblock && + if ( 0 != nWaitersBlocked ) { + sem_post( semBlockLock ); // open the gate + nSignalsWasLeft = 0; // do not open the gate below +again + } + else if ( 0 != (nWaitersWasGone = nWaitersGone) ) { + nWaitersGone = 0; + } + } + } + else if ( INT_MAX/2 == ++nWaitersGone ) { // timeout/canceled or spurious +semaphore :-) + sem_wait( semBlockLock ); + nWaitersBlocked -= nWaitersGone; // something is going on here - +test of timeouts? :-) + sem_post( semBlockLock ); + nWaitersGone = 0; + } + unlock( mtxUnblockLock ); + + if ( 1 == nSignalsWasLeft ) { + if ( 0 != nWaitersWasGone ) { + // sem_adjust( -1 ); + sem_wait( semBlockQueue ); // better now than spurious +later + } + sem_post( semBlockLock ); // open the gate + } + else if ( 0 != nSignalsWasLeft ) { + sem_post( semBlockQueue ); // unblock next waiter + } + + lock( mtxExternal ); + + return ( bTimedOut ) ? ETIMEOUT : 0; +} + +signal(bAll) { + + [auto: register int result ] + + lock( mtxUnblockLock ); + + if ( 0 != nWaitersToUnblock ) { // the gate is closed!!! + if ( 0 == nWaitersBlocked ) { // NO-OP + return unlock( mtxUnblockLock ); + } + if (bAll) { + nWaitersToUnblock += nWaitersBlocked; + nWaitersBlocked = 0; + } + else { + nWaitersToUnblock++; + nWaitersBlocked--; + } + unlock( mtxUnblockLock ); + } + else if ( nWaitersBlocked > nWaitersGone ) { // HARMLESS RACE CONDITION! + sem_wait( semBlockLock ); // close the gate + if ( 0 != nWaitersGone ) { + nWaitersBlocked -= nWaitersGone; + nWaitersGone = 0; + } + if (bAll) { + nWaitersToUnblock = nWaitersBlocked; + nWaitersBlocked = 0; + } + else { + nWaitersToUnblock = 1; + nWaitersBlocked--; + } + unlock( mtxUnblockLock ); + sem_post( semBlockQueue ); + } + else { // NO-OP + unlock( mtxUnblockLock ); + } + + return result; +} + +---------- Algorithm 8c / IMPL_EVENT,UNBLOCK_STRATEGY == UNBLOCK_ONEBYONE +--------- +given: +hevBlockLock - auto-reset event +hevBlockQueue - auto-reset event +mtxExternal - mutex or CS +mtxUnblockLock - mutex or CS +nWaitersGone - int +nWaitersBlocked - int +nWaitersToUnblock - int + +wait( timeout ) { + + [auto: register int result ] // error checking omitted + [auto: register int nSignalsWasLeft ] + [auto: register int nWaitersWasGone ] + + wait( hevBlockLock,INFINITE ); + nWaitersBlocked++; + set_event( hevBlockLock ); + + unlock( mtxExternal ); + bTimedOut = wait( hevBlockQueue,timeout ); + + lock( mtxUnblockLock ); + if ( 0 != (SignalsWasLeft = nWaitersToUnblock) ) { + if ( bTimeout ) { // timeout (or canceled) + if ( 0 != nWaitersBlocked ) { + nWaitersBlocked--; + nSignalsWasLeft = 0; // do not unblock next waiter +below (already unblocked) + } + else { + nWaitersGone = 1; // spurious wakeup pending!! + } + } + if ( 0 == --nWaitersToUnblock ) + if ( 0 != nWaitersBlocked ) { + set_event( hevBlockLock ); // open the gate + nSignalsWasLeft = 0; // do not open the gate below +again + } + else if ( 0 != (nWaitersWasGone = nWaitersGone) ) { + nWaitersGone = 0; + } + } + } + else if ( INT_MAX/2 == ++nWaitersGone ) { // timeout/canceled or spurious +event :-) + wait( hevBlockLock,INFINITE ); + nWaitersBlocked -= nWaitersGone; // something is going on here - +test of timeouts? :-) + set_event( hevBlockLock ); + nWaitersGone = 0; + } + unlock( mtxUnblockLock ); + + if ( 1 == nSignalsWasLeft ) { + if ( 0 != nWaitersWasGone ) { + reset_event( hevBlockQueue ); // better now than spurious +later + } + set_event( hevBlockLock ); // open the gate + } + else if ( 0 != nSignalsWasLeft ) { + set_event( hevBlockQueue ); // unblock next waiter + } + + lock( mtxExternal ); + + return ( bTimedOut ) ? ETIMEOUT : 0; +} + +signal(bAll) { + + [auto: register int result ] + + lock( mtxUnblockLock ); + + if ( 0 != nWaitersToUnblock ) { // the gate is closed!!! + if ( 0 == nWaitersBlocked ) { // NO-OP + return unlock( mtxUnblockLock ); + } + if (bAll) { + nWaitersToUnblock += nWaitersBlocked; + nWaitersBlocked = 0; + } + else { + nWaitersToUnblock++; + nWaitersBlocked--; + } + unlock( mtxUnblockLock ); + } + else if ( nWaitersBlocked > nWaitersGone ) { // HARMLESS RACE CONDITION! + wait( hevBlockLock,INFINITE ); // close the gate + if ( 0 != nWaitersGone ) { + nWaitersBlocked -= nWaitersGone; + nWaitersGone = 0; + } + if (bAll) { + nWaitersToUnblock = nWaitersBlocked; + nWaitersBlocked = 0; + } + else { + nWaitersToUnblock = 1; + nWaitersBlocked--; + } + unlock( mtxUnblockLock ); + set_event( hevBlockQueue ); + } + else { // NO-OP + unlock( mtxUnblockLock ); + } + + return result; +} + +---------- Algorithm 8d / IMPL_EVENT,UNBLOCK_STRATEGY == UNBLOCK_ALL ------ +given: +hevBlockLock - auto-reset event +hevBlockQueueS - auto-reset event // for signals +hevBlockQueueB - manual-reset even // for broadcasts +mtxExternal - mutex or CS +mtxUnblockLock - mutex or CS +eBroadcast - int // 0: no broadcast, 1: broadcast, 2: +broadcast after signal(s) +nWaitersGone - int +nWaitersBlocked - int +nWaitersToUnblock - int + +wait( timeout ) { + + [auto: register int result ] // error checking omitted + [auto: register int eWasBroadcast ] + [auto: register int nSignalsWasLeft ] + [auto: register int nWaitersWasGone ] + + wait( hevBlockLock,INFINITE ); + nWaitersBlocked++; + set_event( hevBlockLock ); + + unlock( mtxExternal ); + bTimedOut = waitformultiple( hevBlockQueueS,hevBlockQueueB,timeout,ONE ); + + lock( mtxUnblockLock ); + if ( 0 != (SignalsWasLeft = nWaitersToUnblock) ) { + if ( bTimeout ) { // timeout (or canceled) + if ( 0 != nWaitersBlocked ) { + nWaitersBlocked--; + nSignalsWasLeft = 0; // do not unblock next waiter +below (already unblocked) + } + else if ( 1 != eBroadcast ) { + nWaitersGone = 1; + } + } + if ( 0 == --nWaitersToUnblock ) { + if ( 0 != nWaitersBlocked ) { + set_event( hevBlockLock ); // open the gate + nSignalsWasLeft = 0; // do not open the gate below +again + } + else { + if ( 0 != (eWasBroadcast = eBroadcast) ) { + eBroadcast = 0; + } + if ( 0 != (nWaitersWasGone = nWaitersGone ) { + nWaitersGone = 0; + } + } + } + else if ( 0 != eBroadcast ) { + nSignalsWasLeft = 0; // do not unblock next waiter +below (already unblocked) + } + } + else if ( INT_MAX/2 == ++nWaitersGone ) { // timeout/canceled or spurious +event :-) + wait( hevBlockLock,INFINITE ); + nWaitersBlocked -= nWaitersGone; // something is going on here - +test of timeouts? :-) + set_event( hevBlockLock ); + nWaitersGone = 0; + } + unlock( mtxUnblockLock ); + + if ( 1 == nSignalsWasLeft ) { + if ( 0 != eWasBroadcast ) { + reset_event( hevBlockQueueB ); + } + if ( 0 != nWaitersWasGone ) { + reset_event( hevBlockQueueS ); // better now than spurious +later + } + set_event( hevBlockLock ); // open the gate + } + else if ( 0 != nSignalsWasLeft ) { + set_event( hevBlockQueueS ); // unblock next waiter + } + + lock( mtxExternal ); + + return ( bTimedOut ) ? ETIMEOUT : 0; +} + +signal(bAll) { + + [auto: register int result ] + [auto: register HANDLE hevBlockQueue ] + + lock( mtxUnblockLock ); + + if ( 0 != nWaitersToUnblock ) { // the gate is closed!!! + if ( 0 == nWaitersBlocked ) { // NO-OP + return unlock( mtxUnblockLock ); + } + if (bAll) { + nWaitersToUnblock += nWaitersBlocked; + nWaitersBlocked = 0; + eBroadcast = 2; + hevBlockQueue = hevBlockQueueB; + } + else { + nWaitersToUnblock++; + nWaitersBlocked--; + return unlock( mtxUnblockLock ); + } + } + else if ( nWaitersBlocked > nWaitersGone ) { // HARMLESS RACE CONDITION! + wait( hevBlockLock,INFINITE ); // close the gate + if ( 0 != nWaitersGone ) { + nWaitersBlocked -= nWaitersGone; + nWaitersGone = 0; + } + if (bAll) { + nWaitersToUnblock = nWaitersBlocked; + nWaitersBlocked = 0; + eBroadcast = 1; + hevBlockQueue = hevBlockQueueB; + } + else { + nWaitersToUnblock = 1; + nWaitersBlocked--; + hevBlockQueue = hevBlockQueueS; + } + } + else { // NO-OP + return unlock( mtxUnblockLock ); + } + + unlock( mtxUnblockLock ); + set_event( hevBlockQueue ); + return result; +} +---------------------- Forwarded by Alexander Terekhov/Germany/IBM on +02/21/2001 09:13 AM --------------------------- + +Alexander Terekhov +02/20/2001 04:33 PM + +To: Louis Thomas +cc: + +From: Alexander Terekhov/Germany/IBM@IBMDE +Subject: RE: FYI/comp.programming.threads/Re: pthread_cond_* implementatio + n questions +Importance: Normal + +>Sorry, gotta take a break and work on something else for a while. +>Real work +>calls, unfortunately. I'll get back to you in two or three days. + +ok. no problem. here is some more stuff for pauses you might have +in between :) + +---------- Algorithm 7d / IMPL_EVENT,UNBLOCK_STRATEGY == UNBLOCK_ALL ------ +given: +hevBlockLock - auto-reset event +hevBlockQueueS - auto-reset event // for signals +hevBlockQueueB - manual-reset even // for broadcasts +mtxExternal - mutex or CS +mtxUnblockLock - mutex or CS +bBroadcast - int +nWaitersGone - int +nWaitersBlocked - int +nWaitersToUnblock - int + +wait( timeout ) { + + [auto: register int result ] // error checking omitted + [auto: register int bWasBroadcast ] + [auto: register int nSignalsWasLeft ] + + wait( hevBlockLock,INFINITE ); + nWaitersBlocked++; + set_event( hevBlockLock ); + + unlock( mtxExternal ); + bTimedOut = waitformultiple( hevBlockQueueS,hevBlockQueueB,timeout,ONE ); + + lock( mtxUnblockLock ); + if ( 0 != (SignalsWasLeft = nWaitersToUnblock) ) { + if ( bTimeout ) { // timeout (or canceled) + if ( 0 != nWaitersBlocked ) { + nWaitersBlocked--; + nSignalsWasLeft = 0; // do not unblock next waiter +below (already unblocked) + } + else if ( !bBroadcast ) { + wait( hevBlockQueueS,INFINITE ); // better now than spurious +later + } + } + if ( 0 == --nWaitersToUnblock ) { + if ( 0 != nWaitersBlocked ) { + if ( bBroadcast ) { + reset_event( hevBlockQueueB ); + bBroadcast = false; + } + set_event( hevBlockLock ); // open the gate + nSignalsWasLeft = 0; // do not open the gate below +again + } + else if ( false != (bWasBroadcast = bBroadcast) ) { + bBroadcast = false; + } + } + else { + bWasBroadcast = bBroadcast; + } + } + else if ( INT_MAX/2 == ++nWaitersGone ) { // timeout/canceled or spurious +event :-) + wait( hevBlockLock,INFINITE ); + nWaitersBlocked -= nWaitersGone; // something is going on here - +test of timeouts? :-) + set_event( hevBlockLock ); + nWaitersGone = 0; + } + unlock( mtxUnblockLock ); + + if ( 1 == nSignalsWasLeft ) { + if ( bWasBroadcast ) { + reset_event( hevBlockQueueB ); + } + set_event( hevBlockLock ); // open the gate + } + else if ( 0 != nSignalsWasLeft && !bWasBroadcast ) { + set_event( hevBlockQueueS ); // unblock next waiter + } + + lock( mtxExternal ); + + return ( bTimedOut ) ? ETIMEOUT : 0; +} + +signal(bAll) { + + [auto: register int result ] + [auto: register HANDLE hevBlockQueue ] + + lock( mtxUnblockLock ); + + if ( 0 != nWaitersToUnblock ) { // the gate is closed!!! + if ( 0 == nWaitersBlocked ) { // NO-OP + return unlock( mtxUnblockLock ); + } + if (bAll) { + nWaitersToUnblock += nWaitersBlocked; + nWaitersBlocked = 0; + bBroadcast = true; + hevBlockQueue = hevBlockQueueB; + } + else { + nWaitersToUnblock++; + nWaitersBlocked--; + return unlock( mtxUnblockLock ); + } + } + else if ( nWaitersBlocked > nWaitersGone ) { // HARMLESS RACE CONDITION! + wait( hevBlockLock,INFINITE ); // close the gate + if ( 0 != nWaitersGone ) { + nWaitersBlocked -= nWaitersGone; + nWaitersGone = 0; + } + if (bAll) { + nWaitersToUnblock = nWaitersBlocked; + nWaitersBlocked = 0; + bBroadcast = true; + hevBlockQueue = hevBlockQueueB; + } + else { + nWaitersToUnblock = 1; + nWaitersBlocked--; + hevBlockQueue = hevBlockQueueS; + } + } + else { // NO-OP + return unlock( mtxUnblockLock ); + } + + unlock( mtxUnblockLock ); + set_event( hevBlockQueue ); + return result; +} + + +---------------------------------------------------------------------------- + +Subject: RE: FYI/comp.programming.threads/Re: pthread_cond_* implementatio + n questions +Date: Mon, 26 Feb 2001 22:20:12 -0600 +From: Louis Thomas +To: "'TEREKHOV@de.ibm.com'" +CC: rpj@ise.canberra.edu.au, Thomas Pfaff , + Nanbor Wang + + +Sorry all. Busy week. + +> this insures the fairness +> which POSIX does not (e.g. two subsequent broadcasts - the gate does +insure +> that first wave waiters will start the race for the mutex before waiters +> from the second wave - Linux pthreads process/unblock both waves +> concurrently...) + +I'm not sure how we are any more fair about this than Linux. We certainly +don't guarantee that the threads released by the first broadcast will get +the external mutex before the threads of the second wave. In fact, it is +possible that those threads will never get the external mutex if there is +enough contention for it. + +> e.g. i was thinking about implementation with a pool of +> N semaphores/counters [...] + +I considered that too. The problem is as you mentioned in a). You really +need to assign threads to semaphores once you know how you want to wake them +up, not when they first begin waiting which is the only time you can assign +them. + +> well, i am not quite sure that i've fully understood your scenario, + +Hmm. Well, it think it's an important example, so I'll try again. First, we +have thread A which we KNOW is waiting on a condition. As soon as it becomes +unblocked for any reason, we will know because it will set a flag. Since the +flag is not set, we are 100% confident that thread A is waiting on the +condition. We have another thread, thread B, which has acquired the mutex +and is about to wait on the condition. Thus it is pretty clear that at any +point, either just A is waiting, or A and B are waiting. Now thread C comes +along. C is about to do a broadcast on the condition. A broadcast is +guaranteed to unblock all threads currently waiting on a condition, right? +Again, we said that either just A is waiting, or A and B are both waiting. +So, when C does its broadcast, depending upon whether B has started waiting +or not, thread C will unblock A or unblock A and B. Either way, C must +unblock A, right? + +Now, you said anything that happens is correct so long as a) "a signal is +not lost between unlocking the mutex and waiting on the condition" and b) "a +thread must not steal a signal it sent", correct? Requirement b) is easy to +satisfy: in this scenario, thread C will never wait on the condition, so it +won't steal any signals. Requirement a) is not hard either. The only way we +could fail to meet requirement a) in this scenario is if thread B was +started waiting but didn't wake up because a signal was lost. This will not +happen. + +Now, here is what happens. Assume thread C beats thread B. Thread C looks to +see how many threads are waiting on the condition. Thread C sees just one +thread, thread A, waiting. It does a broadcast waking up just one thread +because just one thread is waiting. Next, before A can become unblocked, +thread B begins waiting. Now there are two threads waiting, but only one +will be unblocked. Suppose B wins. B will become unblocked. A will not +become unblocked, because C only unblocked one thread (sema_post cond, 1). +So at the end, B finishes and A remains blocked. + +We have met both of your requirements, so by your rules, this is an +acceptable outcome. However, I think that the spec says this is an +unacceptable outcome! We know for certain that A was waiting and that C did +a broadcast, but A did not become unblocked! Yet, the spec says that a +broadcast wakes up all waiting threads. This did not happen. Do you agree +that this shows your rules are not strict enough? + +> and what about N2? :) this one does allow almost everything. + +Don't get me started about rule #2. I'll NEVER advocate an algorithm that +uses rule 2 as an excuse to suck! + +> but it is done (decrement)under mutex protection - this is not a subject +> of a race condition. + +You are correct. My mistake. + +> i would remove "_bTimedOut=false".. after all, it was a real timeout.. + +I disagree. A thread that can't successfully retract its waiter status can't +really have timed out. If a thread can't return without executing extra code +to deal with the fact that someone tried to unblock it, I think it is a poor +idea to pretend we +didn't realize someone was trying to signal us. After all, a signal is more +important than a time out. + +> when nSignaled != 0, it is possible to update nWaiters (--) and do not +> touch nGone + +I realize this, but I was thinking that writing it the other ways saves +another if statement. + +> adjust only if nGone != 0 and save one cache memory write - probably much +slower than 'if' + +Hmm. You are probably right. + +> well, in a strange (e.g. timeout test) program you may (theoretically) +> have an overflow of nWaiters/nGone counters (with waiters repeatedly +timing +> out and no signals at all). + +Also true. Not only that, but you also have the possibility that one could +overflow the number of waiters as well! However, considering the limit you +have chosen for nWaitersGone, I suppose it is unlikely that anyone would be +able to get INT_MAX/2 threads waiting on a single condition. :) + +Analysis of 8a: + +It looks correct to me. + +What are IPC semaphores? + +In the line where you state, "else if ( nWaitersBlocked > nWaitersGone ) { +// HARMLESS RACE CONDITION!" there is no race condition for nWaitersGone +because nWaitersGone is never modified without holding mtxUnblockLock. You +are correct that there is a harmless race on nWaitersBlocked, which can +increase and make the condition become true just after we check it. If this +happens, we interpret it as the wait starting after the signal. + +I like your optimization of this. You could improve Alg. 6 as follows: +---------- Algorithm 6b ---------- +signal(bAll) { + _nSig=0 + lock counters + // this is safe because nWaiting can only be decremented by a thread that + // owns counters and nGone can only be changed by a thread that owns +counters. + if (nWaiting>nGone) { + if (0==nSignaled) { + sema_wait gate // close gate if not already closed + } + if (nGone>0) { + nWaiting-=nGone + nGone=0 + } + _nSig=bAll?nWaiting:1 + nSignaled+=_nSig + nWaiting-=_nSig + } + unlock counters + if (0!=_nSig) { + sema_post queue, _nSig + } +} +---------- ---------- ---------- +I guess this wouldn't apply to Alg 8a because nWaitersGone changes meanings +depending upon whether the gate is open or closed. + +In the loop "while ( nWaitersWasGone-- ) {" you do a sema_wait on +semBlockLock. Perhaps waiting on semBlockQueue would be a better idea. + +What have you gained by making the last thread to be signaled do the waits +for all the timed out threads, besides added complexity? It took me a long +time to figure out what your objective was with this, to realize you were +using nWaitersGone to mean two different things, and to verify that you +hadn't introduced any bug by doing this. Even now I'm not 100% sure. + +What has all this playing about with nWaitersGone really gained us besides a +lot of complexity (it is much harder to verify that this solution is +correct), execution overhead (we now have a lot more if statements to +evaluate), and space overhead (more space for the extra code, and another +integer in our data)? We did manage to save a lock/unlock pair in an +uncommon case (when a time out occurs) at the above mentioned expenses in +the common cases. + +As for 8b, c, and d, they look ok though I haven't studied them thoroughly. +What would you use them for? + + Later, + -Louis! :) + +----------------------------------------------------------------------------- + +Subject: RE: FYI/comp.programming.threads/Re: pthread_cond_* implementatio + n questions +Date: Tue, 27 Feb 2001 15:51:28 +0100 +From: TEREKHOV@de.ibm.com +To: Louis Thomas +CC: rpj@ise.canberra.edu.au, Thomas Pfaff , + Nanbor Wang + +Hi Louis, + +>> that first wave waiters will start the race for the mutex before waiters +>> from the second wave - Linux pthreads process/unblock both waves +>> concurrently...) +> +>I'm not sure how we are any more fair about this than Linux. We certainly +>don't guarantee that the threads released by the first broadcast will get +>the external mutex before the threads of the second wave. In fact, it is +>possible that those threads will never get the external mutex if there is +>enough contention for it. + +correct. but gate is nevertheless more fair than Linux because of the +barrier it establishes between two races (1st and 2nd wave waiters) for +the mutex which under 'normal' circumstances (e.g. all threads of equal +priorities,..) will 'probably' result in fair behaviour with respect to +mutex ownership. + +>> well, i am not quite sure that i've fully understood your scenario, +> +>Hmm. Well, it think it's an important example, so I'll try again. ... + +ok. now i seem to understand this example. well, now it seems to me +that the only meaningful rule is just: + +a) "a signal is not lost between unlocking the mutex and waiting on the +condition" + +and that the rule + +b) "a thread must not steal a signal it sent" + +is not needed at all because a thread which violates b) also violates a). + +i'll try to explain.. + +i think that the most important thing is how POSIX defines waiter's +visibility: + +"if another thread is able to acquire the mutex after the about-to-block +thread +has released it, then a subsequent call to pthread_cond_signal() or +pthread_cond_broadcast() in that thread behaves as if it were issued after +the about-to-block thread has blocked. " + +my understanding is the following: + +1) there is no guarantees whatsoever with respect to whether +signal/broadcast +will actually unblock any 'waiter' if it is done w/o acquiring the mutex +first +(note that a thread may release it before signal/broadcast - it does not +matter). + +2) it is guaranteed that waiters become 'visible' - eligible for unblock as +soon +as signalling thread acquires the mutex (but not before!!) + +so.. + +>So, when C does its broadcast, depending upon whether B has started +waiting +>or not, thread C will unblock A or unblock A and B. Either way, C must +>unblock A, right? + +right. but only if C did acquire the mutex prior to broadcast (it may +release it before broadcast as well). + +implementation will violate waiters visibility rule (signal will become +lost) +if C will not unblock A. + +>Now, here is what happens. Assume thread C beats thread B. Thread C looks +to +>see how many threads are waiting on the condition. Thread C sees just one +>thread, thread A, waiting. It does a broadcast waking up just one thread +>because just one thread is waiting. Next, before A can become unblocked, +>thread B begins waiting. Now there are two threads waiting, but only one +>will be unblocked. Suppose B wins. B will become unblocked. A will not +>become unblocked, because C only unblocked one thread (sema_post cond, 1). +>So at the end, B finishes and A remains blocked. + +thread C did acquire the mutex ("Thread C sees just one thread, thread A, +waiting"). beginning from that moment it is guaranteed that subsequent +broadcast will unblock A. Otherwise we will have a lost signal with respect +to A. I do think that it does not matter whether the signal was physically +(completely) lost or was just stolen by another thread (B) - in both cases +it was simply lost with respect to A. + +>..Do you agree that this shows your rules are not strict enough? + +probably the opposite.. :-) i think that it shows that the only meaningful +rule is + +a) "a signal is not lost between unlocking the mutex and waiting on the +condition" + +with clarification of waiters visibility as defined by POSIX above. + +>> i would remove "_bTimedOut=false".. after all, it was a real timeout.. +> +>I disagree. A thread that can't successfully retract its waiter status +can't +>really have timed out. If a thread can't return without executing extra +code +>to deal with the fact that someone tried to unblock it, I think it is a +poor +>idea to pretend we +>didn't realize someone was trying to signal us. After all, a signal is +more +>important than a time out. + +a) POSIX does allow timed out thread to consume a signal (cancelled is +not). +b) ETIMEDOUT status just says that: "The time specified by abstime to +pthread_cond_timedwait() has passed." +c) it seem to me that hiding timeouts would violate "The +pthread_cond_timedwait() +function is the same as pthread_cond_wait() except that an error is +returned if +the absolute time specified by abstime passes (that is, system time equals +or +exceeds abstime) before the condition cond is signaled or broadcasted" +because +the abs. time did really pass before cond was signaled (waiter was +released via semaphore). however, if it really matters, i could imaging +that we +can save an abs. time of signal/broadcast and compare it with timeout after +unblock to find out whether it was a 'real' timeout or not. absent this +check +i do think that hiding timeouts would result in technical violation of +specification.. but i think that this check is not important and we can +simply +trust timeout error code provided by wait since we are not trying to make +'hard' realtime implementation. + +>What are IPC semaphores? + + +int semctl(int, int, int, ...); +int semget(key_t, int, int); +int semop(int, struct sembuf *, size_t); + +they support adjustment of semaphore counter (semvalue) +in one single call - imaging Win32 ReleaseSemaphore( hsem,-N ) + +>In the line where you state, "else if ( nWaitersBlocked > nWaitersGone ) { +>// HARMLESS RACE CONDITION!" there is no race condition for nWaitersGone +>because nWaitersGone is never modified without holding mtxUnblockLock. You +>are correct that there is a harmless race on nWaitersBlocked, which can +>increase and make the condition become true just after we check it. If +this +>happens, we interpret it as the wait starting after the signal. + +well, the reason why i've asked on comp.programming.threads whether this +race +condition is harmless or not is that in order to be harmless it should not +violate the waiters visibility rule (see above). Fortunately, we increment +the counter under protection of external mutex.. so that any (signalling) +thread which will acquire the mutex next, should see the updated counter +(in signal) according to POSIX memory visibility rules and mutexes +(memory barriers). But i am not so sure how it actually works on +Win32/INTEL +which does not explicitly define any memory visibility rules :( + +>I like your optimization of this. You could improve Alg. 6 as follows: +>---------- Algorithm 6b ---------- +>signal(bAll) { +> _nSig=0 +> lock counters +> // this is safe because nWaiting can only be decremented by a thread +that +> // owns counters and nGone can only be changed by a thread that owns +>counters. +> if (nWaiting>nGone) { +> if (0==nSignaled) { +> sema_wait gate // close gate if not already closed +> } +> if (nGone>0) { +> nWaiting-=nGone +> nGone=0 +> } +> _nSig=bAll?nWaiting:1 +> nSignaled+=_nSig +> nWaiting-=_nSig +> } +> unlock counters +> if (0!=_nSig) { +> sema_post queue, _nSig +> } +>} +>---------- ---------- ---------- +>I guess this wouldn't apply to Alg 8a because nWaitersGone changes +meanings +>depending upon whether the gate is open or closed. + +agree. + +>In the loop "while ( nWaitersWasGone-- ) {" you do a sema_wait on +>semBlockLock. Perhaps waiting on semBlockQueue would be a better idea. + +you are correct. my mistake. + +>What have you gained by making the last thread to be signaled do the waits +>for all the timed out threads, besides added complexity? It took me a long +>time to figure out what your objective was with this, to realize you were +>using nWaitersGone to mean two different things, and to verify that you +>hadn't introduced any bug by doing this. Even now I'm not 100% sure. +> +>What has all this playing about with nWaitersGone really gained us besides +a +>lot of complexity (it is much harder to verify that this solution is +>correct), execution overhead (we now have a lot more if statements to +>evaluate), and space overhead (more space for the extra code, and another +>integer in our data)? We did manage to save a lock/unlock pair in an +>uncommon case (when a time out occurs) at the above mentioned expenses in +>the common cases. + +well, please consider the following: + +1) with multiple waiters unblocked (but some timed out) the trick with +counter +seem to ensure potentially higher level of concurrency by not delaying +most of unblocked waiters for semaphore cleanup - only the last one +will be delayed but all others would already contend/acquire/release +the external mutex - the critical section protected by mtxUnblockLock is +made smaller (increment + couple of IFs is faster than system/kernel call) +which i think is good in general. however, you are right, this is done +at expense of 'normal' waiters.. + +2) some semaphore APIs (e.g. POSIX IPC sems) do allow to adjust the +semaphore counter in one call => less system/kernel calls.. imagine: + +if ( 1 == nSignalsWasLeft ) { + if ( 0 != nWaitersWasGone ) { + ReleaseSemaphore( semBlockQueue,-nWaitersWasGone ); // better now +than spurious later + } + sem_post( semBlockLock ); // open the gate + } + +3) even on win32 a single thread doing multiple cleanup calls (to wait) +will probably result in faster execution (because of processor caching) +than multiple threads each doing a single call to wait. + +>As for 8b, c, and d, they look ok though I haven't studied them +thoroughly. +>What would you use them for? + +8b) for semaphores which do not allow to unblock multiple waiters +in a single call to post/release (e.g. POSIX realtime semaphores - +) + +8c/8d) for WinCE prior to 3.0 (WinCE 3.0 does have semaphores) + +ok. so, which one is the 'final' algorithm(s) which we should use in +pthreads-win32?? + +regards, +alexander. + +---------------------------------------------------------------------------- + +Louis Thomas on 02/27/2001 05:20:12 AM + +Please respond to Louis Thomas + +To: Alexander Terekhov/Germany/IBM@IBMDE +cc: rpj@ise.canberra.edu.au, Thomas Pfaff , Nanbor Wang + +Subject: RE: FYI/comp.programming.threads/Re: pthread_cond_* implementatio + n questions + +Sorry all. Busy week. + +> this insures the fairness +> which POSIX does not (e.g. two subsequent broadcasts - the gate does +insure +> that first wave waiters will start the race for the mutex before waiters +> from the second wave - Linux pthreads process/unblock both waves +> concurrently...) + +I'm not sure how we are any more fair about this than Linux. We certainly +don't guarantee that the threads released by the first broadcast will get +the external mutex before the threads of the second wave. In fact, it is +possible that those threads will never get the external mutex if there is +enough contention for it. + +> e.g. i was thinking about implementation with a pool of +> N semaphores/counters [...] + +I considered that too. The problem is as you mentioned in a). You really +need to assign threads to semaphores once you know how you want to wake +them +up, not when they first begin waiting which is the only time you can assign +them. + +> well, i am not quite sure that i've fully understood your scenario, + +Hmm. Well, it think it's an important example, so I'll try again. First, we +have thread A which we KNOW is waiting on a condition. As soon as it +becomes +unblocked for any reason, we will know because it will set a flag. Since +the +flag is not set, we are 100% confident that thread A is waiting on the +condition. We have another thread, thread B, which has acquired the mutex +and is about to wait on the condition. Thus it is pretty clear that at any +point, either just A is waiting, or A and B are waiting. Now thread C comes +along. C is about to do a broadcast on the condition. A broadcast is +guaranteed to unblock all threads currently waiting on a condition, right? +Again, we said that either just A is waiting, or A and B are both waiting. +So, when C does its broadcast, depending upon whether B has started waiting +or not, thread C will unblock A or unblock A and B. Either way, C must +unblock A, right? + +Now, you said anything that happens is correct so long as a) "a signal is +not lost between unlocking the mutex and waiting on the condition" and b) +"a +thread must not steal a signal it sent", correct? Requirement b) is easy to +satisfy: in this scenario, thread C will never wait on the condition, so it +won't steal any signals. Requirement a) is not hard either. The only way +we +could fail to meet requirement a) in this scenario is if thread B was +started waiting but didn't wake up because a signal was lost. This will not +happen. + +Now, here is what happens. Assume thread C beats thread B. Thread C looks +to +see how many threads are waiting on the condition. Thread C sees just one +thread, thread A, waiting. It does a broadcast waking up just one thread +because just one thread is waiting. Next, before A can become unblocked, +thread B begins waiting. Now there are two threads waiting, but only one +will be unblocked. Suppose B wins. B will become unblocked. A will not +become unblocked, because C only unblocked one thread (sema_post cond, 1). +So at the end, B finishes and A remains blocked. + +We have met both of your requirements, so by your rules, this is an +acceptable outcome. However, I think that the spec says this is an +unacceptable outcome! We know for certain that A was waiting and that C did +a broadcast, but A did not become unblocked! Yet, the spec says that a +broadcast wakes up all waiting threads. This did not happen. Do you agree +that this shows your rules are not strict enough? + +> and what about N2? :) this one does allow almost everything. + +Don't get me started about rule #2. I'll NEVER advocate an algorithm that +uses rule 2 as an excuse to suck! + +> but it is done (decrement)under mutex protection - this is not a subject +> of a race condition. + +You are correct. My mistake. + +> i would remove "_bTimedOut=false".. after all, it was a real timeout.. + +I disagree. A thread that can't successfully retract its waiter status +can't +really have timed out. If a thread can't return without executing extra +code +to deal with the fact that someone tried to unblock it, I think it is a +poor +idea to pretend we +didn't realize someone was trying to signal us. After all, a signal is more +important than a time out. + +> when nSignaled != 0, it is possible to update nWaiters (--) and do not +> touch nGone + +I realize this, but I was thinking that writing it the other ways saves +another if statement. + +> adjust only if nGone != 0 and save one cache memory write - probably much +slower than 'if' + +Hmm. You are probably right. + +> well, in a strange (e.g. timeout test) program you may (theoretically) +> have an overflow of nWaiters/nGone counters (with waiters repeatedly +timing +> out and no signals at all). + +Also true. Not only that, but you also have the possibility that one could +overflow the number of waiters as well! However, considering the limit you +have chosen for nWaitersGone, I suppose it is unlikely that anyone would be +able to get INT_MAX/2 threads waiting on a single condition. :) + +Analysis of 8a: + +It looks correct to me. + +What are IPC semaphores? + +In the line where you state, "else if ( nWaitersBlocked > nWaitersGone ) { +// HARMLESS RACE CONDITION!" there is no race condition for nWaitersGone +because nWaitersGone is never modified without holding mtxUnblockLock. You +are correct that there is a harmless race on nWaitersBlocked, which can +increase and make the condition become true just after we check it. If this +happens, we interpret it as the wait starting after the signal. + +I like your optimization of this. You could improve Alg. 6 as follows: +---------- Algorithm 6b ---------- +signal(bAll) { + _nSig=0 + lock counters + // this is safe because nWaiting can only be decremented by a thread that + // owns counters and nGone can only be changed by a thread that owns +counters. + if (nWaiting>nGone) { + if (0==nSignaled) { + sema_wait gate // close gate if not already closed + } + if (nGone>0) { + nWaiting-=nGone + nGone=0 + } + _nSig=bAll?nWaiting:1 + nSignaled+=_nSig + nWaiting-=_nSig + } + unlock counters + if (0!=_nSig) { + sema_post queue, _nSig + } +} +---------- ---------- ---------- +I guess this wouldn't apply to Alg 8a because nWaitersGone changes meanings +depending upon whether the gate is open or closed. + +In the loop "while ( nWaitersWasGone-- ) {" you do a sema_wait on +semBlockLock. Perhaps waiting on semBlockQueue would be a better idea. + +What have you gained by making the last thread to be signaled do the waits +for all the timed out threads, besides added complexity? It took me a long +time to figure out what your objective was with this, to realize you were +using nWaitersGone to mean two different things, and to verify that you +hadn't introduced any bug by doing this. Even now I'm not 100% sure. + +What has all this playing about with nWaitersGone really gained us besides +a +lot of complexity (it is much harder to verify that this solution is +correct), execution overhead (we now have a lot more if statements to +evaluate), and space overhead (more space for the extra code, and another +integer in our data)? We did manage to save a lock/unlock pair in an +uncommon case (when a time out occurs) at the above mentioned expenses in +the common cases. + +As for 8b, c, and d, they look ok though I haven't studied them thoroughly. +What would you use them for? + + Later, + -Louis! :) + diff --git a/src/WinLibs/pthreads/README.NONPORTABLE b/src/WinLibs/pthreads/README.NONPORTABLE new file mode 100644 index 000000000..ae7686277 --- /dev/null +++ b/src/WinLibs/pthreads/README.NONPORTABLE @@ -0,0 +1,285 @@ +This file documents non-portable functions and other issues. + +Non-portable functions included in pthreads-win32 +------------------------------------------------- + +BOOL +pthread_win32_test_features_np(int mask) + + This routine allows an application to check which + run-time auto-detected features are available within + the library. + + The possible features are: + + PTW32_SYSTEM_INTERLOCKED_COMPARE_EXCHANGE + Return TRUE if the native version of + InterlockedCompareExchange() is being used. + PTW32_ALERTABLE_ASYNC_CANCEL + Return TRUE is the QueueUserAPCEx package + QUSEREX.DLL is available and the AlertDrv.sys + driver is loaded into Windows, providing + alertable (pre-emptive) asyncronous threads + cancelation. If this feature returns FALSE + then the default async cancel scheme is in + use, which cannot cancel blocked threads. + + Features may be Or'ed into the mask parameter, in which case + the routine returns TRUE if any of the Or'ed features would + return TRUE. At this stage it doesn't make sense to Or features + but it may some day. + + +void * +pthread_timechange_handler_np(void *) + + To improve tolerance against operator or time service + initiated system clock changes. + + This routine can be called by an application when it + receives a WM_TIMECHANGE message from the system. At + present it broadcasts all condition variables so that + waiting threads can wake up and re-evaluate their + conditions and restart their timed waits if required. + + It has the same return type and argument type as a + thread routine so that it may be called directly + through pthread_create(), i.e. as a separate thread. + + Parameters + + Although a parameter must be supplied, it is ignored. + The value NULL can be used. + + Return values + + It can return an error EAGAIN to indicate that not + all condition variables were broadcast for some reason. + Otherwise, 0 is returned. + + If run as a thread, the return value is returned + through pthread_join(). + + The return value should be cast to an integer. + + +HANDLE +pthread_getw32threadhandle_np(pthread_t thread); + + Returns the win32 thread handle that the POSIX + thread "thread" is running as. + + Applications can use the win32 handle to set + win32 specific attributes of the thread. + + +int +pthread_mutexattr_setkind_np(pthread_mutexattr_t * attr, int kind) + +int +pthread_mutexattr_getkind_np(pthread_mutexattr_t * attr, int *kind) + + These two routines are included for Linux compatibility + and are direct equivalents to the standard routines + pthread_mutexattr_settype + pthread_mutexattr_gettype + + pthread_mutexattr_setkind_np accepts the following + mutex kinds: + PTHREAD_MUTEX_FAST_NP + PTHREAD_MUTEX_ERRORCHECK_NP + PTHREAD_MUTEX_RECURSIVE_NP + + These are really just equivalent to (respectively): + PTHREAD_MUTEX_NORMAL + PTHREAD_MUTEX_ERRORCHECK + PTHREAD_MUTEX_RECURSIVE + +int +pthread_delay_np (const struct timespec *interval); + + This routine causes a thread to delay execution for a specific period of time. + This period ends at the current time plus the specified interval. The routine + will not return before the end of the period is reached, but may return an + arbitrary amount of time after the period has gone by. This can be due to + system load, thread priorities, and system timer granularity. + + Specifying an interval of zero (0) seconds and zero (0) nanoseconds is + allowed and can be used to force the thread to give up the processor or to + deliver a pending cancelation request. + + This routine is a cancelation point. + + The timespec structure contains the following two fields: + + tv_sec is an integer number of seconds. + tv_nsec is an integer number of nanoseconds. + + Return Values + + If an error condition occurs, this routine returns an integer value + indicating the type of error. Possible return values are as follows: + + 0 Successful completion. + [EINVAL] The value specified by interval is invalid. + +int +pthread_num_processors_np + + This routine (found on HPUX systems) returns the number of processors + in the system. This implementation actually returns the number of + processors available to the process, which can be a lower number + than the system's number, depending on the process's affinity mask. + +BOOL +pthread_win32_process_attach_np (void); + +BOOL +pthread_win32_process_detach_np (void); + +BOOL +pthread_win32_thread_attach_np (void); + +BOOL +pthread_win32_thread_detach_np (void); + + These functions contain the code normally run via dllMain + when the library is used as a dll but which need to be + called explicitly by an application when the library + is statically linked. + + You will need to call pthread_win32_process_attach_np() before + you can call any pthread routines when statically linking. + You should call pthread_win32_process_detach_np() before + exiting your application to clean up. + + pthread_win32_thread_attach_np() is currently a no-op, but + pthread_win32_thread_detach_np() is needed to clean up + the implicit pthread handle that is allocated to a Win32 thread if + it calls certain pthreads routines. Call this routine when the + Win32 thread exits. + + These functions invariably return TRUE except for + pthread_win32_process_attach_np() which will return FALSE + if pthreads-win32 initialisation fails. + +int +pthreadCancelableWait (HANDLE waitHandle); + +int +pthreadCancelableTimedWait (HANDLE waitHandle, DWORD timeout); + + These two functions provide hooks into the pthread_cancel + mechanism that will allow you to wait on a Windows handle + and make it a cancellation point. Both functions block + until either the given w32 handle is signaled, or + pthread_cancel has been called. It is implemented using + WaitForMultipleObjects on 'waitHandle' and a manually + reset w32 event used to implement pthread_cancel. + + +Non-portable issues +------------------- + +Thread priority + + POSIX defines a single contiguous range of numbers that determine a + thread's priority. Win32 defines priority classes and priority + levels relative to these classes. Classes are simply priority base + levels that the defined priority levels are relative to such that, + changing a process's priority class will change the priority of all + of it's threads, while the threads retain the same relativity to each + other. + + A Win32 system defines a single contiguous monotonic range of values + that define system priority levels, just like POSIX. However, Win32 + restricts individual threads to a subset of this range on a + per-process basis. + + The following table shows the base priority levels for combinations + of priority class and priority value in Win32. + + Process Priority Class Thread Priority Level + ----------------------------------------------------------------- + 1 IDLE_PRIORITY_CLASS THREAD_PRIORITY_IDLE + 1 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE + 1 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE + 1 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE + 1 HIGH_PRIORITY_CLASS THREAD_PRIORITY_IDLE + 2 IDLE_PRIORITY_CLASS THREAD_PRIORITY_LOWEST + 3 IDLE_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL + 4 IDLE_PRIORITY_CLASS THREAD_PRIORITY_NORMAL + 4 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_LOWEST + 5 IDLE_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL + 5 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL + 5 Background NORMAL_PRIORITY_CLASS THREAD_PRIORITY_LOWEST + 6 IDLE_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST + 6 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_NORMAL + 6 Background NORMAL_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL + 7 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL + 7 Background NORMAL_PRIORITY_CLASS THREAD_PRIORITY_NORMAL + 7 Foreground NORMAL_PRIORITY_CLASS THREAD_PRIORITY_LOWEST + 8 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST + 8 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL + 8 Foreground NORMAL_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL + 8 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_LOWEST + 9 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST + 9 Foreground NORMAL_PRIORITY_CLASS THREAD_PRIORITY_NORMAL + 9 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL + 10 Foreground NORMAL_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL + 10 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_NORMAL + 11 Foreground NORMAL_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST + 11 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL + 11 HIGH_PRIORITY_CLASS THREAD_PRIORITY_LOWEST + 12 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST + 12 HIGH_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL + 13 HIGH_PRIORITY_CLASS THREAD_PRIORITY_NORMAL + 14 HIGH_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL + 15 HIGH_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST + 15 HIGH_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL + 15 IDLE_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL + 15 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL + 15 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL + 15 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL + 16 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_IDLE + 17 REALTIME_PRIORITY_CLASS -7 + 18 REALTIME_PRIORITY_CLASS -6 + 19 REALTIME_PRIORITY_CLASS -5 + 20 REALTIME_PRIORITY_CLASS -4 + 21 REALTIME_PRIORITY_CLASS -3 + 22 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_LOWEST + 23 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL + 24 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_NORMAL + 25 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL + 26 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST + 27 REALTIME_PRIORITY_CLASS 3 + 28 REALTIME_PRIORITY_CLASS 4 + 29 REALTIME_PRIORITY_CLASS 5 + 30 REALTIME_PRIORITY_CLASS 6 + 31 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL + + Windows NT: Values -7, -6, -5, -4, -3, 3, 4, 5, and 6 are not supported. + + + As you can see, the real priority levels available to any individual + Win32 thread are non-contiguous. + + An application using pthreads-win32 should not make assumptions about + the numbers used to represent thread priority levels, except that they + are monotonic between the values returned by sched_get_priority_min() + and sched_get_priority_max(). E.g. Windows 95, 98, NT, 2000, XP make + available a non-contiguous range of numbers between -15 and 15, while + at least one version of WinCE (3.0) defines the minimum priority + (THREAD_PRIORITY_LOWEST) as 5, and the maximum priority + (THREAD_PRIORITY_HIGHEST) as 1. + + Internally, pthreads-win32 maps any priority levels between + THREAD_PRIORITY_IDLE and THREAD_PRIORITY_LOWEST to THREAD_PRIORITY_LOWEST, + or between THREAD_PRIORITY_TIME_CRITICAL and THREAD_PRIORITY_HIGHEST to + THREAD_PRIORITY_HIGHEST. Currently, this also applies to + REALTIME_PRIORITY_CLASSi even if levels -7, -6, -5, -4, -3, 3, 4, 5, and 6 + are supported. + + If it wishes, a Win32 application using pthreads-win32 can use the Win32 + defined priority macros THREAD_PRIORITY_IDLE through + THREAD_PRIORITY_TIME_CRITICAL. diff --git a/src/WinLibs/pthreads/README.Watcom b/src/WinLibs/pthreads/README.Watcom new file mode 100644 index 000000000..24955165f --- /dev/null +++ b/src/WinLibs/pthreads/README.Watcom @@ -0,0 +1,62 @@ +Watcom compiler notes +===================== + +Status +------ +Not yet usable. Although the library builds under Watcom it +substantially fails the test suite. + +There is a working Wmakefile for wmake for the library build. + +invoke as any of: +wmake -f Wmakefile clean WC +wmake -f Wmakefile clean WC-inlined +wmake -f Wmakefile clean WCE +wmake -f Wmakefile clean WCE-inlined + +These build pthreadWC.dll and pthreadWCE.dll. + +There is a working Wmakefile for wmake for the test suite. + +invoke as any of: +wmake -f Wmakefile clean WC +wmake -f Wmakefile clean WCX +wmake -f Wmakefile clean WCE +wmake -f Wmakefile clean WC-bench +wmake -f Wmakefile clean WCX-bench +wmake -f Wmakefile clean WCE-bench + + +Current known problems +---------------------- + +Library build: +The Watcom compiler uses a different default call convention to MS C or GNU C and so +applications are not compatible with pthreadVC.dll etc using pre 2003-10-14 versions +of pthread.h, sched.h, or semaphore.h. The cdecl attribute can be used on exposed +function prototypes to force compatibility with MS C built DLLs. + +However, there appear to be other incompatibilities. Errno.h, for example, defines +different values for the standard C and POSIX errors to those defined by the MS C +errno.h. It may be that references to Watcom's threads compatible 'errno' do set +and return translated numbers consistently, but I have not verified this. + +Watcom defines errno as a dereferenced pointer returned by the function +_get_errno_ptr(). This is similar to both the MS and GNU C environments for +multithreaded use. However, the Watcom version appears to have a number of problems: + +- different threads return the same pointer value. Compare with the MS and GNU C +versions which correctly return different values (since each thread must maintain +a thread specific errno value). + +- an errno value set within the DLL appears as zero in the application even though +both share the same thread. + +Therefore applications built using the Watcom compiler may need to use +a Watcom built version of the library (pthreadWC.dll). If this is the case, then +the cdecl function attribute should not be required. + +Application builds: +The test suite fails with the Watcom compiler. + +Test semaphore1.c fails for pthreadWC.dll because errno returns 0 instead of EAGAIN. diff --git a/src/WinLibs/pthreads/README.WinCE b/src/WinLibs/pthreads/README.WinCE new file mode 100644 index 000000000..1e0642971 --- /dev/null +++ b/src/WinLibs/pthreads/README.WinCE @@ -0,0 +1,6 @@ +WinCE port +---------- +(See the file WinCE-PORT for a detailed explanation.) + +Make sure you define "WINCE" amongst your compiler flags (eg. -DWINCE). +The config.h file will define all the necessary defines for you. diff --git a/src/WinLibs/pthreads/TODO b/src/WinLibs/pthreads/TODO new file mode 100644 index 000000000..f798e769e --- /dev/null +++ b/src/WinLibs/pthreads/TODO @@ -0,0 +1,7 @@ + Things that aren't done yet + --------------------------- + +1. Implement PTHREAD_PROCESS_SHARED for semaphores, mutexes, + condition variables, read/write locks, barriers. + + diff --git a/src/WinLibs/pthreads/WinCE-PORT b/src/WinLibs/pthreads/WinCE-PORT new file mode 100644 index 000000000..486d97291 --- /dev/null +++ b/src/WinLibs/pthreads/WinCE-PORT @@ -0,0 +1,217 @@ +NOTE: The comments in this file relate to the original WinCE port +done by Tristan Savatier. The semaphore routines have been +completely rewritten since (2005-04-25), having been progressively +broken more and more by changes to the library. All of the semaphore +routines implemented for W9x/WNT/2000 and up should now also work for +WinCE. Also, pthread_mutex_timedlock should now work. [RPJ] + +---- + +Some interesting news: + +I have been able to port pthread-win32 to Windows-CE, +which uses a subset of the WIN32 API. + +Since we intend to keep using pthread-win32 for our +Commercial WinCE developments, I would be very interested +if WinCE support could be added to the main source tree +of pthread-win32. Also, I would like to be credited +for this port :-) + +Now, here is the story... + +The port was performed and tested on a Casio "Cassiopeia" +PalmSize PC, which runs a MIP processor. The OS in the +Casio is WinCE version 2.11, but I used VC++ 6.0 with +the WinCE SDK for version 2.01. + +I used pthread-win32 to port a heavily multithreaded +commercial application (real-time MPEG video player) +from Linux to WinCE. I consider the changes that +I have done to be quite well tested. + +Overall the modifications that we had to do are minor. + +The WinCE port were based on pthread-win32-snap-1999-05-30, +but I am certain that they can be integrated very easiely +to more recent versions of the source. + +I have attached the modified source code: +pthread-win32-snap-1999-05-30-WinCE. + +All the changes do not affect the code compiled on non-WinCE +environment, provided that the macros used for WinCE compilation +are not used, of course! + +Overall description of the WinCE port: +------------------------------------- + +Most of the changes had to be made in areas where +pthread-win32 was relying on some standard-C librairies +(e.g. _ftime, calloc, errno), which are not available +on WinCE. We have changed the code to use native Win32 +API instead (or in some cases we made wrappers). + +The Win32 Semaphores are not available, +so we had to re-implement Semaphores using mutexes +and events. + +Limitations / known problems of the WinCE port: +---------------------------------------------- + +Not all the semaphore routines have been ported +(semaphores are defined by Posix but are not part +pf pthread). I have just done enough to make +pthread routines (that rely internally on semaphores) +work, like signal conditions. + +I noticed that the Win32 threads work slightly +differently on WinCE. This may have some impact +on some tricky parts of pthread-win32, but I have +not really investigated. For example, on WinCE, +the process is killed if the main thread falls off +the bottom (or calls pthread_exit), regardless +of the existence of any other detached thread. +Microsoft manual indicates that this behavior is +deffirent from that of Windows Threads for other +Win32 platforms. + + +Detailed descriptions of the changes and rationals: + +------------------------------------ +- use a new macro NEED_ERRNO. + +If defined, the code in errno.c that defines a reentrant errno +is compiled, regardless of _MT and _REENTRANT. + +Rational: On WinCE, there is no support for , or +any other standard C library, i.e. even if _MT or _REENTRANT +is defined, errno is not provided by any library. NEED_ERRNO +must be set to compile for WinCE. + +------------------------------------ +- In implement.h, change #include to #include "semaphore.h". + +Rational: semaphore.h is provided in pthread-win32 and should not +be searched in the systems standard include. would not compile. +This change does not seem to create problems on "classic" win32 +(e.g. win95). + +------------------------------------ +- use a new macro NEED_CALLOC. + +If defined, some code in misc.c will provide a replacement +for calloc, which is not available on Win32. + + +------------------------------------ +- use a new macro NEED_CREATETHREAD. + +If defined, implement.h defines the macro _beginthreadex +and _endthreadex. + +Rational: On WinCE, the wrappers _beginthreadex and _endthreadex +do not exist. The native Win32 routines must be used. + +------------------------------------ +- in misc.c: + +#ifdef NEED_DUPLICATEHANDLE + /* DuplicateHandle does not exist on WinCE */ + self->threadH = GetCurrentThread(); +#else + if( !DuplicateHandle( + GetCurrentProcess(), + GetCurrentThread(), + GetCurrentProcess(), + &self->threadH, + 0, + FALSE, + DUPLICATE_SAME_ACCESS ) ) + { + free( self ); + return (NULL); + } +#endif + +Rational: On WinCE, DuplicateHandle does not exist. I could not understand +why DuplicateHandle must be used. It seems to me that getting the current +thread handle with GetCurrentThread() is sufficient, and it seems to work +perfectly fine, so maybe DuplicateHandle was just plain useless to begin with ? + +------------------------------------ +- In private.c, added some code at the beginning of ptw32_processInitialize +to detect the case of multiple calls to ptw32_processInitialize. + +Rational: In order to debug pthread-win32, it is easier to compile +it as a regular library (it is not possible to debug DLL's on winCE). +In that case, the application must call ptw32_rocessInitialize() +explicitely, to initialize pthread-win32. It is safer in this circumstance +to handle the case where ptw32_processInitialize() is called on +an already initialized library: + +int +ptw32_processInitialize (void) +{ + if (ptw32_processInitialized) { + /* + * ignore if already initialized. this is useful for + * programs that uses a non-dll pthread + * library. such programs must call ptw32_processInitialize() explicitely, + * since this initialization routine is automatically called only when + * the dll is loaded. + */ + return TRUE; + } + ptw32_processInitialized = TRUE; + [...] +} + +------------------------------------ +- in private.c, if macro NEED_FTIME is defined, add routines to +convert timespec_to_filetime and filetime_to_timespec, and modified +code that was using _ftime() to use Win32 API instead. + +Rational: _ftime is not available on WinCE. It is necessary to use +the native Win32 time API instead. + +Note: the routine timespec_to_filetime is provided as a convenience and a mean +to test that filetime_to_timespec works, but it is not used by the library. + +------------------------------------ +- in semaphore.c, if macro NEED_SEM is defined, add code for the routines +_increase_semaphore and _decrease_semaphore, and modify significantly +the implementation of the semaphores so that it does not use CreateSemaphore. + +Rational: CreateSemaphore is not available on WinCE. I had to re-implement +semaphores using mutexes and Events. + +Note: Only the semaphore routines that are used by pthread are implemented +(i.e. signal conditions rely on a subset of the semaphores routines, and +this subset works). Some other semaphore routines (e.g. sem_trywait) are +not yet supported on my WinCE port (and since I don't need them, I am not +planning to do anything about them). + +------------------------------------ +- in tsd.c, changed the code that defines TLS_OUT_OF_INDEXES + +/* TLS_OUT_OF_INDEXES not defined on WinCE */ +#ifndef TLS_OUT_OF_INDEXES +#define TLS_OUT_OF_INDEXES 0xffffffff +#endif + +Rational: TLS_OUT_OF_INDEXES is not defined in any standard include file +on WinCE. + +------------------------------------ +- added file need_errno.h + +Rational: On WinCE, there is no errno.h file. need_errno.h is just a +copy of windows version of errno.h, with minor modifications due to the fact +that some of the error codes are defined by the WinCE socket library. +In pthread.h, if NEED_ERRNO is defined, the file need_errno.h is +included (instead of ). + + +-- eof diff --git a/src/WinLibs/pthreads/include/md5.sum b/src/WinLibs/pthreads/include/md5.sum new file mode 100644 index 000000000..c18be9fd3 --- /dev/null +++ b/src/WinLibs/pthreads/include/md5.sum @@ -0,0 +1,3 @@ +073c29857b7ac652eb8ffe7468fd6d21 pthread.h +cb87e52a97ab095a92f7e30f5af21985 sched.h +3a6e2bd34633c620928c031f20d373d9 semaphore.h diff --git a/src/WinLibs/pthreads/include/pthread.h b/src/WinLibs/pthreads/include/pthread.h new file mode 100644 index 000000000..9f2868bcc --- /dev/null +++ b/src/WinLibs/pthreads/include/pthread.h @@ -0,0 +1,1368 @@ +/* This is an implementation of the threads API of POSIX 1003.1-2001. + * + * -------------------------------------------------------------------------- + * + * Pthreads-win32 - POSIX Threads Library for Win32 + * Copyright(C) 1998 John E. Bossom + * Copyright(C) 1999,2005 Pthreads-win32 contributors + * + * Contact Email: rpj@callisto.canberra.edu.au + * + * The current list of contributors is contained + * in the file CONTRIBUTORS included with the source + * code distribution. The list can also be seen at the + * following World Wide Web location: + * http://sources.redhat.com/pthreads-win32/contributors.html + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#if !defined( PTHREAD_H ) +#define PTHREAD_H + +/* + * See the README file for an explanation of the pthreads-win32 version + * numbering scheme and how the DLL is named etc. + */ +#define PTW32_VERSION 2,8,0,0 +#define PTW32_VERSION_STRING "2, 8, 0, 0\0" + +/* There are three implementations of cancel cleanup. + * Note that pthread.h is included in both application + * compilation units and also internally for the library. + * The code here and within the library aims to work + * for all reasonable combinations of environments. + * + * The three implementations are: + * + * WIN32 SEH + * C + * C++ + * + * Please note that exiting a push/pop block via + * "return", "exit", "break", or "continue" will + * lead to different behaviour amongst applications + * depending upon whether the library was built + * using SEH, C++, or C. For example, a library built + * with SEH will call the cleanup routine, while both + * C++ and C built versions will not. + */ + +/* + * Define defaults for cleanup code. + * Note: Unless the build explicitly defines one of the following, then + * we default to standard C style cleanup. This style uses setjmp/longjmp + * in the cancelation and thread exit implementations and therefore won't + * do stack unwinding if linked to applications that have it (e.g. + * C++ apps). This is currently consistent with most/all commercial Unix + * POSIX threads implementations. + */ +#if !defined( __CLEANUP_SEH ) && !defined( __CLEANUP_CXX ) && !defined( __CLEANUP_C ) +# define __CLEANUP_C +#endif + +#if defined( __CLEANUP_SEH ) && ( !defined( _MSC_VER ) && !defined(PTW32_RC_MSC)) +#error ERROR [__FILE__, line __LINE__]: SEH is not supported for this compiler. +#endif + +/* + * Stop here if we are being included by the resource compiler. + */ +#ifndef RC_INVOKED + +#undef PTW32_LEVEL + +#if defined(_POSIX_SOURCE) +#define PTW32_LEVEL 0 +/* Early POSIX */ +#endif + +#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309 +#undef PTW32_LEVEL +#define PTW32_LEVEL 1 +/* Include 1b, 1c and 1d */ +#endif + +#if defined(INCLUDE_NP) +#undef PTW32_LEVEL +#define PTW32_LEVEL 2 +/* Include Non-Portable extensions */ +#endif + +#define PTW32_LEVEL_MAX 3 + +#if !defined(PTW32_LEVEL) +#define PTW32_LEVEL PTW32_LEVEL_MAX +/* Include everything */ +#endif + +#ifdef _UWIN +# define HAVE_STRUCT_TIMESPEC 1 +# define HAVE_SIGNAL_H 1 +# undef HAVE_CONFIG_H +# pragma comment(lib, "pthread") +#endif + +/* + * ------------------------------------------------------------- + * + * + * Module: pthread.h + * + * Purpose: + * Provides an implementation of PThreads based upon the + * standard: + * + * POSIX 1003.1-2001 + * and + * The Single Unix Specification version 3 + * + * (these two are equivalent) + * + * in order to enhance code portability between Windows, + * various commercial Unix implementations, and Linux. + * + * See the ANNOUNCE file for a full list of conforming + * routines and defined constants, and a list of missing + * routines and constants not defined in this implementation. + * + * Authors: + * There have been many contributors to this library. + * The initial implementation was contributed by + * John Bossom, and several others have provided major + * sections or revisions of parts of the implementation. + * Often significant effort has been contributed to + * find and fix important bugs and other problems to + * improve the reliability of the library, which sometimes + * is not reflected in the amount of code which changed as + * result. + * As much as possible, the contributors are acknowledged + * in the ChangeLog file in the source code distribution + * where their changes are noted in detail. + * + * Contributors are listed in the CONTRIBUTORS file. + * + * As usual, all bouquets go to the contributors, and all + * brickbats go to the project maintainer. + * + * Maintainer: + * The code base for this project is coordinated and + * eventually pre-tested, packaged, and made available by + * + * Ross Johnson + * + * QA Testers: + * Ultimately, the library is tested in the real world by + * a host of competent and demanding scientists and + * engineers who report bugs and/or provide solutions + * which are then fixed or incorporated into subsequent + * versions of the library. Each time a bug is fixed, a + * test case is written to prove the fix and ensure + * that later changes to the code don't reintroduce the + * same error. The number of test cases is slowly growing + * and therefore so is the code reliability. + * + * Compliance: + * See the file ANNOUNCE for the list of implemented + * and not-implemented routines and defined options. + * Of course, these are all defined is this file as well. + * + * Web site: + * The source code and other information about this library + * are available from + * + * http://sources.redhat.com/pthreads-win32/ + * + * ------------------------------------------------------------- + */ + +/* Try to avoid including windows.h */ +#if defined(__MINGW32__) && defined(__cplusplus) +#define PTW32_INCLUDE_WINDOWS_H +#endif + +#ifdef PTW32_INCLUDE_WINDOWS_H +#include +#endif + +#if defined(_MSC_VER) && _MSC_VER < 1300 || defined(__DMC__) +/* + * VC++6.0 or early compiler's header has no DWORD_PTR type. + */ +typedef unsigned long DWORD_PTR; +#endif +/* + * ----------------- + * autoconf switches + * ----------------- + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif /* HAVE_CONFIG_H */ + +#ifndef NEED_FTIME +#include +#else /* NEED_FTIME */ +/* use native WIN32 time API */ +#endif /* NEED_FTIME */ + +#if HAVE_SIGNAL_H +#include +#endif /* HAVE_SIGNAL_H */ + +#include +#include + +/* + * Boolean values to make us independent of system includes. + */ +enum { + PTW32_FALSE = 0, + PTW32_TRUE = (! PTW32_FALSE) +}; + +/* + * This is a duplicate of what is in the autoconf config.h, + * which is only used when building the pthread-win32 libraries. + */ + +#ifndef PTW32_CONFIG_H +# if defined(WINCE) +# define NEED_ERRNO +# define NEED_SEM +# endif +# if defined(_UWIN) || defined(__MINGW32__) +# define HAVE_MODE_T +# endif +#endif + +/* + * + */ + +#if PTW32_LEVEL >= PTW32_LEVEL_MAX +#ifdef NEED_ERRNO +#include "need_errno.h" +#else +#include +#endif +#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ + +/* + * Several systems don't define some error numbers. + */ +#ifndef ENOTSUP +# define ENOTSUP 48 /* This is the value in Solaris. */ +#endif + +#ifndef ETIMEDOUT +# define ETIMEDOUT 10060 /* This is the value in winsock.h. */ +#endif + +#ifndef ENOSYS +# define ENOSYS 140 /* Semi-arbitrary value */ +#endif + +#ifndef EDEADLK +# ifdef EDEADLOCK +# define EDEADLK EDEADLOCK +# else +# define EDEADLK 36 /* This is the value in MSVC. */ +# endif +#endif + +#include + +/* + * To avoid including windows.h we define only those things that we + * actually need from it. + */ +#ifndef PTW32_INCLUDE_WINDOWS_H +#ifndef HANDLE +# define PTW32__HANDLE_DEF +# define HANDLE void * +#endif +#ifndef DWORD +# define PTW32__DWORD_DEF +# define DWORD unsigned long +#endif +#endif + +#ifndef HAVE_STRUCT_TIMESPEC +#define HAVE_STRUCT_TIMESPEC 1 +struct timespec { + long tv_sec; + long tv_nsec; +}; +#endif /* HAVE_STRUCT_TIMESPEC */ + +#ifndef SIG_BLOCK +#define SIG_BLOCK 0 +#endif /* SIG_BLOCK */ + +#ifndef SIG_UNBLOCK +#define SIG_UNBLOCK 1 +#endif /* SIG_UNBLOCK */ + +#ifndef SIG_SETMASK +#define SIG_SETMASK 2 +#endif /* SIG_SETMASK */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * ------------------------------------------------------------- + * + * POSIX 1003.1-2001 Options + * ========================= + * + * Options are normally set in , which is not provided + * with pthreads-win32. + * + * For conformance with the Single Unix Specification (version 3), all of the + * options below are defined, and have a value of either -1 (not supported) + * or 200112L (supported). + * + * These options can neither be left undefined nor have a value of 0, because + * either indicates that sysconf(), which is not implemented, may be used at + * runtime to check the status of the option. + * + * _POSIX_THREADS (== 200112L) + * If == 200112L, you can use threads + * + * _POSIX_THREAD_ATTR_STACKSIZE (== 200112L) + * If == 200112L, you can control the size of a thread's + * stack + * pthread_attr_getstacksize + * pthread_attr_setstacksize + * + * _POSIX_THREAD_ATTR_STACKADDR (== -1) + * If == 200112L, you can allocate and control a thread's + * stack. If not supported, the following functions + * will return ENOSYS, indicating they are not + * supported: + * pthread_attr_getstackaddr + * pthread_attr_setstackaddr + * + * _POSIX_THREAD_PRIORITY_SCHEDULING (== -1) + * If == 200112L, you can use realtime scheduling. + * This option indicates that the behaviour of some + * implemented functions conforms to the additional TPS + * requirements in the standard. E.g. rwlocks favour + * writers over readers when threads have equal priority. + * + * _POSIX_THREAD_PRIO_INHERIT (== -1) + * If == 200112L, you can create priority inheritance + * mutexes. + * pthread_mutexattr_getprotocol + + * pthread_mutexattr_setprotocol + + * + * _POSIX_THREAD_PRIO_PROTECT (== -1) + * If == 200112L, you can create priority ceiling mutexes + * Indicates the availability of: + * pthread_mutex_getprioceiling + * pthread_mutex_setprioceiling + * pthread_mutexattr_getprioceiling + * pthread_mutexattr_getprotocol + + * pthread_mutexattr_setprioceiling + * pthread_mutexattr_setprotocol + + * + * _POSIX_THREAD_PROCESS_SHARED (== -1) + * If set, you can create mutexes and condition + * variables that can be shared with another + * process.If set, indicates the availability + * of: + * pthread_mutexattr_getpshared + * pthread_mutexattr_setpshared + * pthread_condattr_getpshared + * pthread_condattr_setpshared + * + * _POSIX_THREAD_SAFE_FUNCTIONS (== 200112L) + * If == 200112L you can use the special *_r library + * functions that provide thread-safe behaviour + * + * _POSIX_READER_WRITER_LOCKS (== 200112L) + * If == 200112L, you can use read/write locks + * + * _POSIX_SPIN_LOCKS (== 200112L) + * If == 200112L, you can use spin locks + * + * _POSIX_BARRIERS (== 200112L) + * If == 200112L, you can use barriers + * + * + These functions provide both 'inherit' and/or + * 'protect' protocol, based upon these macro + * settings. + * + * ------------------------------------------------------------- + */ + +/* + * POSIX Options + */ +#undef _POSIX_THREADS +#define _POSIX_THREADS 200112L + +#undef _POSIX_READER_WRITER_LOCKS +#define _POSIX_READER_WRITER_LOCKS 200112L + +#undef _POSIX_SPIN_LOCKS +#define _POSIX_SPIN_LOCKS 200112L + +#undef _POSIX_BARRIERS +#define _POSIX_BARRIERS 200112L + +#undef _POSIX_THREAD_SAFE_FUNCTIONS +#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L + +#undef _POSIX_THREAD_ATTR_STACKSIZE +#define _POSIX_THREAD_ATTR_STACKSIZE 200112L + +/* + * The following options are not supported + */ +#undef _POSIX_THREAD_ATTR_STACKADDR +#define _POSIX_THREAD_ATTR_STACKADDR -1 + +#undef _POSIX_THREAD_PRIO_INHERIT +#define _POSIX_THREAD_PRIO_INHERIT -1 + +#undef _POSIX_THREAD_PRIO_PROTECT +#define _POSIX_THREAD_PRIO_PROTECT -1 + +/* TPS is not fully supported. */ +#undef _POSIX_THREAD_PRIORITY_SCHEDULING +#define _POSIX_THREAD_PRIORITY_SCHEDULING -1 + +#undef _POSIX_THREAD_PROCESS_SHARED +#define _POSIX_THREAD_PROCESS_SHARED -1 + + +/* + * POSIX 1003.1-2001 Limits + * =========================== + * + * These limits are normally set in , which is not provided with + * pthreads-win32. + * + * PTHREAD_DESTRUCTOR_ITERATIONS + * Maximum number of attempts to destroy + * a thread's thread-specific data on + * termination (must be at least 4) + * + * PTHREAD_KEYS_MAX + * Maximum number of thread-specific data keys + * available per process (must be at least 128) + * + * PTHREAD_STACK_MIN + * Minimum supported stack size for a thread + * + * PTHREAD_THREADS_MAX + * Maximum number of threads supported per + * process (must be at least 64). + * + * SEM_NSEMS_MAX + * The maximum number of semaphores a process can have. + * (must be at least 256) + * + * SEM_VALUE_MAX + * The maximum value a semaphore can have. + * (must be at least 32767) + * + */ +#undef _POSIX_THREAD_DESTRUCTOR_ITERATIONS +#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 + +#undef PTHREAD_DESTRUCTOR_ITERATIONS +#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS + +#undef _POSIX_THREAD_KEYS_MAX +#define _POSIX_THREAD_KEYS_MAX 128 + +#undef PTHREAD_KEYS_MAX +#define PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX + +#undef PTHREAD_STACK_MIN +#define PTHREAD_STACK_MIN 0 + +#undef _POSIX_THREAD_THREADS_MAX +#define _POSIX_THREAD_THREADS_MAX 64 + + /* Arbitrary value */ +#undef PTHREAD_THREADS_MAX +#define PTHREAD_THREADS_MAX 2019 + +#undef _POSIX_SEM_NSEMS_MAX +#define _POSIX_SEM_NSEMS_MAX 256 + + /* Arbitrary value */ +#undef SEM_NSEMS_MAX +#define SEM_NSEMS_MAX 1024 + +#undef _POSIX_SEM_VALUE_MAX +#define _POSIX_SEM_VALUE_MAX 32767 + +#undef SEM_VALUE_MAX +#define SEM_VALUE_MAX INT_MAX + + +#if __GNUC__ && ! defined (__declspec) +# error Please upgrade your GNU compiler to one that supports __declspec. +#endif + +/* + * When building the DLL code, you should define PTW32_BUILD so that + * the variables/functions are exported correctly. When using the DLL, + * do NOT define PTW32_BUILD, and then the variables/functions will + * be imported correctly. + */ +#ifndef PTW32_STATIC_LIB +# ifdef PTW32_BUILD +# define PTW32_DLLPORT __declspec (dllexport) +# else +# define PTW32_DLLPORT __declspec (dllimport) +# endif +#else +# define PTW32_DLLPORT +#endif + +/* + * The Open Watcom C/C++ compiler uses a non-standard calling convention + * that passes function args in registers unless __cdecl is explicitly specified + * in exposed function prototypes. + * + * We force all calls to cdecl even though this could slow Watcom code down + * slightly. If you know that the Watcom compiler will be used to build both + * the DLL and application, then you can probably define this as a null string. + * Remember that pthread.h (this file) is used for both the DLL and application builds. + */ +#define PTW32_CDECL __cdecl + +#if defined(_UWIN) && PTW32_LEVEL >= PTW32_LEVEL_MAX +# include +#else +/* + * Generic handle type - intended to extend uniqueness beyond + * that available with a simple pointer. It should scale for either + * IA-32 or IA-64. + */ +typedef struct { + void * p; /* Pointer to actual object */ + unsigned int x; /* Extra information - reuse count etc */ +} ptw32_handle_t; + +typedef ptw32_handle_t pthread_t; +typedef struct pthread_attr_t_ * pthread_attr_t; +typedef struct pthread_once_t_ pthread_once_t; +typedef struct pthread_key_t_ * pthread_key_t; +typedef struct pthread_mutex_t_ * pthread_mutex_t; +typedef struct pthread_mutexattr_t_ * pthread_mutexattr_t; +typedef struct pthread_cond_t_ * pthread_cond_t; +typedef struct pthread_condattr_t_ * pthread_condattr_t; +#endif +typedef struct pthread_rwlock_t_ * pthread_rwlock_t; +typedef struct pthread_rwlockattr_t_ * pthread_rwlockattr_t; +typedef struct pthread_spinlock_t_ * pthread_spinlock_t; +typedef struct pthread_barrier_t_ * pthread_barrier_t; +typedef struct pthread_barrierattr_t_ * pthread_barrierattr_t; + +/* + * ==================== + * ==================== + * POSIX Threads + * ==================== + * ==================== + */ + +enum { +/* + * pthread_attr_{get,set}detachstate + */ + PTHREAD_CREATE_JOINABLE = 0, /* Default */ + PTHREAD_CREATE_DETACHED = 1, + +/* + * pthread_attr_{get,set}inheritsched + */ + PTHREAD_INHERIT_SCHED = 0, + PTHREAD_EXPLICIT_SCHED = 1, /* Default */ + +/* + * pthread_{get,set}scope + */ + PTHREAD_SCOPE_PROCESS = 0, + PTHREAD_SCOPE_SYSTEM = 1, /* Default */ + +/* + * pthread_setcancelstate paramters + */ + PTHREAD_CANCEL_ENABLE = 0, /* Default */ + PTHREAD_CANCEL_DISABLE = 1, + +/* + * pthread_setcanceltype parameters + */ + PTHREAD_CANCEL_ASYNCHRONOUS = 0, + PTHREAD_CANCEL_DEFERRED = 1, /* Default */ + +/* + * pthread_mutexattr_{get,set}pshared + * pthread_condattr_{get,set}pshared + */ + PTHREAD_PROCESS_PRIVATE = 0, + PTHREAD_PROCESS_SHARED = 1, + +/* + * pthread_barrier_wait + */ + PTHREAD_BARRIER_SERIAL_THREAD = -1 +}; + +/* + * ==================== + * ==================== + * Cancelation + * ==================== + * ==================== + */ +#define PTHREAD_CANCELED ((void *) -1) + + +/* + * ==================== + * ==================== + * Once Key + * ==================== + * ==================== + */ +#define PTHREAD_ONCE_INIT { PTW32_FALSE, 0, 0, 0} + +struct pthread_once_t_ +{ + int done; /* indicates if user function has been executed */ + void * lock; + int reserved1; + int reserved2; +}; + + +/* + * ==================== + * ==================== + * Object initialisers + * ==================== + * ==================== + */ +#define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) -1) +#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER ((pthread_mutex_t) -2) +#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER ((pthread_mutex_t) -3) + +/* + * Compatibility with LinuxThreads + */ +#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PTHREAD_RECURSIVE_MUTEX_INITIALIZER +#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP PTHREAD_ERRORCHECK_MUTEX_INITIALIZER + +#define PTHREAD_COND_INITIALIZER ((pthread_cond_t) -1) + +#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) -1) + +#define PTHREAD_SPINLOCK_INITIALIZER ((pthread_spinlock_t) -1) + + +/* + * Mutex types. + */ +enum +{ + /* Compatibility with LinuxThreads */ + PTHREAD_MUTEX_FAST_NP, + PTHREAD_MUTEX_RECURSIVE_NP, + PTHREAD_MUTEX_ERRORCHECK_NP, + PTHREAD_MUTEX_TIMED_NP = PTHREAD_MUTEX_FAST_NP, + PTHREAD_MUTEX_ADAPTIVE_NP = PTHREAD_MUTEX_FAST_NP, + /* For compatibility with POSIX */ + PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_FAST_NP, + PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, + PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, + PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL +}; + + +typedef struct ptw32_cleanup_t ptw32_cleanup_t; + +#if defined(_MSC_VER) +/* Disable MSVC 'anachronism used' warning */ +#pragma warning( disable : 4229 ) +#endif + +typedef void (* PTW32_CDECL ptw32_cleanup_callback_t)(void *); + +#if defined(_MSC_VER) +#pragma warning( default : 4229 ) +#endif + +struct ptw32_cleanup_t +{ + ptw32_cleanup_callback_t routine; + void *arg; + struct ptw32_cleanup_t *prev; +}; + +#ifdef __CLEANUP_SEH + /* + * WIN32 SEH version of cancel cleanup. + */ + +#define pthread_cleanup_push( _rout, _arg ) \ + { \ + ptw32_cleanup_t _cleanup; \ + \ + _cleanup.routine = (ptw32_cleanup_callback_t)(_rout); \ + _cleanup.arg = (_arg); \ + __try \ + { \ + +#define pthread_cleanup_pop( _execute ) \ + } \ + __finally \ + { \ + if( _execute || AbnormalTermination()) \ + { \ + (*(_cleanup.routine))( _cleanup.arg ); \ + } \ + } \ + } + +#else /* __CLEANUP_SEH */ + +#ifdef __CLEANUP_C + + /* + * C implementation of PThreads cancel cleanup + */ + +#define pthread_cleanup_push( _rout, _arg ) \ + { \ + ptw32_cleanup_t _cleanup; \ + \ + ptw32_push_cleanup( &_cleanup, (ptw32_cleanup_callback_t) (_rout), (_arg) ); \ + +#define pthread_cleanup_pop( _execute ) \ + (void) ptw32_pop_cleanup( _execute ); \ + } + +#else /* __CLEANUP_C */ + +#ifdef __CLEANUP_CXX + + /* + * C++ version of cancel cleanup. + * - John E. Bossom. + */ + + class PThreadCleanup { + /* + * PThreadCleanup + * + * Purpose + * This class is a C++ helper class that is + * used to implement pthread_cleanup_push/ + * pthread_cleanup_pop. + * The destructor of this class automatically + * pops the pushed cleanup routine regardless + * of how the code exits the scope + * (i.e. such as by an exception) + */ + ptw32_cleanup_callback_t cleanUpRout; + void * obj; + int executeIt; + + public: + PThreadCleanup() : + cleanUpRout( 0 ), + obj( 0 ), + executeIt( 0 ) + /* + * No cleanup performed + */ + { + } + + PThreadCleanup( + ptw32_cleanup_callback_t routine, + void * arg ) : + cleanUpRout( routine ), + obj( arg ), + executeIt( 1 ) + /* + * Registers a cleanup routine for 'arg' + */ + { + } + + ~PThreadCleanup() + { + if ( executeIt && ((void *) cleanUpRout != (void *) 0) ) + { + (void) (*cleanUpRout)( obj ); + } + } + + void execute( int exec ) + { + executeIt = exec; + } + }; + + /* + * C++ implementation of PThreads cancel cleanup; + * This implementation takes advantage of a helper + * class who's destructor automatically calls the + * cleanup routine if we exit our scope weirdly + */ +#define pthread_cleanup_push( _rout, _arg ) \ + { \ + PThreadCleanup cleanup((ptw32_cleanup_callback_t)(_rout), \ + (void *) (_arg) ); + +#define pthread_cleanup_pop( _execute ) \ + cleanup.execute( _execute ); \ + } + +#else + +#error ERROR [__FILE__, line __LINE__]: Cleanup type undefined. + +#endif /* __CLEANUP_CXX */ + +#endif /* __CLEANUP_C */ + +#endif /* __CLEANUP_SEH */ + +/* + * =============== + * =============== + * Methods + * =============== + * =============== + */ + +/* + * PThread Attribute Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_attr_init (pthread_attr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_destroy (pthread_attr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_getdetachstate (const pthread_attr_t * attr, + int *detachstate); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstackaddr (const pthread_attr_t * attr, + void **stackaddr); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstacksize (const pthread_attr_t * attr, + size_t * stacksize); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_setdetachstate (pthread_attr_t * attr, + int detachstate); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstackaddr (pthread_attr_t * attr, + void *stackaddr); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstacksize (pthread_attr_t * attr, + size_t stacksize); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedparam (const pthread_attr_t *attr, + struct sched_param *param); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedparam (pthread_attr_t *attr, + const struct sched_param *param); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedpolicy (pthread_attr_t *, + int); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedpolicy (pthread_attr_t *, + int *); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_setinheritsched(pthread_attr_t * attr, + int inheritsched); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_getinheritsched(pthread_attr_t * attr, + int * inheritsched); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_setscope (pthread_attr_t *, + int); + +PTW32_DLLPORT int PTW32_CDECL pthread_attr_getscope (const pthread_attr_t *, + int *); + +/* + * PThread Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_create (pthread_t * tid, + const pthread_attr_t * attr, + void *(*start) (void *), + void *arg); + +PTW32_DLLPORT int PTW32_CDECL pthread_detach (pthread_t tid); + +PTW32_DLLPORT int PTW32_CDECL pthread_equal (pthread_t t1, + pthread_t t2); + +PTW32_DLLPORT void PTW32_CDECL pthread_exit (void *value_ptr); + +PTW32_DLLPORT int PTW32_CDECL pthread_join (pthread_t thread, + void **value_ptr); + +PTW32_DLLPORT pthread_t PTW32_CDECL pthread_self (void); + +PTW32_DLLPORT int PTW32_CDECL pthread_cancel (pthread_t thread); + +PTW32_DLLPORT int PTW32_CDECL pthread_setcancelstate (int state, + int *oldstate); + +PTW32_DLLPORT int PTW32_CDECL pthread_setcanceltype (int type, + int *oldtype); + +PTW32_DLLPORT void PTW32_CDECL pthread_testcancel (void); + +PTW32_DLLPORT int PTW32_CDECL pthread_once (pthread_once_t * once_control, + void (*init_routine) (void)); + +#if PTW32_LEVEL >= PTW32_LEVEL_MAX +PTW32_DLLPORT ptw32_cleanup_t * PTW32_CDECL ptw32_pop_cleanup (int execute); + +PTW32_DLLPORT void PTW32_CDECL ptw32_push_cleanup (ptw32_cleanup_t * cleanup, + void (*routine) (void *), + void *arg); +#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ + +/* + * Thread Specific Data Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_key_create (pthread_key_t * key, + void (*destructor) (void *)); + +PTW32_DLLPORT int PTW32_CDECL pthread_key_delete (pthread_key_t key); + +PTW32_DLLPORT int PTW32_CDECL pthread_setspecific (pthread_key_t key, + const void *value); + +PTW32_DLLPORT void * PTW32_CDECL pthread_getspecific (pthread_key_t key); + + +/* + * Mutex Attribute Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_init (pthread_mutexattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_destroy (pthread_mutexattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getpshared (const pthread_mutexattr_t + * attr, + int *pshared); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setpshared (pthread_mutexattr_t * attr, + int pshared); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_settype (pthread_mutexattr_t * attr, int kind); +PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_gettype (pthread_mutexattr_t * attr, int *kind); + +/* + * Barrier Attribute Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_init (pthread_barrierattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_destroy (pthread_barrierattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_getpshared (const pthread_barrierattr_t + * attr, + int *pshared); + +PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_setpshared (pthread_barrierattr_t * attr, + int pshared); + +/* + * Mutex Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_mutex_init (pthread_mutex_t * mutex, + const pthread_mutexattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutex_destroy (pthread_mutex_t * mutex); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutex_lock (pthread_mutex_t * mutex); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutex_timedlock(pthread_mutex_t *mutex, + const struct timespec *abstime); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutex_trylock (pthread_mutex_t * mutex); + +PTW32_DLLPORT int PTW32_CDECL pthread_mutex_unlock (pthread_mutex_t * mutex); + +/* + * Spinlock Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_spin_init (pthread_spinlock_t * lock, int pshared); + +PTW32_DLLPORT int PTW32_CDECL pthread_spin_destroy (pthread_spinlock_t * lock); + +PTW32_DLLPORT int PTW32_CDECL pthread_spin_lock (pthread_spinlock_t * lock); + +PTW32_DLLPORT int PTW32_CDECL pthread_spin_trylock (pthread_spinlock_t * lock); + +PTW32_DLLPORT int PTW32_CDECL pthread_spin_unlock (pthread_spinlock_t * lock); + +/* + * Barrier Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_barrier_init (pthread_barrier_t * barrier, + const pthread_barrierattr_t * attr, + unsigned int count); + +PTW32_DLLPORT int PTW32_CDECL pthread_barrier_destroy (pthread_barrier_t * barrier); + +PTW32_DLLPORT int PTW32_CDECL pthread_barrier_wait (pthread_barrier_t * barrier); + +/* + * Condition Variable Attribute Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_condattr_init (pthread_condattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_condattr_destroy (pthread_condattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_condattr_getpshared (const pthread_condattr_t * attr, + int *pshared); + +PTW32_DLLPORT int PTW32_CDECL pthread_condattr_setpshared (pthread_condattr_t * attr, + int pshared); + +/* + * Condition Variable Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_cond_init (pthread_cond_t * cond, + const pthread_condattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_cond_destroy (pthread_cond_t * cond); + +PTW32_DLLPORT int PTW32_CDECL pthread_cond_wait (pthread_cond_t * cond, + pthread_mutex_t * mutex); + +PTW32_DLLPORT int PTW32_CDECL pthread_cond_timedwait (pthread_cond_t * cond, + pthread_mutex_t * mutex, + const struct timespec *abstime); + +PTW32_DLLPORT int PTW32_CDECL pthread_cond_signal (pthread_cond_t * cond); + +PTW32_DLLPORT int PTW32_CDECL pthread_cond_broadcast (pthread_cond_t * cond); + +/* + * Scheduling + */ +PTW32_DLLPORT int PTW32_CDECL pthread_setschedparam (pthread_t thread, + int policy, + const struct sched_param *param); + +PTW32_DLLPORT int PTW32_CDECL pthread_getschedparam (pthread_t thread, + int *policy, + struct sched_param *param); + +PTW32_DLLPORT int PTW32_CDECL pthread_setconcurrency (int); + +PTW32_DLLPORT int PTW32_CDECL pthread_getconcurrency (void); + +/* + * Read-Write Lock Functions + */ +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_init(pthread_rwlock_t *lock, + const pthread_rwlockattr_t *attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_destroy(pthread_rwlock_t *lock); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_tryrdlock(pthread_rwlock_t *); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_trywrlock(pthread_rwlock_t *); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_rdlock(pthread_rwlock_t *lock); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_timedrdlock(pthread_rwlock_t *lock, + const struct timespec *abstime); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_wrlock(pthread_rwlock_t *lock); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_timedwrlock(pthread_rwlock_t *lock, + const struct timespec *abstime); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_unlock(pthread_rwlock_t *lock); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_init (pthread_rwlockattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_destroy (pthread_rwlockattr_t * attr); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * attr, + int *pshared); + +PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_setpshared (pthread_rwlockattr_t * attr, + int pshared); + +#if PTW32_LEVEL >= PTW32_LEVEL_MAX - 1 + +/* + * Signal Functions. Should be defined in but MSVC and MinGW32 + * already have signal.h that don't define these. + */ +PTW32_DLLPORT int PTW32_CDECL pthread_kill(pthread_t thread, int sig); + +/* + * Non-portable functions + */ + +/* + * Compatibility with Linux. + */ +PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setkind_np(pthread_mutexattr_t * attr, + int kind); +PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getkind_np(pthread_mutexattr_t * attr, + int *kind); + +/* + * Possibly supported by other POSIX threads implementations + */ +PTW32_DLLPORT int PTW32_CDECL pthread_delay_np (struct timespec * interval); +PTW32_DLLPORT int PTW32_CDECL pthread_num_processors_np(void); + +/* + * Useful if an application wants to statically link + * the lib rather than load the DLL at run-time. + */ +PTW32_DLLPORT int PTW32_CDECL pthread_win32_process_attach_np(void); +PTW32_DLLPORT int PTW32_CDECL pthread_win32_process_detach_np(void); +PTW32_DLLPORT int PTW32_CDECL pthread_win32_thread_attach_np(void); +PTW32_DLLPORT int PTW32_CDECL pthread_win32_thread_detach_np(void); + +/* + * Features that are auto-detected at load/run time. + */ +PTW32_DLLPORT int PTW32_CDECL pthread_win32_test_features_np(int); +enum ptw32_features { + PTW32_SYSTEM_INTERLOCKED_COMPARE_EXCHANGE = 0x0001, /* System provides it. */ + PTW32_ALERTABLE_ASYNC_CANCEL = 0x0002 /* Can cancel blocked threads. */ +}; + +/* + * Register a system time change with the library. + * Causes the library to perform various functions + * in response to the change. Should be called whenever + * the application's top level window receives a + * WM_TIMECHANGE message. It can be passed directly to + * pthread_create() as a new thread if desired. + */ +PTW32_DLLPORT void * PTW32_CDECL pthread_timechange_handler_np(void *); + +#endif /*PTW32_LEVEL >= PTW32_LEVEL_MAX - 1 */ + +#if PTW32_LEVEL >= PTW32_LEVEL_MAX + +/* + * Returns the Win32 HANDLE for the POSIX thread. + */ +PTW32_DLLPORT HANDLE PTW32_CDECL pthread_getw32threadhandle_np(pthread_t thread); + + +/* + * Protected Methods + * + * This function blocks until the given WIN32 handle + * is signaled or pthread_cancel had been called. + * This function allows the caller to hook into the + * PThreads cancel mechanism. It is implemented using + * + * WaitForMultipleObjects + * + * on 'waitHandle' and a manually reset WIN32 Event + * used to implement pthread_cancel. The 'timeout' + * argument to TimedWait is simply passed to + * WaitForMultipleObjects. + */ +PTW32_DLLPORT int PTW32_CDECL pthreadCancelableWait (HANDLE waitHandle); +PTW32_DLLPORT int PTW32_CDECL pthreadCancelableTimedWait (HANDLE waitHandle, + DWORD timeout); + +#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ + +/* + * Thread-Safe C Runtime Library Mappings. + */ +#ifndef _UWIN +# if defined(NEED_ERRNO) + PTW32_DLLPORT int * PTW32_CDECL _errno( void ); +# else +# ifndef errno +# if (defined(_MT) || defined(_DLL)) + __declspec(dllimport) extern int * __cdecl _errno(void); +# define errno (*_errno()) +# endif +# endif +# endif +#endif + +/* + * WIN32 C runtime library had been made thread-safe + * without affecting the user interface. Provide + * mappings from the UNIX thread-safe versions to + * the standard C runtime library calls. + * Only provide function mappings for functions that + * actually exist on WIN32. + */ + +#if !defined(__MINGW32__) +#define strtok_r( _s, _sep, _lasts ) \ + ( *(_lasts) = strtok( (_s), (_sep) ) ) +#endif /* !__MINGW32__ */ + +#define asctime_r( _tm, _buf ) \ + ( strcpy( (_buf), asctime( (_tm) ) ), \ + (_buf) ) + +#define ctime_r( _clock, _buf ) \ + ( strcpy( (_buf), ctime( (_clock) ) ), \ + (_buf) ) + +#define gmtime_r( _clock, _result ) \ + ( *(_result) = *gmtime( (_clock) ), \ + (_result) ) + +#define localtime_r( _clock, _result ) \ + ( *(_result) = *localtime( (_clock) ), \ + (_result) ) + +#define rand_r( _seed ) \ + ( _seed == _seed? rand() : rand() ) + + +/* + * Some compiler environments don't define some things. + */ +#if defined(__BORLANDC__) +# define _ftime ftime +# define _timeb timeb +#endif + +#ifdef __cplusplus + +/* + * Internal exceptions + */ +class ptw32_exception {}; +class ptw32_exception_cancel : public ptw32_exception {}; +class ptw32_exception_exit : public ptw32_exception {}; + +#endif + +#if PTW32_LEVEL >= PTW32_LEVEL_MAX + +/* FIXME: This is only required if the library was built using SEH */ +/* + * Get internal SEH tag + */ +PTW32_DLLPORT DWORD PTW32_CDECL ptw32_get_exception_services_code(void); + +#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ + +#ifndef PTW32_BUILD + +#ifdef __CLEANUP_SEH + +/* + * Redefine the SEH __except keyword to ensure that applications + * propagate our internal exceptions up to the library's internal handlers. + */ +#define __except( E ) \ + __except( ( GetExceptionCode() == ptw32_get_exception_services_code() ) \ + ? EXCEPTION_CONTINUE_SEARCH : ( E ) ) + +#endif /* __CLEANUP_SEH */ + +#ifdef __CLEANUP_CXX + +/* + * Redefine the C++ catch keyword to ensure that applications + * propagate our internal exceptions up to the library's internal handlers. + */ +#ifdef _MSC_VER + /* + * WARNING: Replace any 'catch( ... )' with 'PtW32CatchAll' + * if you want Pthread-Win32 cancelation and pthread_exit to work. + */ + +#ifndef PtW32NoCatchWarn + +#pragma message("Specify \"/DPtW32NoCatchWarn\" compiler flag to skip this message.") +#pragma message("------------------------------------------------------------------") +#pragma message("When compiling applications with MSVC++ and C++ exception handling:") +#pragma message(" Replace any 'catch( ... )' in routines called from POSIX threads") +#pragma message(" with 'PtW32CatchAll' or 'CATCHALL' if you want POSIX thread") +#pragma message(" cancelation and pthread_exit to work. For example:") +#pragma message("") +#pragma message(" #ifdef PtW32CatchAll") +#pragma message(" PtW32CatchAll") +#pragma message(" #else") +#pragma message(" catch(...)") +#pragma message(" #endif") +#pragma message(" {") +#pragma message(" /* Catchall block processing */") +#pragma message(" }") +#pragma message("------------------------------------------------------------------") + +#endif + +#define PtW32CatchAll \ + catch( ptw32_exception & ) { throw; } \ + catch( ... ) + +#else /* _MSC_VER */ + +#define catch( E ) \ + catch( ptw32_exception & ) { throw; } \ + catch( E ) + +#endif /* _MSC_VER */ + +#endif /* __CLEANUP_CXX */ + +#endif /* ! PTW32_BUILD */ + +#ifdef __cplusplus +} /* End of extern "C" */ +#endif /* __cplusplus */ + +#ifdef PTW32__HANDLE_DEF +# undef HANDLE +#endif +#ifdef PTW32__DWORD_DEF +# undef DWORD +#endif + +#undef PTW32_LEVEL +#undef PTW32_LEVEL_MAX + +#endif /* ! RC_INVOKED */ + +#endif /* PTHREAD_H */ diff --git a/src/WinLibs/pthreads/include/sched.h b/src/WinLibs/pthreads/include/sched.h new file mode 100644 index 000000000..10ecb5d7e --- /dev/null +++ b/src/WinLibs/pthreads/include/sched.h @@ -0,0 +1,178 @@ +/* + * Module: sched.h + * + * Purpose: + * Provides an implementation of POSIX realtime extensions + * as defined in + * + * POSIX 1003.1b-1993 (POSIX.1b) + * + * -------------------------------------------------------------------------- + * + * Pthreads-win32 - POSIX Threads Library for Win32 + * Copyright(C) 1998 John E. Bossom + * Copyright(C) 1999,2005 Pthreads-win32 contributors + * + * Contact Email: rpj@callisto.canberra.edu.au + * + * The current list of contributors is contained + * in the file CONTRIBUTORS included with the source + * code distribution. The list can also be seen at the + * following World Wide Web location: + * http://sources.redhat.com/pthreads-win32/contributors.html + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ifndef _SCHED_H +#define _SCHED_H + +#undef PTW32_LEVEL + +#if defined(_POSIX_SOURCE) +#define PTW32_LEVEL 0 +/* Early POSIX */ +#endif + +#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309 +#undef PTW32_LEVEL +#define PTW32_LEVEL 1 +/* Include 1b, 1c and 1d */ +#endif + +#if defined(INCLUDE_NP) +#undef PTW32_LEVEL +#define PTW32_LEVEL 2 +/* Include Non-Portable extensions */ +#endif + +#define PTW32_LEVEL_MAX 3 + +#if !defined(PTW32_LEVEL) +#define PTW32_LEVEL PTW32_LEVEL_MAX +/* Include everything */ +#endif + + +#if __GNUC__ && ! defined (__declspec) +# error Please upgrade your GNU compiler to one that supports __declspec. +#endif + +/* + * When building the DLL code, you should define PTW32_BUILD so that + * the variables/functions are exported correctly. When using the DLL, + * do NOT define PTW32_BUILD, and then the variables/functions will + * be imported correctly. + */ +#ifndef PTW32_STATIC_LIB +# ifdef PTW32_BUILD +# define PTW32_DLLPORT __declspec (dllexport) +# else +# define PTW32_DLLPORT __declspec (dllimport) +# endif +#else +# define PTW32_DLLPORT +#endif + +/* + * This is a duplicate of what is in the autoconf config.h, + * which is only used when building the pthread-win32 libraries. + */ + +#ifndef PTW32_CONFIG_H +# if defined(WINCE) +# define NEED_ERRNO +# define NEED_SEM +# endif +# if defined(_UWIN) || defined(__MINGW32__) +# define HAVE_MODE_T +# endif +#endif + +/* + * + */ + +#if PTW32_LEVEL >= PTW32_LEVEL_MAX +#ifdef NEED_ERRNO +#include "need_errno.h" +#else +#include +#endif +#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ + +#if defined(__MINGW32__) || defined(_UWIN) +#if PTW32_LEVEL >= PTW32_LEVEL_MAX +/* For pid_t */ +# include +/* Required by Unix 98 */ +# include +#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ +#else +typedef int pid_t; +#endif + +/* Thread scheduling policies */ + +enum { + SCHED_OTHER = 0, + SCHED_FIFO, + SCHED_RR, + SCHED_MIN = SCHED_OTHER, + SCHED_MAX = SCHED_RR +}; + +struct sched_param { + int sched_priority; +}; + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +PTW32_DLLPORT int __cdecl sched_yield (void); + +PTW32_DLLPORT int __cdecl sched_get_priority_min (int policy); + +PTW32_DLLPORT int __cdecl sched_get_priority_max (int policy); + +PTW32_DLLPORT int __cdecl sched_setscheduler (pid_t pid, int policy); + +PTW32_DLLPORT int __cdecl sched_getscheduler (pid_t pid); + +/* + * Note that this macro returns ENOTSUP rather than + * ENOSYS as might be expected. However, returning ENOSYS + * should mean that sched_get_priority_{min,max} are + * not implemented as well as sched_rr_get_interval. + * This is not the case, since we just don't support + * round-robin scheduling. Therefore I have chosen to + * return the same value as sched_setscheduler when + * SCHED_RR is passed to it. + */ +#define sched_rr_get_interval(_pid, _interval) \ + ( errno = ENOTSUP, (int) -1 ) + + +#ifdef __cplusplus +} /* End of extern "C" */ +#endif /* __cplusplus */ + +#undef PTW32_LEVEL +#undef PTW32_LEVEL_MAX + +#endif /* !_SCHED_H */ + diff --git a/src/WinLibs/pthreads/include/semaphore.h b/src/WinLibs/pthreads/include/semaphore.h new file mode 100644 index 000000000..ea42ce370 --- /dev/null +++ b/src/WinLibs/pthreads/include/semaphore.h @@ -0,0 +1,166 @@ +/* + * Module: semaphore.h + * + * Purpose: + * Semaphores aren't actually part of the PThreads standard. + * They are defined by the POSIX Standard: + * + * POSIX 1003.1b-1993 (POSIX.1b) + * + * -------------------------------------------------------------------------- + * + * Pthreads-win32 - POSIX Threads Library for Win32 + * Copyright(C) 1998 John E. Bossom + * Copyright(C) 1999,2005 Pthreads-win32 contributors + * + * Contact Email: rpj@callisto.canberra.edu.au + * + * The current list of contributors is contained + * in the file CONTRIBUTORS included with the source + * code distribution. The list can also be seen at the + * following World Wide Web location: + * http://sources.redhat.com/pthreads-win32/contributors.html + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#if !defined( SEMAPHORE_H ) +#define SEMAPHORE_H + +#undef PTW32_LEVEL + +#if defined(_POSIX_SOURCE) +#define PTW32_LEVEL 0 +/* Early POSIX */ +#endif + +#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309 +#undef PTW32_LEVEL +#define PTW32_LEVEL 1 +/* Include 1b, 1c and 1d */ +#endif + +#if defined(INCLUDE_NP) +#undef PTW32_LEVEL +#define PTW32_LEVEL 2 +/* Include Non-Portable extensions */ +#endif + +#define PTW32_LEVEL_MAX 3 + +#if !defined(PTW32_LEVEL) +#define PTW32_LEVEL PTW32_LEVEL_MAX +/* Include everything */ +#endif + +#if __GNUC__ && ! defined (__declspec) +# error Please upgrade your GNU compiler to one that supports __declspec. +#endif + +/* + * When building the DLL code, you should define PTW32_BUILD so that + * the variables/functions are exported correctly. When using the DLL, + * do NOT define PTW32_BUILD, and then the variables/functions will + * be imported correctly. + */ +#ifndef PTW32_STATIC_LIB +# ifdef PTW32_BUILD +# define PTW32_DLLPORT __declspec (dllexport) +# else +# define PTW32_DLLPORT __declspec (dllimport) +# endif +#else +# define PTW32_DLLPORT +#endif + +/* + * This is a duplicate of what is in the autoconf config.h, + * which is only used when building the pthread-win32 libraries. + */ + +#ifndef PTW32_CONFIG_H +# if defined(WINCE) +# define NEED_ERRNO +# define NEED_SEM +# endif +# if defined(_UWIN) || defined(__MINGW32__) +# define HAVE_MODE_T +# endif +#endif + +/* + * + */ + +#if PTW32_LEVEL >= PTW32_LEVEL_MAX +#ifdef NEED_ERRNO +#include "need_errno.h" +#else +#include +#endif +#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ + +#define _POSIX_SEMAPHORES + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#ifndef HAVE_MODE_T +typedef unsigned int mode_t; +#endif + + +typedef struct sem_t_ * sem_t; + +PTW32_DLLPORT int __cdecl sem_init (sem_t * sem, + int pshared, + unsigned int value); + +PTW32_DLLPORT int __cdecl sem_destroy (sem_t * sem); + +PTW32_DLLPORT int __cdecl sem_trywait (sem_t * sem); + +PTW32_DLLPORT int __cdecl sem_wait (sem_t * sem); + +PTW32_DLLPORT int __cdecl sem_timedwait (sem_t * sem, + const struct timespec * abstime); + +PTW32_DLLPORT int __cdecl sem_post (sem_t * sem); + +PTW32_DLLPORT int __cdecl sem_post_multiple (sem_t * sem, + int count); + +PTW32_DLLPORT int __cdecl sem_open (const char * name, + int oflag, + mode_t mode, + unsigned int value); + +PTW32_DLLPORT int __cdecl sem_close (sem_t * sem); + +PTW32_DLLPORT int __cdecl sem_unlink (const char * name); + +PTW32_DLLPORT int __cdecl sem_getvalue (sem_t * sem, + int * sval); + +#ifdef __cplusplus +} /* End of extern "C" */ +#endif /* __cplusplus */ + +#undef PTW32_LEVEL +#undef PTW32_LEVEL_MAX + +#endif /* !SEMAPHORE_H */ diff --git a/src/WinLibs/pthreads/lib/libpthreadGC2.a b/src/WinLibs/pthreads/lib/libpthreadGC2.a new file mode 100644 index 0000000000000000000000000000000000000000..07b4d8c9f01fd28f408db850faf3ac73a3589388 GIT binary patch literal 89608 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 DonI{l literal 0 HcmV?d00001 diff --git a/src/WinLibs/pthreads/lib/libpthreadGCE2.a b/src/WinLibs/pthreads/lib/libpthreadGCE2.a new file mode 100644 index 0000000000000000000000000000000000000000..2213e461fd21dca9169410aca228a2ba3a8c7d9c GIT binary patch literal 89614 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 literal 0 HcmV?d00001 diff --git a/src/WinLibs/pthreads/lib/md5.sum b/src/WinLibs/pthreads/lib/md5.sum new file mode 100644 index 000000000..508e642f0 --- /dev/null +++ b/src/WinLibs/pthreads/lib/md5.sum @@ -0,0 +1,10 @@ +042149c609287034009db55a73046107 libpthreadGC2.a +bfc065eed659be3b439c518887eb3715 libpthreadGCE2.a +ce931021e18f385f519e945a8a10548e pthreadGC2.dll +9bba0c831e8cab73de8ddb54f9648878 pthreadGCE2.dll +0ab7d0e87f3843f8104b3670f5a9af62 pthreadVC2.dll +4fc3d8e304949c3d36c788798cebd1f7 pthreadVC2.lib +ae4ae0ef65becf8684db223ceecbfba7 pthreadVCE2.dll +e992a86fed592d637849b458dbd6a89f pthreadVCE2.lib +d4f19355aae9f686bd145b5d1199ab29 pthreadVSE2.dll +0f2de0f75f6773c25571db4b74617d10 pthreadVSE2.lib diff --git a/src/WinLibs/pthreads/lib/pthreadGC2.dll b/src/WinLibs/pthreads/lib/pthreadGC2.dll new file mode 100644 index 0000000000000000000000000000000000000000..8b9116c78e6dec086dd179f86c944c9b9fbcdc89 GIT binary patch literal 60273 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%0Agy%wfdP^kYgX}UpqR* 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 VT+Z6$d$}w{ePtK6HdHR>{vWWuO`!k) literal 0 HcmV?d00001 diff --git a/src/WinLibs/pthreads/lib/pthreadVCE2.lib b/src/WinLibs/pthreads/lib/pthreadVCE2.lib new file mode 100644 index 0000000000000000000000000000000000000000..34c2ff3ac7b1e16b8c12c0ada2118fe324edd625 GIT binary patch literal 29400 zcmd^ION?B_x&A#iV2l$c;3R~X2QXla@nbwQHZOZ@kBuMW@z@@}ZF+jTk3H?_>27!T z_`xPwL?|M66-5yXFS0~;5k+^w0!3F@L{St)C_)j6A{Hn@5s|Wp5DOHcYS=N zf7Rj8ZEx;KKd0+|)K`B!|5H`RJn>4oU76pxYV(l&w{`2-*!IzFV>@=({4H^E`cO=5&fNLdxPku9}&I$8=@0?6wRz75_IaCqLYI}f~w<+PW~Hd(3KmCcK?$|(9Sh6 zy@e-ePgT+Q7es<4K2Wr~3w_YODMjNyfE+Y&PSO4eB0-IxDQdQf1nv91qW$kd4r={U z(Sc1wf?nGa(=YG@9e794+$@ox@@Ig52oucW_P>-O6PZZTJ5D8j5ps4;Qq(O_nQgrpFXirdcMNGhL zf*KnXwSg@t+Nh}dF2)Zi`njS@ZxKmagD2=H^aLG8c_qD%=liA7!6Va0kI$4Q_MO;! z{NVJ=(c`67cfK8!tEcwv8>Uie>g42PR*AlEXephU11F~rmnL@4?1oisu~pI;l@_9# zrD{}DZYjD^iCW!Svr+0q?Q6A4)G1Y(Rat4dDmpLObft2) z+b-1_wQgEkgT?4(s#~fjT*d+gu14K*Wxmrbn++=sT_IzS+Vk7HLdG5tK&~v5tJSvS zr7dD?May|?Z4qOuGw;;iFuJq$T4t+6jIGX`v9(2vt-!4`TO6ihGd3bq#wKOkHgn~6 zyB4_}$L1=FPPCYgP%DwjRreD@^^3!7)lr&r-;O(xL&Cacj6gMqHtJ&$67MJSX zTC0wl6NPbDZ0^Qbaf)R~{FX`4Ipaj=w?|XAI`idrR82c}?4j;wiQJzHS~=0;3S!Fb zTp+2G8gjYCW{SlD2PZ ziESzS3!17^nUAWiX1!(x4Xlu{7c-sL-W4+T34XajZ$Yc4Uk-uxpL^ zs9jSoWYKLYlLIhp9o^Wn{28g8gU5A;ZQD3bX*h?iY-GF0-L_V{)`XWgON-?jczY1- z#qj-BwFYk`_@;HwiD1m->}TD)nY3HjIC!GK}V01N*STPXAU?-87w6t>LUG28+>6 zW^gNqgv(giGn>qvi_N4!Pd`@Xn#tsy?BH4k3D>qzi+nncblTRs(iHth=ciJ(hS){d zZ*5x7;1xfu+m@Wx;fRGA+lhYk647s7#`(nwqIEMw*G>@)p2RsvmFVAi-oV++KX((Y z*-7*ksJe&fi*ce4CWyM=PwgZ60n+D?p1?WP&%_y3lj!&0zlZcMaW1t9=N(&KBl-pC z9sHi1Bl@gN^k+Q9q1pO_L|+1@wSaT4BRHd(B>E8a2mF5X5Ya7^YY@-<$g9yN`t&f$ zdKLP3{tNuKVSi|f=yT+?dYb56_%eAOc1LmkQXzT+yj!ml4S_yBL-Y^$__x!*I19XU z@Cm#h!q+oM&x8N*F_azoUBUB@kYAfeJ=Ea0ApGtEXBg)=?*ZeBS(Lp5Ii79!^bYt# z7m*)$xA0tz=R>a({RH&UUZR0<_>bqCyNLdZx?G9p?@-3iP{vQ-|Ajiv7#E5Dgy*mD z{3-lgf%^Oiv;lQH0RJ~e@Dc6vb3EU=gth@~gs-#5iQWhOorspv0KH1D&}#Yy&Cx8q zP7l)k^ewuNzDZ>&(M4KAgY*DBMBk?G(WCSjJwlJuQ?!jX(gqr)t+bh*rSVcDTUn$ThB&AN0f_n=cc2g5nXTM?wJw@8J%2%Aq5+ygEQUkXr{j zX7JZRqT#Otsp6{xAq>`mR^aMDAHjHfgBEkOq-82tvFqME_XuaL`&;rJ=g%lm2;E|y zTq<&pPX~B<8P3^y6?@{IvP(;@I8qSU09LPBa-Y%mQyOwLDFo8HKv8n)Fv-GK;=I~p zH=TW(NPM8g?(%Xw%$QeD-gM{Jt|mzRGl~!<$Nd>QZXeB7$_w9YZS#7BBaxfrHcxIB z`nr=6a;>8zTm-BnvOfjH`YHog7(P;#`Gz`Ns(||TY+G77o-t|Zg!g>CHKRLjZZR+g z<`x4wTrqNYGPyI3ud;8(9=OGZdgsJ$w^%3}Jzs<0Dbaa+^*tE241DK_GY=t$x|TAR z8t7Y|1~Zhneqo6HjUGJaW@8@Yr4|vciwL2A&VtlGX9=Na&XVuAo>@Qq+RaS}(!%qu zYrRd|&Fw$57rl_#rnb%PO?LU7f8sF^Zy9!z&S#}&CY0QF22}+-_)UO>nClQF3 zjJqBdKjWa(wgDwezg}3@#$dAec0CAtz7i4%R|APKTN=Ob&drtdbwQU;zbNRmdoRSg zjDljJ6zOY$Hj+a}ocY+NCW4(TtA;N35}?KQUaql6o9yqJA-}e=Z^X!;HVyN&l49Gn zr+8|qw)JFNvH~5>+xj{dv$%XSTS0dcHD?XEUSQe!?qD!J>Mjz1;|5O(2dNFmgyh-< z6^!dt9FJy(R?N2x8#8ra?c^aFB_z{9uWOeE+F6Om#%<8JWV|-t(8@&0xVALJTqWox z%gkshaMq5XVbl~Chs+ti-E2ag8^hpp>!x65#;_d}CxD)VDSHsvA+TlZ*0>q=YDLil zn1EM{y`e6zUg0!4LCn1`df%}t&@ z7Da4moKq%)SA>V?%f{KK>bioDKqEf!RN<%KIf18)E=7c>mPDDyyC7)L$#ExQ}P0)K;$ z4d5Ippt4-bpeS_3f8;ZH1T1gAXj3(sTe`dsr+VrS$BI;k|K{H~4er@gLx56VH>~;i z1d9F#dcTczg^%O3<=3&^nAQ`neq!he{x}W&8dZi9r+Y<`?spn(Jv}&h5BRFy2@+WRht?l|ZfNr06pkpFzt!LgOOb_+L4@eZo7`Y7&ohf z{VcGTVa?EQBq{c3ai-+JP+^}(lW)XrpPvElfPrhDAiJY_&&{$gT4vqD>!s(x5R~a()qpzdf8nZx)CWmSZ?#@V+ZQ}Za=o#?Qy}2 z_q9MDzlTQ`+etm+j&0+|*7IoZl`L+uUv*ot@AYEK4Y8iFlV#TF=TE`!RT*p~C=BcW7jP(~o@zM)v(Y`fVTCgDmcy8QI_RV)tick8R~= zwC6CgA26}?=D2>P?s| z3$K=Ap2%zq+W0#@bYthwEr65G_kNh~V;g|~T_1j5T07+VLq23IC3^4D@w9Nek9s^G zg6H2e@#E8;Uh&5CKg{H;)9Zovu!U!zCiRLN8dZ;EaD7vVQ;OVv6^cq8&7iU!s_kUcG|S~jO=-5 zeiC?3n|R5YbI*tY51+9S5mL^(9=YlKG3$xw*22SQO+0mG?z&gJ1wC`qQ;fX_e z7tTrNdKX&Zo-@%fG|dA;2gfZ(E^cUaZg6k|FJr}PH?ZD3@8aqcPuJPPsAC?~&1ln& z4k~jkqG$ZkK%aWS#FzIjTsSA4-?pAzJaG=P$wV{mbvPKs`%?gOvx|wjNc>BBJ!1xH zb&G{5E}{2~7TBZPYNDyjEWV(yaNivb)a-B;mt901-+Sso+p?JQYJr2{)^{#u=*@j3 ziwa)FE2aG+&J8RYopQSZ2(_gHblFqXxQ?`62KPCCDy1AD&PGpNCUv~W#_&KGv@ z*jV@UWhuwg;yuhWlEmr8i(d48y*r2Y+F$ab%UeUP6`kiR+onG`lwRd2Q?=rEow+DOfYoSevL=&lh2_(c7Q?lge86L+Xoq3kGq9&Lw8#aWpRT6 zk<;q=eLL`8df0>A&po1zGI$UpRMruyovAonB}&X;DWyd>DMg1m%y_FC2mq& z%$6YYIgVQZC!HVv1n^&H@ZHaS9K7P|asa>N#rHRWQ=VM^w|maE#Krwtg`fAik^@=% z-7Yk@meVqr|IdNmF$43>oPlY6aOHwJ>D;;wowSL6waxeMXF52=`&b|rs`_y8!C0@j zp>u=C!j+Mb{P^s4VqQuy5y>YGE?IVYVv8b>@cz{9A=1&ziAkNrfdYb5#2q?5Bd z0(XtDg0s>Pw8rcK%=P0|)=N|AqULlP9*QfRfUP->eX4qCvp z)916BZt8S%6Xu_}&F#yabNIhfq~O#k{-Fw+xHptq@&uI}9*Q5TS(1!QXV{R30W#O&D^Z2b$e^>Rf+CZ21_74Rhe9pVzs8-pcAmTh5;U=zdWG9rBX63mD-?_ zVL-n@e|a3&erb)AaG@FzDRMgc4f@NYbPbISs}ROu0@$!R(r?gT9+lfrwR$ZQ-Z~Z$ zd2%}X4f@ODxXXiHqmNMtL?IA`KokN|2t*+eg+LSnQ3ymK5QRV#0;hn$%kk9+ zZ&?TLnTO$>b3eSl{t(_J*vfVn{uJJ-GI(V*@b3K;yq3%0mHXiR2pj6|yY7Zp{|vk@ zDcut`c*Q1ohjZa&{SIEqdGOk(AoXZ?hB$b?nF4SA5_r2x;N?%5A*Q;&jW<3t? zi9&dv*22?J&exs`?`Ip}wQ1q)peNrvct553jiQQs$eVr+yzFi8-r59@D}%S86yAkv z;T8WH-t3#2Vgu7>wr0^OD1QFK2(9iE>W{Ud6J^HF%W-wW?cN^(sy zye$NcgO|el12tXqclc_@gA~e%K1nh7I{f3HwMdno%=zl8TH#lABcUM1D9oN9F|WfezI+w6ijYa_f1&*wOX*-F{{RmTg@m)(AXu>XA+J%jewROKDzd^)GJeXaUJ8IuqkhFyJHe}Qw>7Kz_|5_i!J@N( zah^Lz(u>mJ+K>+DNtA1)5keu~+OBPR9-r~`Dqp*Xw`-K|8NfB+09T`d4B$aAtci#~ z)q(-u2_W)z^)PVM1mLI%f+KJ<07of2q*n*Su{;EjGC+re=b6R>AAuhZz+deaY=j=Q zoDknurg8v}{rdsR*8d6W0fr#`Pf@1;G!nuF5F`+;Ac)1=r)_x-X??pjwVaFh_EC;Q zV4qroTA$!lM}k@)d>E+Jat{A~U%MLJ6w>YL@NTDSM;vDgW(USudD-#+N}nlwhf6Qy zr>cNq;{*==m@TG{{q4KFv4-}J9Wj7g$L-fK0hDt9p`$Uj$iyqhw!~`m&$Og)z4=f z!uQ^M$_wA0(U%|KOKl65Fr2`0kt?cgc>qDJ$2=2UV#P7PA0>6hQ7H)Jw$Vpu_k<$R zuEbFg#Z{+FjM4d%jHul<9q7HUFUB)buu*M=dR-Cvc$dm|GDg_#?Uj@2DJo+&{OYar z?c3Gu($5O%=aBTXS^7y~KN7^KJRxHyeJKT3%ZUz2X;(-;?b6Ry_QTp&URJt1K@$SnzV&2(S`7|8;a|SihshDX?}$0(LU!K_qCGpA~SI$zVHE_<&y3`m0lV zIbF5>6;4-)%>&03Rq|MxbKI80o8dcLZoW$Fv>&7(P$@w#6sq_|ukqe4VZB;droqfd z4RZ-e1g{eDCI$~pXF(zjolbi{eMnSfmx?b)7J7N_uI>*ICD;%1tsczQf_jVj$X|Zl zqiv~2u))ta-N!d=mGGYT-ex)OjpLi{=`r||@(3rp_|iKuLtYT0M z@Fx|~^P<~}F&$Hirbk=-AO|<7dGCXQTf;ja>3$d05e=WATvX*jgz(-+TaRg5b|RdS zfl&o{d_k%|X(6)WiFntJsO3Ni1zRCP{QFU2J{~Y=@bo5#0*LTx-n%)d+Xa`JceV&+ z8ouaFDI z7?zVJf}JW(S>4<|h(4bwKL4lF`wlO32v?^rZ9U-9wqS?Jxmj-upS5jF)qM6)Fh)4k zLZe2(g)e~%2zdK)zEQ(FG@Ww?aG{(?a~!{nkYO4j1IvV;Mi}8wVpKUlHDAb}wIPTT zP~q*i{8UqsxZqR2zinZvu~?jgC(MM2G*w9{%9i_fEd-4?Q~1;-W9mwxIg#b%jo(4j zUWc$W6>CgSs+uoS@%qlZMCwlA3Qg-?zEIw^wmuoun*vum=&Zl5C1p{I84ebiC zLbnfBA9+4^2t_)fP~Ex@nOvc6-HV@MouG4>FVFWPBwx^(FE6C0LZL8GC_+6bg+@xB z2zn)4ud(!&Aw{u5uC8PhbGY)^dTzF~o+BDD3CrkCdoMM&t!$=X?{(yL+7Ht!Z|@a% zeFC@_3#)ZTE+(B3nh zRY_?do043`;tf&?!G1_spb;E8%d6f|me;&-{<*52k)8IVL?DEwqdvdRI|&<=wyS13 z#1FeER~6BntI@)q^)y(VY7BoG-WW9rLV>CncqGsJ6KlB=g2FN+1_I6WHT9}CosWe| z+cM;K59PL7?GnF-2f=yReL3$u?00_9bFQ$cuUM>Qp;EzXl%$pPuuJ0*kM`gjyPBr0 zyh3RJx6Z+YhTWY*%%M;1hY?A;x=+9K`-3+&|EB%raP;b%9#8Zf3razcEmY#uM4kLe zUFf)SKDo@d$G^M-1J^BX{0N}!BFG-_z9*dPUcjF#{^=hKEm{vWX@tepmB7_R-k!y1~e6H$e^pb+=QrED9?Rp(u<<$U|Nk|Oct2Z4~iLaguwBCACZYXsha zz}Q|)vYMg^UtqkdDTzwx%PtC^L4uFMOZUchO?b)j`Nk=mRF==yCC&Ow z*v)8qdD)JWSQ24E)^r%!fiv`=tbm5Ae|S7=&oo9R4!AtC++l>GkF69XLeV8rTO=Vu zQI6R=*>`e;XDoJo9yN`&*JuD8@WdaRn-}AmD(p7wE%c}hy=vcHKW3~2$$+@Lh{GyF z&13d2u8jo%XzAXWPaJ;Cjrpl5^y^Prf!spdMr{nQ|8VaPr*H`^`q5t*Y1q1K!H=-z|VR79piV2#>xHm89kj2yZ{$0G!4frC%x+O9Wc zLg3-4!N%k3HP~$Mg^7G&awkVT5`JVkTbB*jezxet6q3MTs+Jfmo{@6NohSjQPkll= zLR6p=M=!MbQI>q+`4c@5fK33+WX7{elzBF^gi{N78a@Who6Z=jJ1Zmz_L1O2`5~_a zmX}h!c4k6^m;Ff$_Wnl(@q!uKp{VX0TzEF&N~U#?SH&Jka2?*&+oVa>|Nue+|Ws4f3FU6EMN>Vr|OZG9Hs^^^#n=X99z&k36H`D9G^ z@{)9DBG`KSH&39v%m`Ho&BB*=@bJC#(p$HVyGX* zZpC@j&~Eucdslm*Tw+ivwxx-fh=EZ4K*HE?czxY>S1lI0G))X_v9+|hev;8_euVHs z2azp_u<~HfDuh%XK;h*hvC0MB^IkA_V?elcMSNNSmFa8Nq=8HZeJ|0^BsQY7GQ}Jz zaE!>XZv#V@)nJJ4lLgwOkEfRSzKHRtTK9S5Ff_+W#Rp{({ynW{oGxYi==PZ81&ugp z!gmhd`HZ1$&st6QAAxdW2`~pMxsM2U>3~IOmiIh;wC8D-cZw2A5Bo(h`H01b{bEG+ zp2DRi{yEkUXK9~EJ0~8Cl%5n}OoZK`nIXTLUyWr9T5*(Gu`x9To19TTKlX@!LqJ=Z z-XSiew&thKB*M||i4ztZc{R5B%|>nOqx4aMiALf!dURRc*lg3vnS#EHAn<9y)IcI@ zQD=dXXtY1cgm{N|^+9CIP9G@aV;+S8tE|2f1QE5S)n#Dy<&?Lf$FPhnz%p`7t$$$E zh-HqUy`(m_NLezbfMvh|0I6^@r6nWwe+Sr*mna;qjRUkSc%eK5{)gk!fBOCG;qUhe z`2V}{_eL}U3)yh|1@3x)oF<-QCmH^-%!vp;!$@T! zj!U$y+wsik@5|KI0wa3e(y48^oh7ki6GUWGCa(@LVLuqcpvht!9u%^QqvZb(S^eJI z3@vGO7(_?^)ATXCye)@c#vI@h9#8GUFKwN{K~TkT(00UPR|WWCE3N8mNhP>%&E|B) z2v#E)TgolF=-Z&h1m=YB{KMZtp98B4PnJXBmnbvZ(ENn*<>;vha~jnSHKvIygd38K z0OE!)u87PH34*&keGOaR!S&Z+edK1COv^^L9$B55+Ij@5El^Nlk;d|Zccfs)LckmM z9G&OM9B#(`KL)Oi&NEurEun#~Ls@BgE+53G$GSwG-3K`JOH&gESoK0?TYQZgZ8u@;x3)h`3n^`DAGO?Wqy^Ry_Lykt(6;>*j|7+7 z@XMDbx;yP`u_YecH$V;|t+K?yJg!r&vKFQ$8rp%2fmK#2At$Y{;ATsxh!%o#N|XR7 z;8kHv_2V=dGDXtT&^7{1^j?cvBB+|n<*-AQSBCvKYj%s5qt5si$vKS0;M^F>3HC(G z?xqR6H&Jj}fiQ_k1biIZ1H=R@HmV2>-D3aij3fnr9**z-+ur}%^d;ml{WR!dIDA1I zB{r)U3z)KwGbNB0p)ZM-cM6tkB|{yxyps(tKm48Y!!A@qY!hNUaQq@1F3OzXO9oYM zqR<6&3)zv#{NVECyjNoTI*Y_Z4Dr-u!^?ZRs!3QWKxwfR7h;HuKLv+d|M-(cEqYlR z`Q#5OBJdmiZ4$^pTC!fPZJhoXSUdMV7$Mc@i(ovLP>d9{_178j70C7=-*lA$Qfx9UF z264o!!(PU-&LO71%BY!ByhwTgagC-PnxXS-_SD!q~&0ru^cm+vpcH zh=mZ%Hj%z&Z|c>y zY{$Yvh^NKw!+64g(6%@zXc|q`Qf1!|GI_7qRsar^y-)1>BLfbR1{un-^bc5=iGU}B zAU;0M2lJiYqSoUMd&~iVkQy)7bJ?D9< zx&$%agait|6avMf>lF$Ah*`WGJWrpQ^G*OS_$36}`>`OA6ASS+zu&*9X+|D6r16_B z0RIZe9RotyC&{jj6XIDpg?v0}b3RIRh%1l_t!exoFnZ~PHn@1fi$w{}(=0D&zf0oG z#BfbxLa|ico+^@e7XR?_K=mAgv(J~!dB-@!ky6Gzg@dY9z^Vn3b&6{3-K$hJFR zpVa)Kez18<#D}FMkjG(w4IVnB{oU_Sbs@xv!+(jXDt?>bWuqoid!Y{C-!JIENp369 z6p5uW7^Gm7(JPc5b%>Xv424gRHoY!kx6o&1qt!b`a3%9eG;n)H2?bMy#mP8mGqW*G zaZ~vu8r~F_EG(YN7fv0Z6`|GbxkR2rXk7Vn{9d(mpw=@Qf^~#85bX$>WpH{sN&vr% z$yY--2{TcG&?&zUW@ewpeDrnc$2a|Zd3^!qFOGwz1E67hwD9^%^0NBK^0L0ec{nyP z9OJzo;DCb8t)2iS5VWm(wJne0$@jV6n-$cd!bm0%;Bt%ibrM<=c?%*~wDOQv703{C zI*#jgo(Y2mC_98)zUj@ja&T<#*sYM+N%FA3*bEi7?C_5i3!iFl4& zCBJ8^GGZw+oYY~g4P8s<1wr;p@V?1=54J7(0HREt_B|^WaJn{U7w>#omMSh1cf812 z3~?YJ`*dh76+t<|CH{+*N=wl(1N7koSsGO&aYe!Y!648G&X-I4&OM+5(m}RmTnr3mFQ5fN5L13G15a1Yl!oqGwFoJj_Gt?n@|i zv1*R+0>4;AGeWMml?kRbLu|@B@>xc@7q^vzboT>#f=J}>h}R@s=2*mECN9|}q1F+| z-z*uBzrop`kT7cxpCGVoE@TIM-B8x#aFPrC0ivt^xA~d=w*~At`3bb=RClzkRXN4G zsT5ht=Nh4ac8JrR;y*fAIdZQldrMx&z7s|UO=Tl7m7yj;!T}5%CyZn@DC9@>#63+@ znNz$=$`QozTp0tChsd3343NpnQVguipLa?SKcH>RM|UxJE=-*&j4KhBOIQ!|9>K>-8~M|d7dhMbI9z^& ztms!o769C`A_@Yree4Tr-GJniw2TeU4~dC3vk^;(6Db}HvDS9Cw&ij{aCTO0B4T?I zNDa`CcvxFqq7$bO$>Iev5~DX6>MvGfpS0IwqlwZfu6}_5oZv|k&dCrT9xwDsGj1%T zOV!=P@tspBahexHyRMrSYnB34^Ue^QC}lYD1bSb=iFv|w=K_AZI7%vlNwI~FBJ|~0 zAwfnxHlTS^vfqiAIRTMe1MQ;T1?y zi7qxAb3<|oFYB42m1Q@Gn+_sEGtsf@Au8`lT`znrUJdv{L1bxaisdibmWi|{*)Y2n z(`Y~-irAIf7Cm@k;47q{n>X@UovDP|Qa4jye#{rCAr+);sUU1xq=DoqzaUjulqfVo zdKDRO)V5whQS4k4v+}~Q6Y7b43(HC7Lj;bg1t}QITUkz5E6M5d;MaBk8AYS7){FO1 zR}l-9o%p^)!I96cFCnSs5IN_!kaa!+i~RJYsHKFlQ0v0wo8P*euRC-3W>l2~oY5P} zhP^`bY-&VLrf?1#EsFp%-6>a*=w-;Mrp5u@iAYNyQF_C%9^wOTCA`fy2GZ=l>MFzJB9XKEHO86K~C0pZ{djXz{yz*v_x!p9*Q0LsYOL% zHJ$)JJ%$Q~E~$PHH1RkZT`qGQ5F+z-S9IXnLuihfmmzt6s+uNXL||7SJxO#|@z3`7 z{-)&zV5ohEm-;@BbvU0TItc;F7qvHMfKd2T+xp#{PV_uOlH3HGrBHhhCQzWDEXk=lDsG{aV!>UO9LP{k!S4kx>c~bx-X!*gG73Y&C*{G1fhib^VIo&jA4)6nuL~bZ z^*L}}g82s6G9E3|Kr7Gk5>BQIRjqp?olJYj0;hpnZ2jpSahm5t5d;U>lz8?PeR9 zNb!)pjIDyboeY-jx>B;2u~l%k2kd3+B3|$=VvBbG%5BiCQ90zhj{0M?l$`&O#N8Rl)LeV6(w3h%FNs4VwhQp2f=;` zQs#RUg)qA#fpAs?g3V2j4z`vdfyQj{&g!(kTvP_W3t9uE@1}mgQ={-v7NV7%v4l}l za#91f-{)>ybgM$o7?4@rIFn2eX_xe+a>wjJ5jSs4SsZzII4kk2_c~1 zd<~44mx&P*@&T(d(xY1}_B*vL?@|8X4z+CrMBQzqNJwC*3I)q8a^X{u7fUHPZwZ1- z3(6;mg+#HE5Myp?845V)hJ)w^GLFGCspV2qC@a#e4(n#7>W-qw%uZN56(&au>^G>( zvCab0XB(5jv+2vnex8 zDAYm0iXTgs3vhfrmdqBAoe-#;RR>$Nu$&Oy^IlZDFmPl~C+U_GUQICY`Aur!J$@|| z+?-CF8q~%(`L(n8wW<7CW9K~L@^Sn;JwFe!<1__YUgYOlz1K-%X$&Wb*&}b#&zjJF zaQ%e0C9WB&E&(kZUSIcJ5%oJ=KtsK6J;1GzM+6fX*iSer_vvu;!TDA2V1mRx+k0RV z`a)<>3s-4iw*tSP74TPS_y$eq@i5{;%(FGLlRU&?v0F!T4d7qD}K4{gDKr3rlSh5DGBn6opa0N6{Z4wwpNq*F>Zw z{gEdn62*2rW4?L%BPr0nk3glqc$85o@JCa?r<@7_Wh{-RLC*tX02mjZ@dPQXdbu8A zmPryR3sdz(Vv4bcOom=Pc7Y;xfx;eNHz)Bh=6j}GLehcd$GfJqm(6&o%kM9ZTlg*L z#rbw6ldck}37Y_4VtPD;%$b1nuUJ)7JD8%$;zY|HZQEwV@db$vS?5IjA zX*@cMy%lB^hX zpqZdphii}$DUP{;@6VEm7_ToAUMw%|X!T16F7jCn$U-i%ixcLl=+v6z!ss84R68Zx ziqhnRK~<0lGjPw6#CL!hYdA*PD>*Y^ZMm=C)2doCc;F-dLCe%5m(;=w>nkQhR+ z+!Tt`w$4NGWEQkb5t=IPlZ2-F!VSpuV!Oj^0tUsfjTIu8cnUKhGY{m11fOPNfJ#Se zK?YbhS+5iD!b z@^iNKbRH)9^gO!iYZ#BYHh8K$YwHW4w2$efz#t52J^?k4XgX#p8bWJO7*Uf_cB3(v zfwiqn#7Q}xvMKO8tiZ1~2!4ly;MY3b?EE-J>He@F8RY}$lWm3yZ`xw_(2O|cfEPsNqT(Hp??@q;6WOCH|H8PkqQn@`5aX& zEJ7iGXG;J6ucdd@!W0Q@Dn3Am0143dk@TT?Jz23BtPVYB{-C+>f3rR`)gO{ldp+j} zqu`IjmJ?RcHjeUrF=CU7FP7z$2Il;5d$i7dIzW2ln^Hu!lLE6}Z=O;G*Xvktu zlUkO!qG{EuVWULGYRn=7a=X&PA|Tnu|4f-|g3On>#fCs|kl?OcTpkD>asujyh+|+F zPUlP2m_vwvdoKo+Vxe{%88&9Cbz;@_UD-1cJhw$^Ha!KHwTfL@9Q9-35i+I%<3cka zHf?AI6cQl=(qk6pCSs#P>_^X&fD}nn4an;TEP3V1{1bUL6SSzFydepg@`9}F04Yw8 zm8|T2-LD}_al=+={_3Ooi);Z8NtI920$N4zB*qRX`9*!orcXA4=Inz7wBc-4N?W`j zD`-qYpl=AvV5MjW5&0&`dIO-wc;iwZ1urU%bP-`p%Yo+H++15)885WNRjjhd^sl?u4i+j0Y(AXiZx*6aOF=WbO^I@xF8T5L?&FK zF%Zni1d}1vV6{FfAoeWez*dPckI{%rfkL5uPB zZLLHNyLCkDlyzjDvW`^FG-1iHU#46jSWNGVt;6lKUSjL;1K2s?Abz=~`xZ1(eBsAL zxrBGIl-%%jiPjVc4Ej-iO==JkMrgWtZ!ceZ6vlBQ8Cv`}kXTBlU_oS}L$>8*Tjrre zN9j@TME(X%=R9d_mxHCMtP7zLyM)Nlg_b{h&-ZNt8PZ|jn8(j!_5j%0aR<>LCH+^% zsDp$zOA=vObrCS?5xg;s+T-sQC?=wDyH9ZY$smmS5dvY{4kwBM+jjOtSRMyq)D83< zFzSQT#3-N>6hbiSb_?EK610-g$~&%G3zQ08IWSfdagrD#iSdyX$SgV<1mY!9;0{N4+p~6HcdtnN-f?NxIpg|xSjC?FQ3Ve~b z@d+^4O$z4Dqus9}TXEA5rM1sdTKhah1x1#PoHj@{@(pA!?MdlL-j9|AuYAtp_FXcF zdVWNMsMk;vN{MKZ+L>$ zgry3goX8d`URYcWTbB;nFMTucHDtd*Tk3#TVA$?r*4+_z7m0!3pk;$wJaLzj`m}Zz zY)lB#F=>~ozw+v|^(tkMXwH+s(ZplIk zaT;)1rRiY0FRkN<7ePXH+SYhHGJ#LSfg-QF-h)k6jN_! zSkCkgJZny4c^*;QAekg0U>N-9_ZZe;UH%!J!uF&_oC~i)nKTjN8%g28;}8nSvXXZJ z6OLX-bt*7EO-l;Y+0x;;n2gkgm{oF%e`tf`7hh%+e}jkG5#p1qY>iv|Dc)A5bh0X2lyZyD+$J~ucX&Y4pJT5p287t* z`^%KMTVBY8scXZ5lONcUXX5F+5Cwy+@ygFBa;53z3B$nXOa10%9*$pY&yl}IJfRJ+14oO@W zGkyrIl2kYduBvrf@uzdiLm+Hsy2ulzdqyI*WhxP!arClY#{s+E=!~O;AR}ClW*b#T6Y~K5R6}bBSsMHgkTwNGe8*SU zQ@;MUA0Vq*Obf$oqet&~md?&Ndg?`%o>*kc+vp=jy+++py-fNP*~I%_1Go7CVJxK> z_^f#FM`o6ZN3PWfR;z(5|1a>PJn^-UsiW2JjO+ z4v4%2FqH6YGTzPzF-hbjpi~I8S4pWbr!`2a@SdA!B`IshXeO&mHQ3(=d}yn)bO6Br?*0|V z66Hq4R2S?q?1S9mojZk{1H}(o9~8To0iS?aG}!=R;+85;Dg;haFjK+cdy$y`Jeo^d zQIJGY3v-~ti-oGndobAi&+anfjQb9ak*+FZJn!M!>tdI5D#fFOAbWK?feKVwuXK^8 zbd_9)y}I^*#Ti8|Z`kt4-W;|sZHraMyNcO;3uIh{6H_+h)<1DFd=#lj9}gZ61X+^L zX!k02h#*AcfISD#M4yR+zyns#?0gRgdVJb)y4@roF;1`pP^C1)B@LwET(WE)E?K1N zV9P{5;+IkW#;1k_qF>~^t3{0u34yHqamBl$s+2SUwo z!5&oolv1gxP-E(Zb+^C%`cbV^-M~qO^e`Mehl?k8(bnH^0J8T-=wNaNkq~C}VhWyc zwx?|&X8D$8Rtaru970{<#ZuL2-}5B>Pch|AOqXY+3{L zV;E?&ys&8%Ha<*5SS*m!b>YrKk5b{=YGRCqqV{GVrCbEQu7{tXrO-X`K z8mhFg`@w8kw4yhlP{4GO!wg%<{W2W9zi#|#+H?H>=6(m_>@)FPZ3|t)O0q=Sme=q^ zlB@Pm;uVk~8pUub%sSQpt-^uw7&46&&*XwSge)2Ny&GI&x`K}0Mog5<_L0VhL�u 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 SVqGvN-B&;9Xe{>f+5Z7MtOyJM literal 0 HcmV?d00001 diff --git a/src/WinLibs/pthreads/md5.sum b/src/WinLibs/pthreads/md5.sum new file mode 100644 index 000000000..2877f7783 --- /dev/null +++ b/src/WinLibs/pthreads/md5.sum @@ -0,0 +1,18 @@ +e2cb3af382b39d87707bb363573adb68 ANNOUNCE +8f2ecdcaceb42540e9bb172009ceb079 BUGS +06183584ae28770a7d1c7c3a5e14589f CONTRIBUTORS +48ec567318f5c47c72431c7e3cf3051e COPYING +f14599a2f089f6ff8c97e2baa4e3d575 COPYING.LIB +19852db4c4a524abbc86bd1c43273754 ChangeLog +3d65810b8fe392bfc06df12eea8952ee FAQ +993e4f2a61b984fc388f8215d627b367 MAINTAINERS +d3ced5eebe58ac067b687b2a23c4f4fb NEWS +1aedf4324dfb56063fe7147a7d272111 PROGRESS +b0f5ed449de74acfae28d08f4d5b40b8 README +c082c135c3276df76ac578cbb4c2b7d4 README.Borland +bca53e2627a2ca954ba01bba52096498 README.CV +06b171419311b5de0c94b95720af31ef README.NONPORTABLE +41fccb8abcf3ce385a2fb90444aa6a2a README.Watcom +381039216767ac0d0282e43555eca97e README.WinCE +749695f5339afabe8a9e8c5b864fbbd6 TODO +20e5cc353d4a194a193f553c03d525d8 WinCE-PORT diff --git a/src/projectM-engine/FBO.hpp b/src/projectM-engine/FBO.hpp index 3ee2e2354..5ed91630a 100755 --- a/src/projectM-engine/FBO.hpp +++ b/src/projectM-engine/FBO.hpp @@ -38,7 +38,6 @@ #ifdef WIN32 #include -#include #endif /** WIN32 */ #ifdef LINUX diff --git a/src/projectM-engine/RandomNumberGenerators.hpp b/src/projectM-engine/RandomNumberGenerators.hpp index 31a35706e..d2af2c7df 100644 --- a/src/projectM-engine/RandomNumberGenerators.hpp +++ b/src/projectM-engine/RandomNumberGenerators.hpp @@ -95,7 +95,7 @@ inline std::size_t weightedRandomNormalized(std::vector weights) { return weights.size()-1; } -inline std::size_t weightedRandom(const std::vector & weights, uint weightTotalHint = 0) { +inline std::size_t weightedRandom(const std::vector & weights, unsigned int weightTotalHint = 0) { if (weightTotalHint == 0) { diff --git a/src/projectM-engine/Renderer.hpp b/src/projectM-engine/Renderer.hpp index cb2d4745a..569b1c996 100644 --- a/src/projectM-engine/Renderer.hpp +++ b/src/projectM-engine/Renderer.hpp @@ -6,14 +6,8 @@ #include "BeatDetect.hpp" #include -#ifdef LINUX #include #include -#endif - -#ifdef WIN32 -#include -#endif #ifdef USE_FTGL #ifdef WIN32 diff --git a/src/projectM-engine/TextureManager.cpp b/src/projectM-engine/TextureManager.cpp index 371f4d6a9..2750b2511 100644 --- a/src/projectM-engine/TextureManager.cpp +++ b/src/projectM-engine/TextureManager.cpp @@ -56,9 +56,9 @@ void TextureManager::Preload() void TextureManager::Clear() { - std::map::const_iterator iter; + - for(iter = textures.begin(); iter != textures.end(); iter++) + for(std::map::const_iterator iter = textures.begin(); iter != textures.end(); iter++) { glDeleteTextures(1,&iter->second); } diff --git a/src/projectM-engine/TextureManager.hpp b/src/projectM-engine/TextureManager.hpp index a6fcac8a2..8f6e54b5e 100644 --- a/src/projectM-engine/TextureManager.hpp +++ b/src/projectM-engine/TextureManager.hpp @@ -6,7 +6,7 @@ #include #endif #ifdef WIN32 -#include +#include #endif #include "SOIL.h" #include diff --git a/src/projectM-engine/TimeKeeper.cpp b/src/projectM-engine/TimeKeeper.cpp index 7607f96b5..912703731 100644 --- a/src/projectM-engine/TimeKeeper.cpp +++ b/src/projectM-engine/TimeKeeper.cpp @@ -96,7 +96,10 @@ int TimeKeeper::PresetFrameA() } double TimeKeeper::sampledPresetDuration() { - - return fmax(1, fmin(60, RandomNumberGenerators::gaussian +#ifdef WIN32 + return _presetDuration; +#else + return fmax(1, fmin(60, RandomNumberGenerators::gaussian (_presetDuration, _easterEgg))); +#endif } diff --git a/src/projectM-engine/libprojectM.vcproj b/src/projectM-engine/libprojectM.vcproj index 8d0107490..dd1ffb5c5 100644 --- a/src/projectM-engine/libprojectM.vcproj +++ b/src/projectM-engine/libprojectM.vcproj @@ -1,10 +1,11 @@ @@ -254,10 +255,6 @@ RelativePath=".\libprojectM.rc" > - - @@ -315,13 +312,17 @@ > + + @@ -512,13 +513,17 @@ > + + diff --git a/src/projectM-engine/projectM.cpp b/src/projectM-engine/projectM.cpp index e38025186..596a7d76f 100755 --- a/src/projectM-engine/projectM.cpp +++ b/src/projectM-engine/projectM.cpp @@ -61,8 +61,9 @@ #include "ConfigFile.h" #include "TextureManager.hpp" #include "TimeKeeper.hpp" +#ifdef USE_THREADS #include "pthread.h" - +#endif /* DLLEXPORT projectM::projectM ( int gx, int gy, int fps, int texsize, int width, int height, std::string preset_url,std::string title_fonturl, std::string title_menuurl ) :beatDetect ( 0 ), renderer ( 0 ), settings.presetURL ( preset_url ), title_fontURL ( title_fonturl ), menu_fontURL ( menu_fontURL ), smoothFrame ( 0 ), m_presetQueuePos(0) { @@ -77,7 +78,7 @@ DLLEXPORT projectM::projectM ( int gx, int gy, int fps, int texsize, int width, projectM::~projectM() { - + #ifdef USE_THREADS printf("c"); running = false; printf("l"); @@ -91,7 +92,7 @@ projectM::~projectM() printf("u"); pthread_mutex_destroy( &mutex ); printf("p"); - +#endif destroyPresetTools(); @@ -172,11 +173,11 @@ void projectM::readConfig (const std::string & configFile ) _settings.smoothPresetDuration = config.read ( "Smooth Preset Duration", config.read("Smooth Transition Duration", 10)); _settings.presetDuration = config.read ( "Preset Duration", 15 ); - _settings.presetURL = config.read ( "Preset Path", CMAKE_INSTALL_PREFIX "/share/projectM/presets" ); + _settings.presetURL = config.read ( "Preset Path", "/share/projectM/presets" ); _settings.titleFontURL = config.read - ( "Title Font", CMAKE_INSTALL_PREFIX "/share/projectM/fonts/Vera.ttf" ); + ( "Title Font", "/share/projectM/fonts/Vera.ttf" ); _settings.menuFontURL = config.read - ( "Menu Font", CMAKE_INSTALL_PREFIX "/share/projectM/fonts/VeraMono.ttf" ); + ( "Menu Font", "/share/projectM/fonts/VeraMono.ttf" ); _settings.shuffleEnabled = config.read ( "Shuffle Enabled", true); _settings.easterEgg = config.read ( "Easter Egg Parameter", 0.0); @@ -196,10 +197,13 @@ void projectM::readConfig (const std::string & configFile ) } +#ifdef USE_THREADS static void *thread_callback(void *prjm) { projectM *p = (projectM *)prjm; - p->thread_func(prjm); } + p->thread_func(prjm); +return NULL;} + void *projectM::thread_func(void *vptr_args) { @@ -213,6 +217,13 @@ void *projectM::thread_func(void *vptr_args) pthread_mutex_unlock( &mutex ); return NULL; } + evaluateSecondPreset(); + } +} +#endif + +void projectM::evaluateSecondPreset() +{ setupPresetInputs(&m_activePreset2->presetInputs()); m_activePreset2->presetInputs().frame = timeKeeper->PresetFrameB(); m_activePreset2->presetInputs().progress= timeKeeper->PresetProgressB(); @@ -220,8 +231,7 @@ void *projectM::thread_func(void *vptr_args) assert ( m_activePreset2.get() ); m_activePreset2->evaluateFrame(); renderer->PerPixelMath ( &m_activePreset2->presetOutputs(), &presetInputs2 ); - renderer->WaveformMath ( &m_activePreset2->presetOutputs(), &presetInputs2, true ); - } + renderer->WaveformMath ( &m_activePreset2->presetOutputs(), &presetInputs2, true ); } void projectM::setupPresetInputs(PresetInputs *inputs) @@ -294,32 +304,19 @@ DLLEXPORT void projectM::renderFrame() assert ( m_activePreset.get() ); - +#ifdef USE_THREADS pthread_cond_signal(&condition); pthread_mutex_unlock( &mutex ); - +#endif m_activePreset->evaluateFrame(); renderer->PerPixelMath ( &m_activePreset->presetOutputs(), &presetInputs ); renderer->WaveformMath ( &m_activePreset->presetOutputs(), &presetInputs, true ); +#ifdef USE_THREADS pthread_mutex_lock( &mutex ); - /* - if (pthread_join(thread, NULL) != 0) - { - return; - } - */ - //printf("thread done\n"); - /* - presetInputs.frame = timeKeeper->PresetFrameB(); - presetInputs.progress= timeKeeper->PresetProgressB(); - assert ( m_activePreset2.get() ); - m_activePreset2->evaluateFrame(); - renderer->PerPixelMath ( &m_activePreset2->presetOutputs(), &presetInputs ); - renderer->WaveformMath ( &m_activePreset2->presetOutputs(), &presetInputs, true ); - */ - //double pos = -((smoothFrame / (presetInputs.fps * smoothDuration))-1); - //double ratio = 1/(1 + exp((pos-0.5)*4*M_PI)); +#else + evaluateSecondPreset(); +#endif PresetMerger::MergePresets ( m_activePreset->presetOutputs(),m_activePreset2->presetOutputs(),timeKeeper->SmoothRatio(),presetInputs.gx, presetInputs.gy ); @@ -437,6 +434,8 @@ void projectM::projectM_init ( int gx, int gy, int fps, int texsize, int width, this->renderer = new Renderer ( width, height, gx, gy, texsize, beatDetect, settings().presetURL, settings().titleFontURL, settings().menuFontURL ); running = true; + +#ifdef USE_THREADS pthread_mutex_init(&mutex, NULL); pthread_cond_init(&condition, NULL); if (pthread_create(&thread, NULL, thread_callback, this) != 0) @@ -446,6 +445,8 @@ void projectM::projectM_init ( int gx, int gy, int fps, int texsize, int width, } pthread_mutex_lock( &mutex ); printf("got lock\n"); +#endif + renderer->setPresetName ( m_activePreset->presetName() ); timeKeeper->StartPreset(); assert(pcm()); @@ -794,7 +795,7 @@ void projectM::destroyPresetTools() /// @bug queuePreset case isn't handled void projectM::removePreset(unsigned int index) { - uint chooserIndex = **m_presetPos; + unsigned int chooserIndex = **m_presetPos; m_presetLoader->removePreset(index); diff --git a/src/projectM-engine/projectM.hpp b/src/projectM-engine/projectM.hpp index 54d69f1ef..9ec6406d8 100755 --- a/src/projectM-engine/projectM.hpp +++ b/src/projectM-engine/projectM.hpp @@ -63,6 +63,7 @@ #include "fatal.h" #include "PresetFrameIO.hpp" #include "PCM.hpp" +#include "pthread.h" #include @@ -87,8 +88,8 @@ class TimeKeeper; #endif /** KEEP THIS UP TO DATE! */ -#define PROJECTM_VERSION "1.00.00" -#define PROJECTM_TITLE "projectM 1.00.00" +#define PROJECTM_VERSION "1.10.00" +#define PROJECTM_TITLE "projectM 1.10.00" /** Interface types */ typedef enum { @@ -220,7 +221,8 @@ public: /// Returns the size of the play list unsigned int getPlaylistSize() const; - + void evaluateSecondPreset(); + inline void setShuffleEnabled(bool value) { _settings.shuffleEnabled = value; diff --git a/src/projectM-engine/timer.cpp b/src/projectM-engine/timer.cpp index 7a4ca81a6..c347e1ea1 100755 --- a/src/projectM-engine/timer.cpp +++ b/src/projectM-engine/timer.cpp @@ -37,21 +37,12 @@ unsigned int getTicks( struct timeval *start ) { ticks=(now.tv_sec-start->tv_sec)*1000+(now.tv_usec-start->tv_usec)/1000; return(ticks); } -struct timeval GetCurrentTime() - { - struct timeval now; - gettimeofday (&now, NULL ); - return now; - } + #else unsigned int getTicks( long start ) { return GetTickCount() - start; } -long GetCurrentTime() -{ - return GetTickCount(); -} #endif /** !WIN32 */ diff --git a/src/projectM-engine/timer.h b/src/projectM-engine/timer.h index 6bbabdf9d..2cc4ae49a 100755 --- a/src/projectM-engine/timer.h +++ b/src/projectM-engine/timer.h @@ -45,7 +45,7 @@ struct timeval GetCurrentTime(); #else #include unsigned int getTicks( long start ); -long GetCurrentTime(); + #endif /** !WIN32 */ #endif /** _TIMER_H */ diff --git a/src/projectM-iTunes-VizKit/Visual Studio Project/VizKit/VizKit.sln b/src/projectM-iTunes-VizKit/Visual Studio Project/VizKit/VizKit.sln index 195ddc334..114dd2d91 100644 --- a/src/projectM-iTunes-VizKit/Visual Studio Project/VizKit/VizKit.sln +++ b/src/projectM-iTunes-VizKit/Visual Studio Project/VizKit/VizKit.sln @@ -1,5 +1,5 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VizKit", "VizKit.vcproj", "{C996A961-AAE7-42DF-859F-E3434EC13885}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "..\..\..\WinLibs\freetype-2.3.5\builds\win32\visualc\freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}" diff --git a/src/projectM-iTunes-VizKit/Visual Studio Project/VizKit/VizKit.suo b/src/projectM-iTunes-VizKit/Visual Studio Project/VizKit/VizKit.suo index fb878853fa28a2fe7a83d12424167e95468a8119..b95193d34e5e28d542bf8e656ef16c50ea05b5af 100644 GIT binary patch delta 1562 zcmbtTZA@EL7(S=Hy}gz1uF$TaR9TcwR?0RgFg7}9mVGo(OkHHFiiu3N&cQ|-btCSg z#+jH!+6NPji%a-n2q95=CmP4LZUd(!WLOvD$bKk4{b?{xqty4bYhvOb!%p&?kLSMc zbKdto?^P%D>ZJa&KD}i%olXmg@f>5Uhkzk{MZqE3WN9*pb{&dIKAwk1rOHD8`C)ta z$TwV17HU6ENqcdlv<@yw!aZrf%nig_adq-Zs6`T9HTV?geJ!kxS7XI6V#?jR0q1m; znHV;cNsbjO60*h6K%^UYzoU!^O9Gf!G-;iJQi2CHpcZ^7KeXg%}!mp}~!xwlrI_ z$A0EueiH0wQkKA3a}$+RLBcE{f87eyb)J}|U1mo5E(>j5g@~ntba%u`+hs12E6ngU zh?I6J6=WwkQS&@ejjS$1YuQcMuQcGVG6m0ATcBEP1d9NdsT{3&a@O=kTJYW%^)Z_l zv!yOsyrPlelx?rfAEJGJCc|3VN%+G?8A^5Bg~<9dro+U&L15bD@)HFmjGbm%SsiO* zO*Fe$6IwUE30?Kh?OhJWzFb??aX~4^>ov#SS02Fs@aAy+=vw@d-Z*CvPgN$0ARnQf zPtyL}By%3hL>6%FbHBY7WfsCzZD%WEoHQAmU8BaeTTRqn2i*_me?WAb7i1J~&w9po>f&=YUF_o-`ek+~AKrb_%((lCf-T=pV>CH~*}0?e zf42dJJ$8&FCH?`1`)bEjv!>4Hb9fixJWl!TijUqao(d>D{>dH_FUg93ny;WuJqgc( zWXiRjS4&^M$+7I*jn$MH!4DO_9?@hJ9UpDN^5T+ijNw{EIqqC~B6j@;B-|6Z5^*d3 zp7E>&DoBwYr7xpM@u(gFqjA-X8sz=a213hohWp+ z1C(f@fu5)fMq~?7U>iU7_+cCwMW#$9h!ctU2l|Kl7txr^1WauG-fn{;n2?G0=JR^) zx%b_7-nr+T*FdK_(5XJypr(d6oi-eaLJ6n%PKOC9S)j%zJi{jL7iBk{ap}cJ-sSGZeCt;}}YP#2OfhPz_ zGa0(e^m5`n@s{JKVx$FVw6^yt%FQjN#w3|`CQacIEvubF{Yh7YMz_r4utXkq!y&lA zI6vy8A!CjBL~J--Y$(rw zG>||W(xRT%I56y^YiaXjehH?)`;#y-^dEtES8U}bp$hWK(+ug%R{dKX3Q0`0%*+uU52kXXKWgt zp9u26*$!LMZ{c4fLN8hx5OcBmB^WPbN_awJe4>T9u$7w?;W}G%@@H)(Pi=G(uV-D}Uz5T(c;Xu^(}&9@3c%^iK9_{>$~z(g(f#_{gZ1cIHkYOLGI>Ifw6u zcH^iAGFq^o@Z4sw1-uF>U~)8UDZ}C~+yl*Cun%;APS6GRg9G3oI0U+Z0`hV9w?MgI zG4U!W(9+plR*zR*j_V676R+n%aM!bS!_$~wi~w)K+%wSLI?vb@SiO}(y#|EhQmQja zTxcpOkUzxhsLAH%uhAd2g>*{F<6D&``+Ti2>PT@;c2Im8b+eY*TU+!7m7br_5CAzG|ngr5y0+^kp1 z-LI>;T7;G|G`nV!jH6&|su+{EehE(;o~i#%T4ckS+JOTUfI?6Nior}!0!l#{C|9gCoKV5J$Un-59MThZOX6_rGx%(Ld(?2a+``DAO`h&f}b4*z=OV=zbG z9!N?-l6ctyl(ZKiH6m%&;K+Tn*40*Z*CI1G@CY)kcCq26%)EWRu0wrYfb8}#@u3=R zB9lkgm&ER(MCh8~i4zEc5I6}w1*bqC_zZjwPJ@2%1vmo+z?a}GI0wE0=fT%t5PSnJ z08zLu((k)Fx<8yd4&N#f+1>*>t$w%wz`8NVfouI}9Q?mwd54wg49PL7 zZmEwxPUq9B=~7P?jdvUyseyO-$t`-jyADSr;>ZAEE0`H$@h2toANn>GV{bsW;D(;~ z-ckyjDb} @@ -111,9 +114,6 @@ - @@ -188,6 +188,8 @@ IgnoreDefaultLibraryNames="Nafxcw.lib;Libcmt.lib" ProgramDatabaseFile=".\Release/VizKit.pdb" SubSystem="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" ImportLibrary=".\Release/VizKit.lib" TargetMachine="1" /> @@ -209,9 +211,6 @@ - diff --git a/src/projectM-wmp/projectM-wmp.sln b/src/projectM-wmp/projectM-wmp.sln index 2011bf5dd..0d0d9bace 100644 --- a/src/projectM-wmp/projectM-wmp.sln +++ b/src/projectM-wmp/projectM-wmp.sln @@ -1,6 +1,6 @@  -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "projectM-wmp", "projectM-wmp\projectM-wmp.vcproj", "{E182C41E-2EF4-4BE6-8D85-F9A0982CD38C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libprojectM", "..\projectM-engine\libprojectM.vcproj", "{31B91091-431A-4842-8682-2A04B51C980A}" diff --git a/src/projectM-wmp/projectM-wmp.suo b/src/projectM-wmp/projectM-wmp.suo index 620f108c4144a60a3120200c13fb6db366df22fd..32ab0fb0be6a0a863a34462ce48370857a01f7c8 100644 GIT binary patch literal 95744 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 - prc->left); height = (int)(prc->bottom - prc->top); - globalPM = new projectM("C:\\Program\ Files\\projectM\\config.inp");//24,18,0,128,width,height,"C:\\Documents and Settings\\DEV2\\My Documents\\svn\\presets_projectM\\"); + globalPM = new projectM("C:\\Program Files\\projectM\\config.inp");//24,18,0,128,width,height,"C:\\Documents and Settings\\DEV2\\My Documents\\svn\\presets_projectM\\"); } @@ -92,7 +92,9 @@ STDMETHODIMP CProjectMwmp::Render(TimedLevel *pLevels, HDC hdc, RECT *prc) globalPM->projectM_resetGL(width,height); } - globalPM->pcm->addPCM8(pLevels->waveform); + //PCM* pcm = globalPM->pcm; + + //pcm->addPCM8(pLevels->waveform); wglMakeCurrent(hdc, hrc); globalPM->projectM_resetGL(width,height); globalPM->renderFrame(); @@ -526,8 +528,8 @@ HRESULT CProjectMwmp::WzToColor(const WCHAR *pwszColor, COLORREF *pcrColor) dwRet <<= 4; // and add in the value of this string - if ((pwszColor[i] >= L'0') && (pwszColor[i] <= L'9')) - { + if ((pwszColor[i] >= L'0') && (pwszColor[i] <= L'9')) + { dwRet += pwszColor[i] - '0'; } else if ((pwszColor[i] >= L'A') && (pwszColor[i] <= L'F')) diff --git a/src/projectM-wmp/projectM-wmp/projectM-wmp.vcproj b/src/projectM-wmp/projectM-wmp/projectM-wmp.vcproj index 3b4df6c66..27a87a7a8 100644 --- a/src/projectM-wmp/projectM-wmp/projectM-wmp.vcproj +++ b/src/projectM-wmp/projectM-wmp/projectM-wmp.vcproj @@ -1,10 +1,11 @@ - @@ -128,7 +128,7 @@ - diff --git a/src/projectM-wmp/projectM-wmp/projectM-wmp_i.c b/src/projectM-wmp/projectM-wmp/projectM-wmp_i.c index 570d4a720..e4f0eb32a 100644 --- a/src/projectM-wmp/projectM-wmp/projectM-wmp_i.c +++ b/src/projectM-wmp/projectM-wmp/projectM-wmp_i.c @@ -5,8 +5,8 @@ /* link this file in with the server and any clients */ - /* File created by MIDL compiler version 7.00.0499 */ -/* at Tue Oct 09 16:15:59 2007 + /* File created by MIDL compiler version 7.00.0500 */ +/* at Mon Mar 24 00:15:24 2008 */ /* Compiler settings for .\projectM-wmp.idl: Oicf, W1, Zp8, env=Win32 (32b run)