o
    tPf                     @   sj   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 dejZedkr3e	  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                   @   s\   e Zd Zeddd Zeddd Zeddd Zdd	d
Zdd Z	dd Z
dS )	TestTracez"Locks can be traced in Pure Pythonc              	      s   t tdr
t }nd }g  z& fddt  t W d    n1 s)w   Y  W t| nt| w |  g d d S )Ngettracec                    s*     | jj| j|f td d   S )NzTRACE: %s:%s %s)appendf_codeco_filenamef_linenoprintframeev_arglsttrace i/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__threading_vs_settrace.pyr   B   s   z.TestTrace.test_untraceable_lock.<locals>.traceztrace not empty)hasattrsysr   r   settraceassertEqual)selfoldr   r   r   test_untraceable_lock3   s   

zTestTrace.test_untraceable_lockc              	      s~   t tdr
t }nd }g t  z fddt }t |  |  W t| nt| w | d d S )Nr   c                    @      | jj| j|f W d    S 1 sw   Y  S Nr   r   r	   r
   r   lr   r   r   r   r   Y   s   
zBTestTrace.test_untraceable_lock_uses_different_lock.<locals>.traceshould not compile on pypy)r   r   r   r   r   acquirerelease
assertTrue)r   r   l2r   r   r   )test_untraceable_lock_uses_different_lockN   s   



z3TestTrace.test_untraceable_lock_uses_different_lockc              
      s   ddl m} ttdrt }nd }g d }t  z/z fddt    W n |yA } z|}W Y d }~nd }~ww W t| nt| w | d | t	|| d S )Nr   )LoopExitr   c                    r   r   r   r   r   r   r   r   y   s   
z=TestTrace.test_untraceable_lock_uses_same_lock.<locals>.tracer!   )

gevent.hubr'   r   r   r   r   r   r"   r$   
isinstance)r   r'   r   eexr   r   r   $test_untraceable_lock_uses_same_lockk   s&   


z.TestTrace.test_untraceable_lock_uses_same_lockr   c                 C   sj   t jrt jrtjd d dkr| d tjddtg}|| t	
|}| |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rcr   r   r   
run_script   s   


zTestTrace.run_scriptc                 C   s   |    d S r   r>   r   r   r   r   test_finalize_with_trace   s   z"TestTrace.test_finalize_with_tracec                 C   s   |  dg d S )N1r?   r@   r   r   r   test_bootstrap_inner_with_trace   s   z)TestTrace.test_bootstrap_inner_with_traceN)r   )__name__
__module____qualname__r0   skipOnPurePythonr   r&   r,   r>   rA   rC   r   r   r   r   r   2   s    



r   __main__)
__future__r   r   r8   unittestgevent.threadr   gevent.testingtestingr0   r6   TestCaser   rD   mainr   r   r   r   <module>   s    *o