spotcgi: correctly kill ltl3ba on timeout
* python/spot/__init__.py (automata): Do not create a session for every command, this is only needed if automata() is run with a timeout parameter. * python/ajax/spotcgi.in: Adjust exclude the main process from the process group, so that only children are killed on SIGALRM. * NEWS: Mention the bug.
This commit is contained in:
parent
55eae0d8bc
commit
cd34827510
3 changed files with 18 additions and 6 deletions
|
|
@ -164,7 +164,7 @@ def finish(kill = False):
|
|||
|
||||
if kill:
|
||||
# Kill all children
|
||||
os.kill(0, signal.SIGTERM)
|
||||
os.killpg(child, signal.SIGTERM)
|
||||
# Should we prune the cache?
|
||||
stamp = imgdir + '/cache.stamp'
|
||||
now = time.time()
|
||||
|
|
@ -217,7 +217,7 @@ it has been running for too long.</font> Please try a shorter formula,
|
|||
or different options.
|
||||
If you want to benchmark big formulae it is
|
||||
better to install Spot on your own computer.</p>\n""")
|
||||
finish(kill = True)
|
||||
finish(kill=True)
|
||||
|
||||
def run_dot(basename, ext):
|
||||
outname = basename + '.' + ext
|
||||
|
|
@ -409,7 +409,6 @@ if output_type == 'v3':
|
|||
|
||||
spot.unblock_signal(signal.SIGALRM)
|
||||
spot.unblock_signal(signal.SIGTERM)
|
||||
os.setpgrp()
|
||||
|
||||
child = os.fork()
|
||||
if child != 0:
|
||||
|
|
@ -425,6 +424,8 @@ if child != 0:
|
|||
os.waitpid(child, 0)
|
||||
exit(0)
|
||||
|
||||
os.setpgrp()
|
||||
|
||||
# Global options
|
||||
utf8 = False
|
||||
for g in form.getlist('g'):
|
||||
|
|
@ -608,7 +609,7 @@ elif translator == 'l3':
|
|||
g = spot.relabel(f, spot.Pnn, m)
|
||||
args.extend(['-f', "'" + spot.str_spin_ltl(g) + "' |"])
|
||||
try:
|
||||
automaton = spot.automaton(" ".join(args))
|
||||
automaton = spot.automaton(" ".join(args), no_sid=True)
|
||||
except RuntimeError as e:
|
||||
unbufprint('<div class="error">{}</div>'.format(e))
|
||||
finish()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue