|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
#
|
|
# Filename: package/.../musl/convert-hangs-to-crashes.patch
|
|
# Copyright (C) 2020 The OpenSDE Project
|
|
#
|
|
# More information can be found in the files COPYING and README.
|
|
#
|
|
# This patch file is dual-licensed. It is available under the license the
|
|
# patched project is licensed under, as long as it is an OpenSource license
|
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
|
# of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 2 of the License, or (at your option) any later
|
|
# version.
|
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
|
|
|
diff --git a/src/process/fork.c b/src/process/fork.c
|
|
index 7e984ff8..c4fa7510 100644
|
|
--- a/src/process/fork.c
|
|
+++ b/src/process/fork.c
|
|
@@ -30,7 +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;
|
|
+ if (libc.need_locks > 0) libc.need_locks = -2;
|
|
}
|
|
__restore_sigs(&set);
|
|
__fork_handler(!ret);
|
|
diff --git a/src/thread/__lock.c b/src/thread/__lock.c
|
|
index 60eece49..75412cc8 100644
|
|
--- a/src/thread/__lock.c
|
|
+++ b/src/thread/__lock.c
|
|
@@ -24,6 +24,7 @@ void __lock(volatile int *l)
|
|
int current = a_cas(l, 0, INT_MIN + 1);
|
|
if (need_locks < 0) libc.need_locks = 0;
|
|
if (!current) return;
|
|
+ if (need_locks < -1) a_crash();
|
|
/* A first spin loop, for medium congestion. */
|
|
for (unsigned i = 0; i < 10; ++i) {
|
|
if (current < 0) current -= INT_MIN + 1;
|