a  zeZ-@s"gdZddlZddlZddlZddlZddlZddlmZddlmZddlm Z zddlm Z m Z Wne ye dYn0e 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|durtj}|}tjdkp*|dk}tdD]<}z t|||| |}|_ Wnt yjYq40qzq4t dt d|j|tjdkrdd} t || |j jdurdd lm} | |j jd t j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jdSN)_semlock _after_fork)objrO/opt/bitninja-python-dojo/embedded/lib/python3.9/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__2s2        zSemLock.__init__cCs"ddlm}t|||ddS)Nr) unregisterr)r)r5r )r(r5rrrr+Ts zSemLock._cleanupcCs|jj|_|jj|_dSr)racquirereleaser,rrrr&Zs zSemLock._make_methodscCs |jSr)r __enter__r8rrrr9^szSemLock.__enter__cGs |jj|Sr)r__exit__r,argsrrrr:aszSemLock.__exit__cCsDt||j}tjdkr,t|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__mszSemLock.__setstate__cCsdtjdttjfS)Nz%s-%s semprefix)r current_process_confignextr _randrrrrr"rszSemLock._make_nameN)__name__ __module__ __qualname__tempfile_RandomNameSequencerJr4 staticmethodr+r&r9r:rArEr"rrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddSNr0)r r4 SEMAPHORE SEM_VALUE_MAXr,r.r0rrrr4}szSemaphore.__init__cCs |jSr)r _get_valuer8rrr get_valueszSemaphore.get_valuecCs6z|j}Wnty$d}Yn0d|jj|fS)Nunknownz<%s(value=%s)>)rrV Exception __class__rKr,r.rrr__repr__s   zSemaphore.__repr__N)r)rKrLrMr4rWr\rrrrr{s rc@seZdZdddZddZdS)rrcCstj|t|||ddSrQr r4rSrUrrrr4szBoundedSemaphore.__init__cCs<z|j}Wnty$d}Yn0d|jj||jjfS)NrXz<%s(value=%s, maxvalue=%s)>)rrVrYrZrKr/r[rrrr\s  zBoundedSemaphore.__repr__N)rrKrLrMr4r\rrrrrs rc@seZdZddZddZdS)rcCstj|tdd|ddSNrrRr]r,r0rrrr4sz Lock.__init__cCszf|jr8tj}tjdkrd|dtj7}n,|jdkrLd}n|jdkr`d}nd}Wnt y|d}Yn0d |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessrXz<%s(owner=%s)>) r_is_miner rGr( threadingcurrent_threadrV_countrYrZrK)r,r(rrrr\s    z Lock.__repr__Nr^rrrrrsrc@seZdZddZddZdS)rcCstj|tdd|ddSr_)r r4RECURSIVE_MUTEXr`rrrr4szRLock.__init__cCsz||jrBtj}tjdkr6|dtj7}|j}n8|jdkrZd\}}n |jdkrrd\}}nd\}}Wnt yd\}}Yn0d |j j ||fS) Nrarbr)rcrr)rdnonzero)rerk)rXrX <%s(%s, %s)>) rrfr rGr(rgrhrirVrYrZrK)r,r(countrrrr\s       zRLock.__repr__Nr^rrrrrsrc@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 r=rorprqrrr8rrrrAs zCondition.__getstate__cCs |\|_|_|_|_|dSr)rorprqrrr&rCrrrrEs zCondition.__setstate__cCs |jSr)ror9r8rrrr9szCondition.__enter__cGs |jj|Sr)ror:r;rrrr:szCondition.__exit__cCs|jj|_|jj|_dSr)ror6r7r8rrrr&s zCondition._make_methodscCsHz|jj|jj}Wnty2d}Yn0d|jj|j|fS)NrXrl)rprrVrqrYrZrKro)r, num_waitersrrrr\s    zCondition.__repr__c Cs|j|jj}t|D]}|jqzD|jd|W|jt|D]}|jqPS]}|jqbn$|jt|D]}|jq0dS)NT) rpr7rorrir rrr6rq)r,timeoutrmr2rrrwaits          zCondition.waitrcCst|jdr|jd}qd}||krF|jdrF|j|d7}q|rpt|D]}|jqR|jdrpqbdS)NFrr)rqr6rprrr7r )r,nressleepersr2rrrnotifys       zCondition.notifycCs|jtjddS)N)rw)rzrmaxsizer8rrr notify_all(szCondition.notify_allcCsd|}|r|S|dur$t|}nd}d}|s`|durN|t}|dkrNq`|||}q,|Srn)time monotonicrv)r, predicateruresultendtimewaittimerrrwait_for+s  zCondition.wait_for)N)N)r)N)rKrLrMr4rArEr9r:r&r\rvrzr|rrrrrrs   rc@s6eZdZddZddZddZddZd d d Zd S) rcCs |||_|d|_dSrn)rr_condr_flagr`rrrr4CszEvent.__init__cCsR|j8|jdr.|jWddSWddS1sD0YdSNFT)rrr6r7r8rrris_setGs   z Event.is_setcCsJ|j0|jd|j|jWdn1s<0YdSNF)rrr6r7r|r8rrrsetNs  z Event.setcCs6|j|jdWdn1s(0YdSr)rrr6r8rrrclearTsz Event.clearNcCsv|j\|jdr |jn |j||jdrR|jWddSWddS1sh0YdSr)rrr6r7rv)r,rurrrrvXs     z Event.wait)N)rKrLrMr4rrrrvrrrrrAs rc@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||dd}|}||||||fd|_d|_dS)Nrr) BufferWrapperr2r)structheaprcalcsizerrE_stateri) r,partiesactionrur0rrwrappercondrrrr4js zBarrier.__init__cCs.|\|_|_|_|_|_|jd|_dS)Nr2)_parties_action_timeoutr_wrappercreate_memoryviewcast_arrayrCrrrrEsszBarrier.__setstate__cCs|j|j|j|j|jfSr)rrrrrr8rrrrAxs zBarrier.__getstate__cCs |jdSrnrr8rrrr|szBarrier._statecCs||jd<dSrnrr[rrrrscCs |jdSNrrr8rrrriszBarrier._countcCs||jd<dSrrr[rrrris)NN) rKrLrMr4rErApropertyrsetterrirrrrrhs    r)__all__rgrrNr!r}r r r r r ImportErrorlistr rjrSrTobjectrrrrrrrrrrr s,     Mo'