
    h                         d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ	 dZ
 G d dej                        Zedk(  r e	j                          yy)    )print_functionN)allocate_locka  
from gevent import monkey
monkey.patch_all() # pragma: testrunner-no-monkey-combine
import sys, os, threading, time


# A deadlock-killer, to prevent the
# testsuite to hang forever
def killer():
    time.sleep(0.2)
    sys.stdout.write('..program blocked; aborting!')
    sys.stdout.flush()
    os._exit(2)
t = threading.Thread(target=killer)
t.daemon = True
t.start()


def trace(frame, event, arg):
    if threading is not None:
        threading.current_thread()
    return trace


def doit():
    sys.stdout.write("..thread started..")


def test1():
    t = threading.Thread(target=doit)
    t.start()
    t.join()
    sys.settrace(None)

sys.settrace(trace)
if len(sys.argv) > 1:
    test1()

sys.stdout.write("..finishing..")
c                       e Zd Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Zd	dZd Z	d Z
y)
	TestTracez"Locks can be traced in Pure Pythonc                 T   t        t        d      rt        j                         }nd }g 	 fdt               5  t        j                         d d d        t        j                  |       | j                  g d       y # 1 sw Y   2xY w# t        j                  |       w xY w)Ngettracec                     j                  | j                  j                  | j                  |f       t	        dd   z         S )NzTRACE: %s:%s %s)appendf_codeco_filenamef_linenoprint)frameev_arglsttraces      b/var/www/html/engine/venv/lib/python3.12/site-packages/gevent/tests/test__threading_vs_settrace.pyr   z.TestTrace.test_untraceable_lock.<locals>.traceB   s;    

ELL44ennbIJ'#b'12    ztrace not empty)hasattrsysr   r   settraceassertEqual)selfoldr   r   s     @@r   test_untraceable_lockzTestTrace.test_untraceable_lock3   s     3
#,,.CC		
  $U#$ LLb"34$ $ LLs"   B BB B	B B'c                    t        t        d      rt        j                         }nd }g t               	 fdt               }t        j                         |j                          |j                          t        j                  |       | j                  d       y # t        j                  |       w xY w)Nr   c                     5  j                  | j                  j                  | j                  |f       d d d        S # 1 sw Y   S xY wNr   r   r   r   r   r   r   lr   r   s      r   r   zBTestTrace.test_untraceable_lock_uses_different_lock.<locals>.traceY   sH     OJJ 8 8%.."MNO O    3AAshould not compile on pypy)r   r   r   r   r   acquirerelease
assertTrue)r   r   l2r#   r   r   s      @@@r   )test_untraceable_lock_uses_different_lockz3TestTrace.test_untraceable_lock_uses_different_lockN   s    3
#,,.CCO	 BLL JJLJJLLL 	9: LLs   AB& &B=c                    ddl m} t        t        d      rt        j                         }nd }g d }t               	 fdt        j                         j                          t        j                  |       | j                  d       | j                  t        ||             y # |$ r}|}Y d }~Od }~ww xY w# t        j                  |       w xY w)Nr   )LoopExitr   c                     5  j                  | j                  j                  | j                  |f       d d d        S # 1 sw Y   S xY wr    r!   r"   s      r   r   z=TestTrace.test_untraceable_lock_uses_same_lock.<locals>.tracey   sD     OJJ 8 8%.."MNOOr$   r%   )

gevent.hubr,   r   r   r   r   r   r&   r(   
isinstance)r   r,   r   eexr#   r   r   s        @@@r   $test_untraceable_lock_uses_same_lockz.TestTrace.test_untraceable_lock_uses_same_lockk   s    '3
#,,.CC O	
 LL IIK LL 	9:
1h/0  	A	 LLs*    ,B/ /C 4B;6C ;C  C Cc                 Z   t         j                  r7t         j                  r't        j                  d d dk(  r| j                  d       t        j                  ddt        g}|j                  |       t        j                  |      }| j                  |dd       | j                  |dd       y )	N   )      zKnown to hang on AppVeyorz-uz-czinterpreter was blockedr   zUnexpected error)	greentestPYPY3RUNNING_ON_APPVEYORr   version_infoskipTest
executablescriptextend
subprocesscallassertNotEqualr   )r   	more_argsargsrcs       r   
run_scriptzTestTrace.run_script   s    11$$Ra(F2 MM56dF3I__T"B#<=Q 23r   c                 $    | j                          y r    rE   r   s    r   test_finalize_with_tracez"TestTrace.test_finalize_with_trace   s    r   c                 (    | j                  dg       y )N1rG   rH   s    r   test_bootstrap_inner_with_tracez)TestTrace.test_bootstrap_inner_with_trace   s    r   N) )__name__
__module____qualname__r7   skipOnPurePythonr   r*   r2   rE   rI   rL   rM   r   r   r   r   2   sx    Y DE5 F54  Y DE; F;8  Y DE1 F1>4r   r   __main__)
__future__r   r   r?   unittestgevent.threadr   gevent.testingtestingr7   r=   TestCaser   rN   mainrM   r   r   <module>rZ      sO    % 
   ' "'
Tl!! l^ zINN r   