aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-15 10:26:28 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-15 10:26:28 -0700
commit85d286d05631104de01826dcab2465b29ca3c358 (patch)
treeb24e90428b83aed8713e70517afd68fbb057a459
parentb52b41fa588236ead80a2bffbfb88d5d8c8d225e (diff)
parent0939e80a79bc7a68e82b9b116eee5aea860f7259 (diff)
Merge pull request #1357 from int3/keyboard-interrupt
Handle keyboard interrupt in child processes.
-rwxr-xr-xemscripten.py33
-rw-r--r--tools/js_optimizer.py24
2 files changed, 33 insertions, 24 deletions
diff --git a/emscripten.py b/emscripten.py
index d9367566..9a2abb9a 100755
--- a/emscripten.py
+++ b/emscripten.py
@@ -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
diff --git a/tools/js_optimizer.py b/tools/js_optimizer.py
index a4e1ca6c..4e7d5474 100644
--- a/tools/js_optimizer.py
+++ b/tools/js_optimizer.py
@@ -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