o w[eZ-@sgdZddlZddlZddlZddlZddlZddlmZddlmZddlm Z z ddlm Z m Z Wn e y?e dwe ed \ZZej jZGd d d eZ Gd d d e ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS))LockRLock SemaphoreBoundedSemaphore ConditionEventN)context)process)util)SemLock sem_unlinkzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.c@s\eZdZeZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c Cs|dur tj}|}tjdkp|dk}tdD]}zt|||| |}|_ Wn t y5Yqwnt dt d|j|tjdkrWdd} t || |j jdurydd lm} | |j jd t j|tj|j jfd d dSdS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jdSN)_semlock _after_fork)objr2/usr/lib/python3.10/multiprocessing/synchronize.pyrGsz%SemLock.__init__.._after_forkr)register semaphorer) exitpriority)r _default_context get_contextget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsregister_after_forknameresource_trackerrFinalize_cleanup) selfkindvaluemaxvaluectxr( unlink_nowislrrrrr__init__2s6         zSemLock.__init__cCs"ddlm}t|||ddS)Nr) unregisterr)r)r5r )r(r5rrrr+Ts zSemLock._cleanupcC|jj|_|jj|_dSr)racquirereleaser,rrrr&Z zSemLock._make_methodscC |jSr)r __enter__r9rrrr<^ zSemLock.__enter__cG |jj|Sr)r__exit__r,argsrrrr?a zSemLock.__exit__cCsDt||j}tjdkrt|j}n|j}||j|j |j fS)Nr) r assert_spawningrrrget_spawning_popenduplicate_for_childr%r-r/r()r,r3hrrr __getstate__ds  zSemLock.__getstate__cCs,tjj||_td|d|dS)Nz recreated blocker with handle %rr)r!r _rebuildrr r$r&r,staterrr __setstate__ms zSemLock.__setstate__cCsdtjdttjfS)Nz%s-%s semprefix)r current_process_confignextr _randrrrrr"rszSemLock._make_nameN)__name__ __module__ __qualname__tempfile_RandomNameSequencerPr4 staticmethodr+r&r<r?rGrKr"rrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddSNr0)r r4 SEMAPHORE SEM_VALUE_MAXr,r.r0rrrr4}zSemaphore.__init__cCr;r)r _get_valuer9rrr get_valuer=zSemaphore.get_valuecCs6z|j}Wn tyd}Ynwd|jj|fS)Nunknownz<%s(value=%s)>)rr] Exception __class__rQr,r.rrr__repr__s  zSemaphore.__repr__Nr)rQrRrSr4r^rcrrrrr{s  rc@seZdZdddZddZdS)rrcCstj|t|||ddSrWr r4rYr[rrrr4r\zBoundedSemaphore.__init__cCs<z|j}Wn tyd}Ynwd|jj||jjfS)Nr_z<%s(value=%s, maxvalue=%s)>)rr]r`rarQr/rbrrrrcs zBoundedSemaphore.__repr__NrdrQrRrSr4rcrrrrrs  rc@eZdZddZddZdS)rcCtj|tdd|ddSNrrXrer,r0rrrr4r\z Lock.__init__cCsz3|jrtj}tjdkr|dtj7}n|jdkr&d}n |jdkr0d}nd}Wn t y>d}Ynwd |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessr_z<%s(owner=%s)>) r_is_miner rMr( threadingcurrent_threadr]_countr`rarQ)r,r(rrrrcs    z Lock.__repr__Nrfrrrrr rc@rg)rcCrhri)r r4RECURSIVE_MUTEXrjrrrr4r\zRLock.__init__cCsz>|jr!tj}tjdkr|dtj7}|j}n|jdkr-d\}}n|jdkr9d\}}nd\}}Wn t yKd\}}Ynwd |j j ||fS) Nrkrlr)rmrr)rnnonzero)rorv)r_r_ <%s(%s, %s)>) rrpr rMr(rqrrrsr]r`rarQ)r,r(countrrrrcs        zRLock.__repr__Nrfrrrrrrtrc@sleZdZdddZddZddZdd Zd d Zd d ZddZ dddZ dddZ ddZ dddZ dS)rNcCs>|p||_|d|_|d|_|d|_|dSNr)r_lockr_sleeping_count _woken_count_wait_semaphorer&)r,lockr0rrrr4s     zCondition.__init__cCst||j|j|j|jfSr)r rCrzr{r|r}r9rrrrGs zCondition.__getstate__cCs |\|_|_|_|_|dSr)rzr{r|r}r&rIrrrrKs  zCondition.__setstate__cCr;r)rzr<r9rrrr<r=zCondition.__enter__cGr>r)rzr?r@rrrr?rBzCondition.__exit__cCr6r)rzr7r8r9rrrr&r:zCondition._make_methodscCsHz|jj|jj}Wn tyd}Ynwd|jj|j|fS)Nr_rw)r{rr]r|r`rarQrz)r, num_waitersrrrrcs   zCondition.__repr__c Cs|jjs Jd|j|jj}t|D]}|jqz|jd|W|j t|D]}|jq2S|j t|D]}|jqDw)Nz,must acquire() condition before using wait()T) rzrrpr{r8rsr r}r7r|)r,timeoutrxr2rrrwaits"         zCondition.waitrcCs|jjs Jd|jdrJd|jdr,|jd}|s&Jd|jdsd}||krK|jdrK|j|d7}||krK|jds8|rht|D]}|jqQ|jdrj |jds_dSdSdS)Nzlock is not ownedFznotify: Bug in sleeping_count.acquire- res should not be Falserr) rzrrpr}r7r|r{r8r )r,nressleepersr2rrrnotifys.        zCondition.notifycCs|jtjddS)N)r)rrmaxsizer9rrr notify_all(szCondition.notify_allcCsj|}|r|S|durt|}nd}d}|s3|dur)|t}|dkr) |S|||}|r|Sry)time monotonicr)r, predicaterresultendtimewaittimerrrwait_for+s"  zCondition.wait_forrrd)rQrRrSr4rGrKr<r?r&rcrrrrrrrrrs   rc@s6eZdZddZddZddZddZd d d Zd S) rcCs |||_|d|_dSry)rr_condr_flagrjrrrr4CszEvent.__init__cCsV|j|jdr|j WddS WddS1s$wYdSNFT)rrr7r8r9rrris_setGs  $z Event.is_setcCsL|j|jd|j|jWddS1swYdSNF)rrr7r8rr9rrrsetNs    "z Event.setcCs8|j|jdWddS1swYdSr)rrr7r9rrrclearTs"z Event.clearNcCsz|j0|jdr|jn|j||jdr*|j WddS WddS1s6wYdSr)rrr7r8r)r,rrrrrXs      $z Event.waitr)rQrRrSr4rrrrrrrrrAs rc@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||dd}|}||||||fd|_d|_dS)Nrr) BufferWrapperr2r)structheaprcalcsizerrK_staters) r,partiesactionrr0rrwrappercondrrrr4js  zBarrier.__init__cCs.|\|_|_|_|_|_|jd|_dS)Nr2)_parties_action_timeoutr_wrappercreate_memoryviewcast_arrayrIrrrrKsszBarrier.__setstate__cCs|j|j|j|j|jfSr)rrrrrr9rrrrGxs zBarrier.__getstate__cC |jdSryrr9rrrr| zBarrier._statecC||jd<dSryrrbrrrrcCrNrrr9rrrrsrzBarrier._countcCrrrrbrrrrsr)NN) rQrRrSr4rKrGpropertyrsetterrsrrrrrhs     r)__all__rqrrTr!rr r r r r ImportErrorlistr rurYrZobjectrrrrrrrrrrrs0      Mo'