Thread-Sicherheits-Albtraum: Ein mysteriöser Absturz auf ARM64, selbst mit sicherem Rust
Während des Portierens von Netzwerk-E/A-Code von Python zu Rust in EdgeDB trat ein mysteriöser Absturz auf ARM64-Plattformen auf. Anfangs wurde ein Deadlock vermutet, doch die Ursache war letztendlich ein threadsicherheits-unsicheres Verhalten in den Funktionen `setenv` und `getenv`. Auf ARM64 verwendet die `openssl-probe`-Bibliothek `setenv`, um Umgebungsvariablen zu setzen, während ein anderer Thread gleichzeitig `getenv` aufruft. Dies führt zu einer Neuzuweisung des `environ`-Arrays und damit zu einem Absturz. Die Lösung bestand darin, das TLS-Backend von reqwest von rust-native-tls zu rustls zu wechseln. Dies verdeutlicht, dass selbst in speichergesichertem Rust Interaktionen mit der C-Standardbibliothek immer noch Thread-Sicherheitsprobleme verursachen können.
Mehr lesen