Peningkatan stabilitas klien Steam di Linux
(ttimo.typepad.com)Peningkatan stabilitas klien Steam
-
Latar belakang: Pada pembaruan klien Steam tanggal 5 November, beberapa crash umum di Linux telah diperbaiki. Di antaranya, yang paling berdampak adalah perubahan cara penggunaan fungsi
setenvdangetenv. -
Masalah:
setenvadalah API yang tidak aman di Linux, dan dapat menimbulkan masalah saat digunakan dalam lingkungan multithread. Setelah pemanggilangetenv, crash seperti SIGABRT dapat terjadi di thread lain. -
Solusi:
- Sebagian besar pemanggilan
setenvdihapus, lalu direfaktor agar environment diteruskan saat pembuatan proses dengan menggunakanexecvpe. - Pemanggilan di-cache untuk mengurangi ketergantungan pada
getenv. - Untuk kasus penggunaan
setenvyang tersisa, diperkenalkan 'manajer environment' yang mengalokasikan buffer nilai yang cukup besar lebih awal saat startup.
- Sebagian besar pemanggilan
-
Hasil: Perubahan ini secara signifikan menurunkan frekuensi terjadinya SIGABRT. Namun, ini bukan solusi yang sempurna, dan masih ada risiko crash jika library eksternal memanggil
setenv. -
Rencana ke depan: glibc sedang meneliti cara menyelesaikan masalah ini dengan tetap mempertahankan keamanan sinyal asinkron sambil menyinkronkan penggunaan
envp. Pekerjaan ini kompleks, tetapi dalam jangka panjang mereka berencana mengusulkan solusi tanpa menyimpang dari spesifikasi POSIX.
1 komentar
Komentar Hacker News
Patch sedang ditinjau karena masalah stabilitas stack grafis Red Hat
getenvkemungkinan besar akan masuk ke glibc 2.41setenvsudah lebih mudah ditangani karena tidak membebaskan string lingkunganunsetenvrumit karena masalah konkurensigetenvadalah untuk mempertahankan keamanan sinyal asinkronvfork+execve, sulit menghindari kebocoran memori sehingga perubahan pada penanganan environment menjadi kontroversialBersyukur Steam berjalan dengan baik di Linux
Praktik terbaik adalah membaca variabel lingkungan saat boot dan tidak menggunakan
setenvgetenv/setenvsebagai mekanisme pesan IPC bisa menimbulkan masalahAda pertanyaan apakah
setenvmerupakan API Linuxsetenvdidefinisikan dalam POSIX dan diimplementasikan di ruang pengguna, bukan di kernel LinuxAda pertanyaan apakah ada kasus saat program memanggil
setenvdi satu thread dan menginginkan efeknya di thread lainAda masalah Steam mengeluh tidak ada koneksi
Wawasan tentang klien Steam dan pemrograman Linux ini menarik
Untuk memperbaiki masalah di glibc, mungkin diperlukan kompromi fungsi
Kinerja rendering klien Steam buruk saat mouse berada di dalam jendela
Ada bug lama yang terus bertahan di klien Steam Linux