Merge pull request #956 from ixjlyons/fix-exit-oserror
Handle invalid file descriptor in exit
This commit is contained in:
commit
a4fe86a52d
|
@ -369,8 +369,12 @@ def exit():
|
||||||
## close file handles
|
## close file handles
|
||||||
if sys.platform == 'darwin':
|
if sys.platform == 'darwin':
|
||||||
for fd in range(3, 4096):
|
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)
|
os.close(fd)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
else:
|
else:
|
||||||
os.closerange(3, 4096) ## just guessing on the maximum descriptor count..
|
os.closerange(3, 4096) ## just guessing on the maximum descriptor count..
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
import os, sys, subprocess, tempfile
|
import os
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
import six
|
import six
|
||||||
import pytest
|
import pytest
|
||||||
|
import textwrap
|
||||||
|
import time
|
||||||
|
|
||||||
code = """
|
code = """
|
||||||
import sys
|
import sys
|
||||||
|
@ -14,6 +19,25 @@ w = pg.{classname}({args})
|
||||||
skipmessage = ('unclear why this test is failing. skipping until someone has'
|
skipmessage = ('unclear why this test is failing. skipping until someone has'
|
||||||
' time to fix it')
|
' 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)
|
@pytest.mark.skipif(True, reason=skipmessage)
|
||||||
def test_exit_crash():
|
def test_exit_crash():
|
||||||
# For each Widget subclass, run a simple python script that creates an
|
# For each Widget subclass, run a simple python script that creates an
|
||||||
|
@ -40,3 +64,15 @@ def test_exit_crash():
|
||||||
assert proc.wait() == 0
|
assert proc.wait() == 0
|
||||||
|
|
||||||
os.remove(tmp)
|
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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user