
    i                         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                     dS dS )    )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
d	S )	TestTracez"Locks can be traced in Pure Pythonc                 p   t          t          d          rt          j                    }nd }g 	 fdt                      5  t          j                   d d d            n# 1 swxY w Y   t          j        |           n# t          j        |           w xY w|                     g d           d S )Ngettracec                                          | 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      S/usr/local/lib/python3.11/dist-packages/gevent/tests/test__threading_vs_settrace.pyr   z.TestTrace.test_untraceable_lock.<locals>.traceB   s@    

EL4enbIJJJ'#b'1222    ztrace not empty)hasattrsysr   r   settraceassertEqual)selfoldr   r   s     @@r   test_untraceable_lockzTestTrace.test_untraceable_lock3   s    3
## 	,..CCC		     
  $ $U###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ LCLb"344444s/   B A&B &A**B -A*.B Bc                    t          t          d          rt          j                    }nd }g t                      	 fdt                      }t          j                   |                                 |                                 t          j        |           n# t          j        |           w xY w|                     d           d S )Nr   c                     5                       | j        j        | j        |f           d d d            n# 1 swxY w Y   S Nr   r   r   r   r   r   r   lr   r   s      r   r   zBTestTrace.test_untraceable_lock_uses_different_lock.<locals>.traceY   s     O OJJ 8%."MNNNO O O O O O O O O O O O O O O    (8<<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
## 	,..CCCOO	       BL JJLLLJJLLLLCL 	9:::::s    AB& &B<c                    ddl m} t          t          d          rt          j                    }nd }g d }t                      	 fdt          j                                                    n# |$ r}|}Y d }~nd }~ww xY wt          j        |           n# t          j        |           w xY w|                     d           |                     t          ||                     d S )Nr   )LoopExitr   c                     5                       | j        j        | j        |f           d d d            n# 1 swxY w Y   S r    r!   r"   s      r   r   z=TestTrace.test_untraceable_lock_uses_same_lock.<locals>.tracey   s     O OJJ 8%."MNNNO O O O O O O O O O O O O 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
## 	,..CCC OO	      
 L IIKKKK 	 	 	AAAAAA	 LCL 	9:::
1h//00000s0   /A8 7B! 8B	=B?B! B		B! !B7 c                 h   t           j        r9t           j        r-t          j        d d         dk    r|                     d           t          j        ddt          g}|                    |           t          j
        |          }|                     |dd           |                     |dd           d S )	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    	71	7 $RaR(F22 MM5666dF3I_T""B#<===Q 233333r   c                 .    |                                   d S r    rF   r   s    r   test_finalize_with_tracez"TestTrace.test_finalize_with_trace   s    r   c                 2    |                      dg           d S )N1rH   rI   s    r   test_bootstrap_inner_with_tracez)TestTrace.test_bootstrap_inner_with_trace   s    r   N)r3   )__name__
__module____qualname__r8   skipOnPurePythonr   r*   r2   rF   rJ   rM   r3   r   r   r   r   2   s        Y DEE5 5 FE54  Y DEE; ; FE;8  Y DEE1 1 FE1>4 4 4 4      r   r   __main__)
__future__r   r   r@   unittestgevent.threadr   gevent.testingtestingr8   r>   TestCaser   rN   mainr3   r   r   <module>rZ      s    % % % % % % 



      ' ' ' ' ' ' " " " " " "'
Tl l l l l! l l l^ zIN r   