os_fork: do not attempt to cork the active thread.
This commit is contained in:
parent
3231c62a66
commit
e3dcce2069
|
@ -35,6 +35,7 @@ Support for operating in a mixed threading/forking environment.
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
import sys
|
import sys
|
||||||
|
import threading
|
||||||
import weakref
|
import weakref
|
||||||
|
|
||||||
import mitogen.core
|
import mitogen.core
|
||||||
|
@ -157,6 +158,7 @@ class Corker(object):
|
||||||
held. This will not return until each thread acknowledges it has ceased
|
held. This will not return until each thread acknowledges it has ceased
|
||||||
execution.
|
execution.
|
||||||
"""
|
"""
|
||||||
|
current = threading.currentThread()
|
||||||
s = mitogen.core.b('CORK') * ((128 // 4) * 1024)
|
s = mitogen.core.b('CORK') * ((128 // 4) * 1024)
|
||||||
self._rsocks = []
|
self._rsocks = []
|
||||||
|
|
||||||
|
@ -164,12 +166,14 @@ class Corker(object):
|
||||||
# participation of a broker in order to complete.
|
# participation of a broker in order to complete.
|
||||||
for pool in self.pools:
|
for pool in self.pools:
|
||||||
if not pool.closed:
|
if not pool.closed:
|
||||||
for x in range(pool.size):
|
for th in pool._threads:
|
||||||
self._cork_one(s, pool)
|
if th != current:
|
||||||
|
self._cork_one(s, pool)
|
||||||
|
|
||||||
for broker in self.brokers:
|
for broker in self.brokers:
|
||||||
if broker._alive:
|
if broker._alive:
|
||||||
self._cork_one(s, broker)
|
if broker._thread != current:
|
||||||
|
self._cork_one(s, broker)
|
||||||
|
|
||||||
# Pause until we can detect every thread has entered write().
|
# Pause until we can detect every thread has entered write().
|
||||||
for rsock in self._rsocks:
|
for rsock in self._rsocks:
|
||||||
|
|
Loading…
Reference in New Issue