Kaynağa Gözat

clear need_locks in child after fork

the child is single-threaded, but may still need to synchronize with
last changes made to memory by another thread in the parent, so set
need_locks to -1 whereby the next lock-taker will drop to 0 and
prevent further barriers/locking.
Rich Felker 4 yıl önce
ebeveyn
işleme
8ed2bd8bfc
1 değiştirilmiş dosya ile 1 ekleme ve 0 silme
  1. 1 0
      src/process/fork.c

+ 1 - 0
src/process/fork.c

@@ -30,6 +30,7 @@ pid_t fork(void)
 		self->next = self->prev = self;
 		__thread_list_lock = 0;
 		libc.threads_minus_1 = 0;
+		if (libc.need_locks) libc.need_locks = -1;
 	}
 	__restore_sigs(&set);
 	__fork_handler(!ret);