diff options
Diffstat (limited to 'sys/compat/linux/linux_emul.c')
-rw-r--r-- | sys/compat/linux/linux_emul.c | 12 |
1 files changed, 8 insertions, 4 deletions
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); } |