Don't throw KeyboardInterrupt from a child process.
This should fix #1327.
This commit is contained in:
Родитель
5d3ff92c55
Коммит
0939e80a79
|
@ -44,20 +44,25 @@ MIN_CHUNK_SIZE = 1024*1024
|
|||
MAX_CHUNK_SIZE = float(os.environ.get('EMSCRIPT_MAX_CHUNK_SIZE') or 'inf') # configuring this is just for debugging purposes
|
||||
|
||||
def process_funcs((i, funcs, meta, settings_file, compiler, forwarded_file, libraries, compiler_engine, temp_files, DEBUG)):
|
||||
funcs_file = temp_files.get('.func_%d.ll' % i).name
|
||||
f = open(funcs_file, 'w')
|
||||
f.write(funcs)
|
||||
funcs = None
|
||||
f.write('\n')
|
||||
f.write(meta)
|
||||
f.close()
|
||||
out = jsrun.run_js(
|
||||
compiler,
|
||||
engine=compiler_engine,
|
||||
args=[settings_file, funcs_file, 'funcs', forwarded_file] + libraries,
|
||||
stdout=subprocess.PIPE,
|
||||
cwd=path_from_root('src'))
|
||||
tempfiles.try_delete(funcs_file)
|
||||
try:
|
||||
funcs_file = temp_files.get('.func_%d.ll' % i).name
|
||||
f = open(funcs_file, 'w')
|
||||
f.write(funcs)
|
||||
funcs = None
|
||||
f.write('\n')
|
||||
f.write(meta)
|
||||
f.close()
|
||||
out = jsrun.run_js(
|
||||
compiler,
|
||||
engine=compiler_engine,
|
||||
args=[settings_file, funcs_file, 'funcs', forwarded_file] + libraries,
|
||||
stdout=subprocess.PIPE,
|
||||
cwd=path_from_root('src'))
|
||||
except KeyboardInterrupt:
|
||||
# Python 2.7 seems to lock up when a child process throws KeyboardInterrupt
|
||||
raise Exception()
|
||||
finally:
|
||||
tempfiles.try_delete(funcs_file)
|
||||
if DEBUG: print >> sys.stderr, '.'
|
||||
return out
|
||||
|
||||
|
|
|
@ -102,16 +102,20 @@ start_asm_marker = '// EMSCRIPTEN_START_ASM\n'
|
|||
end_asm_marker = '// EMSCRIPTEN_END_ASM\n'
|
||||
|
||||
def run_on_chunk(command):
|
||||
filename = command[2] # XXX hackish
|
||||
#print >> sys.stderr, 'running js optimizer command', ' '.join(command), '""""', open(filename).read()
|
||||
output = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
|
||||
assert len(output) > 0 and not output.startswith('Assertion failed'), 'Error in js optimizer: ' + output
|
||||
filename = temp_files.get(os.path.basename(filename) + '.jo.js').name
|
||||
f = open(filename, 'w')
|
||||
f.write(output)
|
||||
f.close()
|
||||
if DEBUG and not shared.WINDOWS: print >> sys.stderr, '.' # Skip debug progress indicator on Windows, since it doesn't buffer well with multiple threads printing to console.
|
||||
return filename
|
||||
try:
|
||||
filename = command[2] # XXX hackish
|
||||
#print >> sys.stderr, 'running js optimizer command', ' '.join(command), '""""', open(filename).read()
|
||||
output = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
|
||||
assert len(output) > 0 and not output.startswith('Assertion failed'), 'Error in js optimizer: ' + output
|
||||
filename = temp_files.get(os.path.basename(filename) + '.jo.js').name
|
||||
f = open(filename, 'w')
|
||||
f.write(output)
|
||||
f.close()
|
||||
if DEBUG and not shared.WINDOWS: print >> sys.stderr, '.' # Skip debug progress indicator on Windows, since it doesn't buffer well with multiple threads printing to console.
|
||||
return filename
|
||||
except KeyboardInterrupt:
|
||||
# avoid throwing keyboard interrupts from a child process
|
||||
raise Exception()
|
||||
|
||||
def run_on_js(filename, passes, js_engine, jcache, source_map=False, extra_info=None):
|
||||
if isinstance(jcache, bool) and jcache: jcache = shared.JCache
|
||||
|
|
Загрузка…
Ссылка в новой задаче