Merge pull request #956 from ixjlyons/fix-exit-oserror

Handle invalid file descriptor in exit
This commit is contained in:
Ogi Moore 2019-06-24 11:15:11 -07:00 committed by GitHub
commit a4fe86a52d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 2 deletions

View File

@ -369,8 +369,12 @@ def exit():
## close file handles
if sys.platform == 'darwin':
for fd in range(3, 4096):
if fd not in [7]: # trying to close 7 produces an illegal instruction on the Mac.
if fd in [7]: # trying to close 7 produces an illegal instruction on the Mac.
continue
try:
os.close(fd)
except OSError:
pass
else:
os.closerange(3, 4096) ## just guessing on the maximum descriptor count..

View File

@ -1,7 +1,12 @@
import os, sys, subprocess, tempfile
import os
import sys
import subprocess
import tempfile
import pyqtgraph as pg
import six
import pytest
import textwrap
import time
code = """
import sys
@ -14,6 +19,25 @@ w = pg.{classname}({args})
skipmessage = ('unclear why this test is failing. skipping until someone has'
' time to fix it')
def call_with_timeout(*args, **kwargs):
"""Mimic subprocess.call with timeout for python < 3.3"""
wait_per_poll = 0.1
try:
timeout = kwargs.pop('timeout')
except KeyError:
timeout = 10
rc = None
p = subprocess.Popen(*args, **kwargs)
for i in range(int(timeout/wait_per_poll)):
rc = p.poll()
if rc is not None:
break
time.sleep(wait_per_poll)
return rc
@pytest.mark.skipif(True, reason=skipmessage)
def test_exit_crash():
# For each Widget subclass, run a simple python script that creates an
@ -40,3 +64,15 @@ def test_exit_crash():
assert proc.wait() == 0
os.remove(tmp)
def test_pg_exit():
# test the pg.exit() function
code = textwrap.dedent("""
import pyqtgraph as pg
app = pg.mkQApp()
pg.plot()
pg.exit()
""")
rc = call_with_timeout([sys.executable, '-c', code], timeout=5)
assert rc == 0