
    hX                        d Z ddlZddlZddlZddlZdZej                  j                  e      Z	ej                  d   dk  rd Znd Zd Zej                  dk(  r eed	d
      Zd Zyd Zd Zd Zedk(  rI eed      r	  ej*                           e eej.                  dd               ej0                  d       yy# e$ r Y 6w xY w)zSupport for spawning a daemon process.

PyMongo only attempts to spawn the mongocryptd daemon process when automatic
client-side field level encryption is enabled. See
:ref:`automatic-client-side-encryption` for more info.
    N
      c                     ddl m}  |       |z   }d}	 | j                         }||S | |       z
  }|dk  ryt        |dz  |d      }t        j                  |       J)z,Implement wait timeout support for Python 2.r   )timegMb@?N   g      ?)pymongo.monotonicr   pollminsleep)popentimeout_timedeadlinedelay
returncode	remainings          Q/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/pymongo/daemon.py_popen_waitr       si    37W$J%!! 57*IA~	9b1EJJu     c                 Z    	 | j                  |      S # t        j                  $ r Y yw xY w)z,Implement wait timeout support for Python 3.)r   N)wait
subprocessTimeoutExpired)r   r   s     r   r   r   3   s0    	::g:..(( 		s    **c                     d| _         y)zpSilence Popen's ResourceWarning.

    Note this should only be used if the process was created as a daemon.
    r   N)r   )r   s    r   _silence_resource_warningr   <   s     Er   win32DETACHED_PROCESS   c                     t        t        j                  d      5 }t        j                  | t
        |||      }t        |       ddd       y# 1 sw Y   yxY w)z!Spawn a daemon process (Windows).r+b)creationflagsstdinstderrstdoutN)openosdevnullr   Popen_DETACHED_PROCESSr   )argsr'   r   s      r   _spawn_daemonr+   L   sN    "**e$ 	-$$/gg?E &e,	- 	- 	-s   *AAc                     t        t        j                  d      5 }t        j                  | d|||      cddd       S # 1 sw Y   yxY w)z,Spawn the process and silence stdout/stderr.r    T)	close_fdsr"   r#   r$   N)r%   r&   r'   r   r(   )r*   r'   s     r   _spawnr.   `   sB    "**e$ 	?##gg?	? 	? 	?s	   ?Ac                     t         j                  t        g}|j                  |        t	        j
                  |d      }t        |t               y)z7Spawn a daemon process using a double subprocess.Popen.T)r-   N)sys
executable
_THIS_FILEextendr   r(   r   _WAIT_TIMEOUT)r*   spawner_args	temp_procs      r   _spawn_daemon_double_popenr7   i   s<    
3D!$$\TB	 	I}-r   c                 R    t         j                  rt        |        yt        |        y)zSpawn a daemon process (Unix).N)r0   r1   r7   r.   )r*   s    r   r+   r+   s   s     >>&t, 4Lr   __main__setsid   )__doc__r&   r   r0   r   r4   pathrealpath__file__r2   version_infor   r   platformgetattrr)   r+   r.   r7   __name__hasattrr:   OSErrorargv_exit r   r   <module>rI      s    
  
  WWh'
A&	 <<7
,>
K-(?.$ :2x 		 	"&!""67 
  s   C C	C	