mς .αΈEc@s4dZdkZdkZdkZdkZdkZdkZdkZdkZdk l Z dk Z dk Z dk Z dkZeidƒZdeiƒZeiƒZeddjoeddjod eZnd „Zd „Zd fd „ƒYZdad„Zd„ZeƒZeieiƒdS(s'Signal handling dispatcher for Windows.N(sSetConsoleCtrlHandlertWinSignalHandlersZope-%d-iiiisGlobal\cCsΉtiƒ}tiƒ}|itidƒ|idti ƒtiƒ}|iti dƒ|idti ƒti ƒ}|iti|ƒ|iti|ƒ|id|dƒ|S(Nii(t pywintypestSECURITY_ATTRIBUTEStsatSIDt sidEveryonet Initializet ntsecuritycontSECURITY_WORLD_SID_AUTHORITYtSetSubAuthoritytSECURITY_WORLD_RIDt sidCreatortSECURITY_CREATOR_SID_AUTHORITYtSECURITY_CREATOR_OWNER_RIDtACLtacltAddAccessAllowedAcet win32eventtEVENT_MODIFY_STATEtFILE_ALL_ACCESStSetSecurityDescriptorDacl(R RRR((t7/data/zmath/zope/lib/python/Signals/WinSignalHandler.pytcreateEventSecurityObjectOs    cCsBx;tiiƒD]*\}}t|dƒo|iƒqqWdS(s+Interrupt a sleeping asyncore 'select' callt pull_triggerN(tasyncoret socket_maptitemstfdtobjthasattrR(RR((Rt wakeSelectas  t SignalHandlercBsGtZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCsyh|_h|_tiddddƒ|_t|_t t ƒt i d|i ƒ}|itƒ|iƒ||_dS(Nittarget(tselftregistryt event_handlesRt CreateEventtNonetadmin_event_handletFalsetshutdown_requestedtSetConsoleCtrlHandlertconsoleCtrlHandlert threadingtThreadtsignalCheckerThreadtthreadt setDaemontTruetstartt signal_thread(R!R.((Rt__init__ms      cCsbtidƒd|_ti|iƒ|iidƒd|_ d|_ d|_tidƒdS(Ns!signal handler shutdown starting.iis!signal handler shutdown complete.( tloggertdebugR!R(RtSetEventR&R2tjoinR%R"R#(R!((Rtshutdown|s     cCsΰtid|ƒd}|tijo ti}ni|ti jo ti }nL|ti jo ti }n/|ti ti fjontid|ƒd}|dj o-|ii|ƒo|i|dƒd}n|S(sYCalled by Windows on a new thread whenever a console control event is raised.sWindows control event %ds#Unexpected windows control event %diiN(R4R5tctrlTypeR%tsigtwin32cont CTRL_C_EVENTtsignaltSIGINTtCTRL_BREAK_EVENTtSIGTERMtCTRL_CLOSE_EVENTtCTRL_LOGOFF_EVENTtCTRL_SHUTDOWN_EVENTtinfotresultR!R"thas_keyt signalHandler(R!R9R:RE((RR*s"     cCsλxΧ|ipΜ|ig}dg}x7|iiƒD]&\}}|i |ƒ|i |ƒq2Wt i |t t iƒ}tid|ƒ||t i}|djoqtid|ƒ|i|dƒtidƒqWtidƒdS(Ns!signalCheckerThread awake with %sssignalCheckerThread calling %sssignalCheckerThread backssignalCheckerThread stopped(R!R(R&thandlesR%tsignumsR#RtsignumthandletappendRtWaitForMultipleObjectsR'tINFINITEtrcR4R5t WAIT_OBJECT_0RG(R!RKRIRORHRJ((RR-±s$        cCsΉ|ii|ƒ}|djo†g}|i|