diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-05-27 00:59:43 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-05-27 00:59:43 +0200 |
commit | 3e567afed56b92325150f76c6f36646184d6a650 (patch) | |
tree | 200a7c3408faf488cabb5b908229cddc659ceaa7 /sys/src/libregexp/regexec.c | |
parent | 257c7e958ef125ec12cc218519ce56f767eb112d (diff) |
kernel: fix sysexec() error handling compiler problem, sysrendez() busyloop
the variables elem and file0 and commited are explicitely
set to avoid that they get freed in ther waserror() handlers.
but it turns out the compiler optimizes this out as he
thinks the variables arent used any further. (the compiler
is not aware of the waserror() / longjmp() semantics).
rearrange the code to account for this. instead of using
a local variable to check for point of no return (commited),
we use up->seg[SSEG] to figure it out.
for file0 and elem, we just rearrange the code. elem can be
checked in the error handler if it was already assigned to
up->text, and file0 is just free()'d after the poperror().
remove silly busy loop in sysrendez. it is not needed.
dequeueproc() will make sure that the process has come to
rest.
Diffstat (limited to 'sys/src/libregexp/regexec.c')
0 files changed, 0 insertions, 0 deletions