o
    Á¿i6  ã                   @   s  d dl mZ d dlZd dlm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 G d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZd dd„ZdS )!é    )Úabsolute_importN)Ú
ModuleType)Ú
_threading)Ústack)Úconfigé   )Ú_lockc                   @   ó   e Zd ZdS )Ú_ProfiledThreadingLockN©Ú__name__Ú
__module__Ú__qualname__© r   r   úY/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/profiling/collector/threading.pyr
      ó    r
   c                   @   r	   )Ú_ProfiledThreadingRLockNr   r   r   r   r   r      r   r   c                   @   r	   )Ú_ProfiledThreadingSemaphoreNr   r   r   r   r   r      r   r   c                   @   r	   )Ú"_ProfiledThreadingBoundedSemaphoreNr   r   r   r   r   r      r   r   c                   @   r	   )Ú_ProfiledThreadingConditionNr   r   r   r   r   r      r   r   c                   @   ó:   e Zd ZU dZeZee ed< eZ	e
ed< dZeed< dS )ÚThreadingLockCollectorzRecord threading.Lock usage.ÚPROFILED_LOCK_CLASSÚMODULEÚLockÚPATCHED_LOCK_NAMEN)r   r   r   Ú__doc__r
   r   ÚtypeÚ__annotations__Ú	threadingr   r   r   Ústrr   r   r   r   r   "   ó
   
 r   c                   @   r   )ÚThreadingRLockCollectorzRecord threading.RLock usage.r   r   ÚRLockr   N)r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r   r"   *   r!   r"   c                   @   r   )ÚThreadingSemaphoreCollectorz!Record threading.Semaphore usage.r   r   Ú	Semaphorer   N)r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r   r$   2   r!   r$   c                   @   r   )Ú"ThreadingBoundedSemaphoreCollectorz(Record threading.BoundedSemaphore usage.r   r   ÚBoundedSemaphorer   N)r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r   r&   :   r!   r&   c                   @   r   )ÚThreadingConditionCollectorz!Record threading.Condition usage.r   r   Ú	Conditionr   N)r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r   r(   B   r!   r(   Úreturnc                     sÜ   t jjrjtjrlt tjtjgd f t	jj
¡‰t tjtjgd f t	jj¡‰ dtjdd f‡fdd„} dtjdtjdtjdd f‡ fdd„}| t	j_
|t	j_t	j ¡ D ]\}}t ||j|j¡ qPd	d
lm} | ¡  d S d S d S )NÚselfr*   c                    s<   ˆ | ƒ | j d ur| jd urt | j | j| j¡ d S d S d S ©N)ÚidentÚ	native_idr   Úregister_threadÚname)r+   )Ú_thread_set_native_idr   r   Úthread_set_native_idV   s   ÿz(init_stack.<locals>.thread_set_native_idÚargsÚkwargsc                    s4   ˆ | g|¢R i |¤Ž | j d urt | j ¡ d S d S r,   )r-   r   Úunregister_thread)r+   r3   r4   )Ú_thread_bootstrap_innerr   r   Úthread_bootstrap_inner[   s   
ÿz*init_stack.<locals>.thread_bootstrap_innerr   )Ú_asyncio)r   r   ÚenabledÚis_availableÚtypingÚcastÚCallabler   ÚThreadÚddtrace_threadingÚ_set_native_idÚ_bootstrap_innerÚAnyÚ_activeÚitemsr/   r.   r0   Úddtrace.profilingr8   Ú$link_existing_loop_to_current_thread)r2   r7   Ú	thread_idÚthreadr8   r   )r6   r1   r   Ú
init_stackK   s$   þþ$ârI   )r*   N)Ú
__future__r   r   Útypesr   r;   Úddtrace.internal._unpatchedr   r?   Ú"ddtrace.internal.datadog.profilingr   Ú#ddtrace.internal.settings.profilingr   Ú r   Ú_ProfiledLockr
   r   r   r   r   ÚLockCollectorr   r"   r$   r&   r(   rI   r   r   r   r   Ú<module>   s&    	