
    Rh/                        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j2                        Zy# e$ r	  ed      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                         dk(  | _        t
        j                  dk(  xs | j                  }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forkwin32d   zcannot find name for semaphorezcreated semlock with handle %sc                 8    | j                   j                          y N)_semlock_after_fork)objs    2/usr/lib/python3.12/multiprocessing/synchronize.pyr   z%SemLock.__init__.<locals>._after_forkG   s    ((*    r	   )register	semaphorer   )exitpriority)r
   _default_contextget_contextget_start_method_is_fork_ctxsysplatformrange_multiprocessingr   
_make_namer   FileExistsErrorr   debughandle_make_methodsregister_after_forknameresource_trackerr   Finalize_cleanup)
selfkindvaluemaxvaluectx
unlink_nowislr   r   s
             r   __init__zSemLock.__init__2   sP   ;**668C002f<\\W,A0A0A
s 
	DA%5%=%=%4??+<&   T] 
	D ""BCC

3bii?@<<7"+$$T;7==) 3T]]''5MM$ 0 04==3E3E2G'(* * # s   ).E::	FFc                 8    ddl m} t        |         || d       y )Nr	   )
unregisterr   )r.   r;   r   )r-   r;   s     r   r0   zSemLock._cleanupT   s    044%r   c                 p    | j                   j                  | _        | j                   j                  | _        y r   )r   acquirereleaser1   s    r   r+   zSemLock._make_methodsZ   s$    }},,}},,r   c                 6    | j                   j                         S r   )r   	__enter__r?   s    r   rA   zSemLock.__enter__^   s    }}&&((r   c                 4     | j                   j                  | S r   )r   __exit__r1   argss     r   rC   zSemLock.__exit__a   s    %t}}%%t,,r   c                 T   t        j                  |        | j                  }t        j                  dk(  r.t        j
                         j                  |j                        }n#| j                  rt        d      |j                  }||j                  |j                  |j                  fS )Nr   zA SemLock created in a fork context is being shared with a process in a spawn context. This is not supported. Please use the same context to create multiprocessing objects and Process.)r
   assert_spawningr   r#   r$   get_spawning_popenduplicate_for_childr*   r"   RuntimeErrorr2   r4   r-   )r1   r8   hs      r   __getstate__zSemLock.__getstate__d   s    %]]<<7"**,@@KA  " $J K K 		A277BKK11r   c                     t        j                  j                  | | _        t	        j
                  d|d   z         | j                          d| _        y )Nz recreated blocker with handle %rr   F)r&   r   _rebuildr   r   r)   r+   r"   r1   states     r   __setstate__zSemLock.__setstate__r   sD    (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_namey   s/    !113;;KHw}}-/ 	/r   N)__name__
__module____qualname__tempfile_RandomNameSequencerX   r9   staticmethodr0   r+   rA   rC   rL   rQ   r'   rY   r   r   r   r   .   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r5   )r   r9   	SEMAPHORESEM_VALUE_MAXr1   r3   r5   s      r   r9   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   rh   	Exception	__class__rZ   r1   r3   s     r   __repr__zSemaphore.__repr__   sG    	MM,,.E $(>>#:#:EBB  	E	s   9 AANr	   )rZ   r[   r\   r9   ri   rr   rY   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 rb   r   r9   rd   rf   s      r   r9   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)Nrk   rl   rm   z, maxvalue=rn   )r   rh   ro   rp   rZ   r4   rq   s     r   rr   zBoundedSemaphore.__repr__   sY    	MM,,.E ''0F0FH 	H  	E	s   A AANrs   rZ   r[   r\   r9   rr   rY   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	   rc   rv   r1   r5   s     r   r9   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SomeOtherProcessrk   rl   z(owner=rn   )r   _is_miner   rU   r-   	threadingcurrent_threadrh   _countro   rp   rZ   )r1   r-   s     r   rr   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-Nrx   rY   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 r{   )r   r9   RECURSIVE_MUTEXr|   s     r   r9   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   )rk   rk   rl   (, rn   )r   r   r   rU   r-   r   r   r   rh   ro   rp   rZ   )r1   r-   counts      r   rr   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Nrx   rY   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+   )r1   lockr5   s      r   r9   zCondition.__init__   sS    (SYY[
"}}Q/MM!,"}}Q/r   c                     t        j                  |        | j                  | j                  | j                  | j
                  fS r   )r
   rG   r   r   r   r   r?   s    r   rL   zCondition.__getstate__   s:    %

D00!!4#7#79 	9r   c                 Z    |\  | _         | _        | _        | _        | j	                          y r   )r   r   r   r   r+   rO   s     r   rQ   zCondition.__setstate__   s*    49	2T)		D0r   c                 6    | j                   j                         S r   )r   rA   r?   s    r   rA   zCondition.__enter__   s    zz##%%r   c                 4     | j                   j                  | S r   )r   rC   rD   s     r   rC   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)Nrk   rl   r   r   rn   )r   r   rh   r   ro   rp   rZ   r   )r1   num_waiterss     r   rr   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   )r1   timeoutr   r7   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%   )r1   nressleepersr7   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        j                         |z   }nd }d }|s<||t        j                         z
  }|dk  r	 |S | j                          |       }|s<|S r   )time	monotonicr   )r1   	predicater   resultendtimewaittimes         r   wait_forzCondition.wait_for2  s~    Mnn&0GGH""T^^%55q=  IIh[F  r   r   rs   )rZ   r[   r\   r9   rL   rQ   rA   rC   r+   rr   r   r   r   r   rY   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   _flagr|   s     r   r9   zEvent.__init__J  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_setN  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.setU  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.clear[  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   )r1   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   unsetrl   z at z#x >)r   typer\   id)r1   
set_statuss     r   rr   zEvent.__repr__k  s=    "kkmU
4:**+44}Aj\KKr   r   )
rZ   r[   r\   r9   r   r   r   r   strrr   rY   r   r   r   r   H  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	   )BufferWrapperr7   r   )structheapr   calcsizer   rQ   _stater   )	r1   partiesactionr   r5   r   r   wrapperconds	            r   r9   zBarrier.__init__t  sR    ' 4q 89}}7FGT7CDr   c                     |\  | _         | _        | _        | _        | _        | j                  j                         j                  d      | _        y )Nr7   )_parties_action_timeoutr   _wrappercreate_memoryviewcast_arrayrO   s     r   rQ   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   rL   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   rq   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   rq   s     r   r   zBarrier._count  r   r   )NN)
rZ   r[   r\   r9   rQ   rL   propertyr   setterr   rY   r   r   r   r   r  sj    B
+   ]]    ]] r   r   )__all__r   r#   r]   r&   r    r
   r   r   r   r   ImportErrorlistr%   r   rd   re   objectr   r   r   r   r   r   r   rY   r   r   <module>r      s     
      
44 "%(^  ((66N/f N/hC C&Hy H"B7 B2GG G4i i^%LF %LT"i "k
 	 4
 3 4 44s   B> >C