- if (syscall6(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],
+ if (!rs.hold || rs.cnt == libc.threads_minus_1) return;
+
+ /* Threads which have already decremented themselves from the
+ * thread count must not increment rs.cnt or otherwise act. */
+ if (self->dead) {
+ sigfillset(&((ucontext_t *)ctx)->uc_sigmask);
+ return;
+ }
+
+ if (syscall(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],