summaryrefslogtreecommitdiffstats
path: root/sys/compat/linux/linux_emul.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/compat/linux/linux_emul.c')
-rw-r--r--sys/compat/linux/linux_emul.c12
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);
}
OpenPOWER on IntegriCloud