]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
In original kern_execve() code, at the start of the function, it forces
authordavidxu <davidxu@FreeBSD.org>
Wed, 6 Oct 2004 00:40:41 +0000 (00:40 +0000)
committerdavidxu <davidxu@FreeBSD.org>
Wed, 6 Oct 2004 00:40:41 +0000 (00:40 +0000)
commit793ea9317eb55a19242d9f6648f3a2f128b8934c
tree432efd811bd18d95f48da3533a80d28fea1512ec
parentc2f56cb723c50c2fdc1fdc81aa886ca10d05c837
In original kern_execve() code, at the start of the function, it forces
all other threads to suicide, problem is execve() could be failed, and
a failed execve() would change threaded process to unthreaded, this side
effect is unexpected.
The new code introduces a new single threading mode SINGLE_BOUNDARY, in
the mode, all threads should suspend themself at user boundary except
the singler. we can not use SINGLE_NO_EXIT because we want to start from
a clean state if execve() is successful, suspending other threads at unknown
point and later resuming them from there and forcing them to exit at user
boundary may cause the process to start from a dirty state. If execve() is
successful, current thread upgrades to SINGLE_EXIT mode and forces other
threads to suicide at user boundary, otherwise, other threads will be resumed
and their interrupted syscall will be restarted.

Reviewed by: julian
sys/kern/kern_exec.c
sys/kern/kern_thread.c
sys/sys/proc.h