Ein niedlicher Bug in HyperQueue: SIGTERM und das zehnsekündige Geheimnis
Ein merkwürdiger Bug tauchte in HyperQueue auf, einem verteilten Task-Scheduler, der in Rust geschrieben ist. Aufgaben, insbesondere solche, die länger als 10 Sekunden schlafen, wurden auf mysteriöse Weise beendet. Das Debugging ergab eine scheinbar harmlose Änderung: das Auslagern des Prozesserzeugungsvorgangs auf `tokio::task::spawn_blocking`. Dies, kombiniert mit `PR_SET_PDEATHSIG` (das SIGTERM beim Tod des übergeordneten Prozesses sendet), verursachte das Problem. Der von `spawn_blocking` erzeugte Worker-Thread wurde nach Inaktivität von Tokio bereinigt, wodurch das SIGTERM-Signal ausgelöst wurde. Der Fehler wurde behoben, indem die Optimierung rückgängig gemacht wurde, was die subtilen Interaktionen zwischen Parallelität, Systemaufrufen und Thread-Management hervorhebt.