]@sddlZddlZddlZddlZddlZddlZddlmZddlmZdddgZ Gdd d e Z e Z e j Z e jZe jZe jZd d ZdS) N)spawn)utilensure_runningregister unregisterc@sXeZdZddZddZddZddZd d Zd d Zd S)SemaphoreTrackercCstj|_d|_dS)N) threadingLock_lock_fd)selfr6/opt/alt/python35/lib64/python3.5/semaphore_tracker.py__init__szSemaphoreTracker.__init__cCs|j|jS)N)rr )r rrrgetfd!s zSemaphoreTracker.getfdcCs|j|jdk rdSg}y|jtjjWntk rQYnXd}tj\}}zyW|j|t j }|gt j }|d||g7}t j |||Wntj|Yn X||_Wdtj|XWdQRXdS)Nz;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r r appendsysstderrfileno ExceptionospiperZget_executabler_args_from_interpreter_flagsspawnv_passfdsclose)r Z fds_to_passcmdrwZexeargsrrrr%s*      zSemaphoreTracker.ensure_runningcCs|jd|dS)NZREGISTER)_send)r namerrrrCszSemaphoreTracker.registercCs|jd|dS)NZ UNREGISTER)r )r r!rrrrGszSemaphoreTracker.unregistercCs\|jdj||jd}t|dkrCtdtj|j|}dS)Nz{0}:{1} asciiiz name too long)rformatencodelen ValueErrorrwriter )r rr!msgnbytesrrrr Ks   zSemaphoreTracker._sendN) __name__ __module__ __qualname__rrrrrr rrrrrs      rc-Cstjtjtjtjtjtjx=tjtjfD])}y|jWq?tk rgYq?Xq?Wt }zt |d}x|D]}yg|j j d\}}|dkr|j |n,|dkr|j|ntd|Wqtk r4ytjtjWnYnXYqXqWWdQRXWd|rzytjdt|Wntk ryYnXxu|D]m}zc|jd}ytj|Wn<tk r}ztjd||fWYdd}~XnXWdXqWXdS) Nrb:sREGISTERs UNREGISTERzunrecognized command %rzRsemaphore_tracker: There appear to be %d leaked semaphores to clean up at shutdownr"zsemaphore_tracker: %r: %s)signalSIGINTSIG_IGNSIGTERMrstdinstdoutrrsetopenstripsplitaddremove RuntimeError excepthookexc_infowarningswarnr%decode_multiprocessing sem_unlink)fdfcachelinerr!errrmain]sJ          .rH)rr/rr r>rArr__all__objectrZ_semaphore_trackerrrrrrHrrrrs      ;