From 902cc4aebabcbc802991bdb0b03f04e600fd8452 Mon Sep 17 00:00:00 2001 From: netchild Date: Fri, 23 Feb 2007 22:39:26 +0000 Subject: MFp4 (114193 (i386 part), 114194, 114195, 114200): - Dont "return" in linux_clone() after we forked the new process in a case of problems. - Move the copyout of p2->p_pid outside the emul_lock coverage in linux_clone(). - Cache the em->pdeath_signal in a local variable and move the copyout out of the emul_lock coverage. - Move the free() out of the emul_shared_lock coverage in a preparation to switch emul_lock to non-sleepable lock (mutex). Submitted by: rdivacky --- sys/compat/linux/linux_emul.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'sys/compat/linux/linux_emul.c') diff --git a/sys/compat/linux/linux_emul.c b/sys/compat/linux/linux_emul.c index 2a42f70..c2f6db1 100644 --- a/sys/compat/linux/linux_emul.c +++ b/sys/compat/linux/linux_emul.c @@ -186,9 +186,11 @@ linux_proc_exit(void *arg __unused, struct proc *p) LIST_REMOVE(em, threads); em->shared->refs--; - if (em->shared->refs == 0) + if (em->shared->refs == 0) { + EMUL_SHARED_WUNLOCK(&emul_shared_lock); free(em->shared, M_LINUX); - EMUL_SHARED_WUNLOCK(&emul_shared_lock); + } else + EMUL_SHARED_WUNLOCK(&emul_shared_lock); if (child_clear_tid != NULL) { struct linux_sys_futex_args cup; @@ -273,9 +275,11 @@ linux_proc_exec(void *arg __unused, struct proc *p, struct image_params *imgp) PROC_UNLOCK(p); em->shared->refs--; - if (em->shared->refs == 0) + if (em->shared->refs == 0) { + EMUL_SHARED_WUNLOCK(&emul_shared_lock); free(em->shared, M_LINUX); - EMUL_SHARED_WUNLOCK(&emul_shared_lock); + } else + EMUL_SHARED_WUNLOCK(&emul_shared_lock); free(em, M_LINUX); } -- cgit v1.1