Fix #15880: Prevent "stalling" when running dev server in background by ignoring SIGTTOU for the duration of tcsetattr.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16326 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Karen Tracey 2011-06-04 15:29:11 +00:00
parent 773e1717c0
commit acbb911ad5
1 changed files with 7 additions and 1 deletions

View File

@ -28,7 +28,7 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import os, sys, time import os, sys, time, signal
try: try:
import thread import thread
@ -78,7 +78,13 @@ def ensure_echo_on():
attr_list = termios.tcgetattr(fd) attr_list = termios.tcgetattr(fd)
if not attr_list[3] & termios.ECHO: if not attr_list[3] & termios.ECHO:
attr_list[3] |= termios.ECHO attr_list[3] |= termios.ECHO
if hasattr(signal, 'SIGTTOU'):
old_handler = signal.signal(signal.SIGTTOU, signal.SIG_IGN)
else:
old_handler = None
termios.tcsetattr(fd, termios.TCSANOW, attr_list) termios.tcsetattr(fd, termios.TCSANOW, attr_list)
if old_handler is not None:
signal.signal(signal.SIGTTOU, old_handler)
def reloader_thread(): def reloader_thread():
ensure_echo_on() ensure_echo_on()