- if (syscall6(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],
+ if (si->si_code > 0 || si->si_pid != self->pid ||
+ 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) {
+ __wait(&rs.hold, 0, 1, 1);
+ return;
+ }
+
+ if (syscall(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],