
    #h.                        g d Z ddlZddlZddlZ	 ddlZddlZddlm	Z	 ddlm
Z
 ddlmZ 	 ddlmZmZ  e ed	            \  ZZej                  j$                  Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d dej4                        Zy# e$ r ddlZY w xY w# e$ r 	 ddlmZmZ n# e$ r	  ed      w xY wY w xY w))LockRLock	SemaphoreBoundedSemaphore	ConditionEvent    N   )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                   r    e Zd Z ej                         Zd Zed        Zd Z	d Z
d Zd Zd Zed        Zy	)
r   c                   |t         j                  j                         }|j                         }t        j
                  dk(  xs |dk(  }t        d      D ]2  }	 t        j                  |||| j                         |      x}| _
         n t        d      t        j                  d|j                  z         | j                          t        j
                  dk7  rd }	t        j                   | |	       | j                  j"                  `ddlm}
  |
| j                  j"                  d	       t        j(                  | t        j*                  | j                  j"                  fd
       y y # t        $ r Y !w xY w)Nwin32forkd   zcannot find name for semaphorezcreated semlock with handle %sc                 8    | j                   j                          y N)_semlock_after_fork)objs    U/var/www/html/sandstorm/venv/lib/python3.12/site-packages/multiprocess/synchronize.pyr   z%SemLock.__init__.<locals>._after_forkM   s    ((*    r	   )register	semaphorer   )exitpriority)r
   _default_contextget_contextget_start_methodsysplatformrange_multiprocessingr   
_make_namer   FileExistsErrorr   debughandle_make_methodsregister_after_forknameresource_trackerr   Finalize_cleanup)selfkindvaluemaxvaluectxr,   
unlink_nowislr   r   s              r   __init__zSemLock.__init__8   sF   ;**668C##%\\W,>
s 
	DA%5%=%=%4??+<&   T] 
	D ""BCC

3bii?@<<7"+$$T;7==) 3T]]''5MM$ 0 04==3E3E2G'(* * # s   .E++	E87E8c                 8    ddl m} t        |         || d       y )Nr	   )
unregisterr   )r-   r:   r   )r,   r:   s     r   r/   zSemLock._cleanupZ   s    044%r   c                 p    | j                   j                  | _        | j                   j                  | _        y r   )r   acquirereleaser0   s    r   r*   zSemLock._make_methods`   s$    }},,}},,r   c                 6    | j                   j                         S r   )r   	__enter__r>   s    r   r@   zSemLock.__enter__d   s    }}&&((r   c                 4     | j                   j                  | S r   )r   __exit__r0   argss     r   rB   zSemLock.__exit__g   s    %t}}%%t,,r   c                 &   t        j                  |        | j                  }t        j                  dk(  r.t        j
                         j                  |j                        }n|j                  }||j                  |j                  |j                  fS )Nr   )r
   assert_spawningr   r"   r#   get_spawning_popenduplicate_for_childr)   r1   r3   r,   )r0   r7   hs      r   __getstate__zSemLock.__getstate__j   sf    %]]<<7"**,@@KA		A277BKK11r   c                     t        j                  j                  | | _        t	        j
                  d|d   z         | j                          y )Nz recreated blocker with handle %rr   )r%   r   _rebuildr   r   r(   r*   r0   states     r   __setstate__zSemLock.__setstate__s   s<    (00995A

5a@Ar   c                  |    t        j                         j                  d   dt        t        j
                        S )N	semprefix-)r   current_process_confignextr   _rand r   r   r&   zSemLock._make_namex   s/    !113;;KHw}}-/ 	/r   N)__name__
__module____qualname__tempfile_RandomNameSequencerV   r8   staticmethodr/   r*   r@   rB   rJ   rO   r&   rW   r   r   r   r   4   sY    (H((*E *D & &
-)-2
 / /r   r   c                        e Zd ZddZd Zd Zy)r   c                H    t        j                  | t        |t        |       y Nr4   )r   r8   	SEMAPHORESEM_VALUE_MAXr0   r2   r4   s      r   r8   zSemaphore.__init__   s    y%CHr   c                 6    | j                   j                         S r   )r   
_get_valuer>   s    r   	get_valuezSemaphore.get_value   s    }}''))r   c                     	 | j                   j                         }d| j                  j                  d|dS # t        $ r d}Y *w xY w)Nunknown<(value=)>)r   rf   	Exception	__class__rX   r0   r2   s     r   __repr__zSemaphore.__repr__   sG    	MM,,.E $(>>#:#:EBB  	E	s   9 AANr	   )rX   rY   rZ   r8   rg   rp   rW   r   r   r   r      s    I*Cr   r   c                       e Zd ZddZd Zy)r   c                @    t        j                  | t        |||       y r`   r   r8   rb   rd   s      r   r8   zBoundedSemaphore.__init__   s    y%C@r   c                     	 | j                   j                         }d| j                  j                  d|d| j                   j
                  dS # t        $ r d}Y Aw xY w)Nri   rj   rk   z, maxvalue=rl   )r   rf   rm   rn   rX   r3   ro   s     r   rp   zBoundedSemaphore.__repr__   sY    	MM,,.E ''0F0FH 	H  	E	s   A AANrq   rX   rY   rZ   r8   rp   rW   r   r   r   r      s    AHr   r   c                       e Zd Zd Zd Zy)r   c                @    t        j                  | t        dd|       y Nr	   ra   rt   r0   r4   s     r   r8   zLock.__init__   s    y!QC8r   c                    	 | j                   j                         rdt        j                         j                  }t        j                         j                  dk7  rg|dt        j                         j                  z   z  }nB| j                   j                         dk(  rd}n"| j                   j                         dkD  rd}nd}d	| j                  j                  d
|dS # t        $ r d}Y *w xY w)N
MainThread|r	   Noner   SomeOtherThreadSomeOtherProcessri   rj   z(owner=rl   )r   _is_miner   rS   r,   	threadingcurrent_threadrf   _countrm   rn   rX   )r0   r,   s     r   rp   zLock.__repr__   s    	}}%%'..055++-22lBC)":":"<"A"AAAD))+q0%%'!+() $(>>#:#:DAA  	D	s   C C C-,C-Nrv   rW   r   r   r   r      s    9Br   r   c                       e Zd Zd Zd Zy)r   c                @    t        j                  | t        dd|       y ry   )r   r8   RECURSIVE_MUTEXrz   s     r   r8   zRLock.__init__   s    1#>r   c                 2   	 | j                   j                         r~t        j                         j                  }t        j                         j                  dk7  r$|dt        j                         j                  z   z  }| j                   j                         }nK| j                   j                         dk(  rd\  }}n(| j                   j                         dkD  rd\  }}nd\  }}d	| j                  j                  d
|d|dS # t        $ r d\  }}Y 0w xY w)Nr|   r}   r	   )r~   r   r   )r   nonzero)r   r   )ri   ri   rj   (, rl   )r   r   r   rS   r,   r   r   r   rf   rm   rn   rX   )r0   r,   counts      r   rp   zRLock.__repr__   s    	/}}%%'..055++-22lBC)":":"<"A"AAAD,,.))+q0'e%%'!+:e;e "&!8!8$FF  	/.KD%	/s   C#D DDNrv   rW   r   r   r   r      s    ?Gr   r   c                   V    e Zd ZddZd Zd Zd Zd Zd Zd Z	dd	Z
dd
Zd ZddZy)r   Nc                    |xs |j                         | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        | j                          y Nr   )r   _lockr   _sleeping_count_woken_count_wait_semaphorer*   )r0   lockr4   s      r   r8   zCondition.__init__   sS    (SYY[
"}}Q/MM!,"}}Q/r   c                     t        j                  |        | j                  | j                  | j                  | j
                  fS r   )r
   rF   r   r   r   r   r>   s    r   rJ   zCondition.__getstate__   s:    %

D00!!4#7#79 	9r   c                 Z    |\  | _         | _        | _        | _        | j	                          y r   )r   r   r   r   r*   rM   s     r   rO   zCondition.__setstate__   s*    49	2T)		D0r   c                 6    | j                   j                         S r   )r   r@   r>   s    r   r@   zCondition.__enter__   s    zz##%%r   c                 4     | j                   j                  | S r   )r   rB   rC   s     r   rB   zCondition.__exit__   s    "tzz""D))r   c                 p    | j                   j                  | _        | j                   j                  | _        y r   )r   r<   r=   r>   s    r   r*   zCondition._make_methods   s$    zz))zz))r   c                    	 | j                   j                  j                         | j                  j                  j                         z
  }d| j
                  j                  d| j                  d|dS # t        $ r d}Y 7w xY w)Nri   rj   r   r   rl   )r   r   rf   r   rm   rn   rX   r   )r0   num_waiterss     r   rp   zCondition.__repr__   ss    	$//88CCE,,55@@BCK "&!8!8$**kRR  	$#K	$s   A	A5 5BBc                 |   | j                   j                  j                         sJ d       | j                  j	                          | j                   j                  j                         }t        |      D ]  }| j                   j	                           	 | j                  j                  d|      | j                  j	                          t        |      D ]  }| j                   j                           S # | j                  j	                          t        |      D ]  }| j                   j                           w xY w)Nz,must acquire() condition before using wait()T)
r   r   r   r   r=   r   r$   r   r<   r   )r0   timeoutr   r6   s       r   waitzCondition.wait   s   zz""++- 	>=	>- 	$$& 

##**,u 	!AJJ 	!		%''//g> %%' 5\ %

""$% %%' 5\ %

""$%s   C5 5AD;c                    | j                   j                  j                         sJ d       | j                  j	                  d      rJ d       | j
                  j	                  d      r@| j                  j	                  d      }|sJ d       | j
                  j	                  d      r@d}||k  r[| j                  j	                  d      r@| j                  j                          |dz  }||k  r| j                  j	                  d      r@|rdt        |      D ]  }| j
                  j	                           | j                  j	                  d      r	 | j                  j	                  d      ry y y )Nzlock is not ownedFz<notify: Should not have been able to acquire _wait_semaphorez>notify: Bug in sleeping_count.acquire- res should not be Falser   r	   )	r   r   r   r   r<   r   r   r=   r$   )r0   nressleepersr6   s        r   notifyzCondition.notify  s[   zz""++-B/BB-''// 	*)	*  ''.&&..u5C 8 7 83 ''.
 lt33;;EB  ((*MH lt33;;EB 8_ ,!!))+, &&..u5 &&..u5 r   c                 D    | j                  t        j                         y )N)r   )r   r"   maxsizer>   s    r   
notify_allzCondition.notify_all.  s    ckk"r   c                     |       }|r|S |( t        t        dt        j                               |z   }nd }d }|sL|/| t        t        dt        j                               z
  }|dk  r	 |S | j                          |       }|sL|S )N	monotonicr   )getattrtimer   )r0   	predicater   resultendtimewaittimes         r   wait_forzCondition.wait_for1  s    M9gd;tyy9;gEGGH""%HWT+dii%H%JJq=  IIh[F  r   r   rq   )rX   rY   rZ   r8   rJ   rO   r@   rB   r*   rp   r   r   r   r   rW   r   r   r   r      s:    9

&**S%.4#r   r   c                   8    e Zd Zd Zd Zd Zd Zd	dZdefdZ	y)
r   c                x    |j                  |j                               | _        |j                  d      | _        y r   )r   r   _condr   _flagrz   s     r   r8   zEvent.__init__I  s(    ]]388:.
]]1%
r   c                     | j                   5  | j                  j                  d      r$| j                  j                          	 d d d        y	 d d d        y# 1 sw Y   y xY wNFT)r   r   r<   r=   r>   s    r   is_setzEvent.is_setM  sR    ZZ 	zz!!%(

""$	 	 		 	 	s   7AAA c                     | j                   5  | j                  j                  d       | j                  j                          | j                   j	                          d d d        y # 1 sw Y   y xY wNF)r   r   r<   r=   r   r>   s    r   setz	Event.setT  sP    ZZ 	$JJu%JJ JJ!!#	$ 	$ 	$s   AA&&A/c                 |    | j                   5  | j                  j                  d       d d d        y # 1 sw Y   y xY wr   )r   r   r<   r>   s    r   clearzEvent.clearZ  s0    ZZ 	&JJu%	& 	& 	&s   2;Nc                 h   | j                   5  | j                  j                  d      r| j                  j                          n| j                   j	                  |       | j                  j                  d      r$| j                  j                          	 d d d        y	 d d d        y# 1 sw Y   y xY wr   )r   r   r<   r=   r   )r0   r   s     r   r   z
Event.wait^  s    ZZ 		zz!!%(

""$

(zz!!%(

""$		 		 		 		 		s   BB(B((B1returnc                 |    | j                         rdnd}dt        |       j                   dt        |       dd| dS )Nr   unsetrj   z at z#x >)r   typerZ   id)r0   
set_statuss     r   rp   zEvent.__repr__j  s=    "kkmU
4:**+44}Aj\KKr   r   )
rX   rY   rZ   r8   r   r   r   r   strrp   rW   r   r   r   r   G  s)    &$&
L# Lr   r   c                       e Zd Zd	dZd Zd Zed        Zej                  d        Zed        Z	e	j                  d        Z	y)
BarrierNc                    dd l }ddlm}  ||j                  d      dz        }|j	                         }| j                  |||||f       d| _        d| _        y )Nr   r	   )BufferWrapperr6   r   )structheapr   calcsizer   rO   _stater   )	r0   partiesactionr   r4   r   r   wrapperconds	            r   r8   zBarrier.__init__s  sR    ' 4q 89}}7FGT7CDr   c                     |\  | _         | _        | _        | _        | _        | j                  j                         j                  d      | _        y )Nr6   )_parties_action_timeoutr   _wrappercreate_memoryviewcast_arrayrM   s     r   rO   zBarrier.__setstate__|  s>    &+	$dm	T]mm557<<SAr   c                 t    | j                   | j                  | j                  | j                  | j                  fS r   )r   r   r   r   r   r>   s    r   rJ   zBarrier.__getstate__  s,    t||T]]

DMM+ 	+r   c                      | j                   d   S r   r   r>   s    r   r   zBarrier._state      {{1~r   c                 "    || j                   d<   y r   r   ro   s     r   r   zBarrier._state      Ar   c                      | j                   d   S Nr	   r   r>   s    r   r   zBarrier._count  r   r   c                 "    || j                   d<   y r   r   ro   s     r   r   zBarrier._count  r   r   )NN)
rX   rY   rZ   r8   rO   rJ   propertyr   setterr   rW   r   r   r   r   q  sj    B
+   ]]    ]] r   r   )__all__r   r"   r[   _multiprocessr%   ImportErrorr    r
   r   r   r   r   listr$   r   rb   rc   objectr   r   r   r   r   r   r   rW   r   r   <module>r      s'    
 ,    
	81 "%(^  ((66G/f G/ZC C&Hy H"B7 B2GG G4i i^%LF %LT"i "}
    8888 8 7 8 	88 	98s:   B? C ?	C
CC1CC1C++C10C1