Linux में Steam क्लाइंट की स्थिरता में सुधार
(ttimo.typepad.com)Steam क्लाइंट की स्थिरता में सुधार
-
पृष्ठभूमि: 5 नवंबर के Steam क्लाइंट अपडेट में Linux पर होने वाले कुछ सामान्य क्रैश ठीक किए गए। इनमें सबसे अधिक प्रभाव डालने वाला बदलाव
setenvऔरgetenvफ़ंक्शनों के उपयोग के तरीके में परिवर्तन था. -
समस्या:
setenvLinux में एक असुरक्षित API है, और multi-threaded environment में इसका उपयोग करने पर समस्याएँ हो सकती हैं।getenvकॉल के बाद किसी दूसरे thread में SIGABRT जैसे क्रैश हो सकते हैं. -
समाधान:
- अधिकांश
setenvकॉल हटा दिए गए, और process creation के समय environment पास करने के लिएexecvpeका उपयोग करते हुए refactor किया गया. getenvपर निर्भरता कम करने के लिए कॉल्स को cache किया गया.- बचे हुए
setenvउपयोग मामलों के लिए एक 'environment manager' जोड़ा गया, जो startup पर पहले से पर्याप्त बड़ा value buffer allocate करता है.
- अधिकांश
-
परिणाम: इन बदलावों से SIGABRT होने की आवृत्ति में काफी कमी आई। हालांकि, यह पूरी तरह का समाधान नहीं है, और अगर external libraries
setenvकॉल करती हैं तो क्रैश का जोखिम अब भी बना रहता है. -
आगे की योजना: glibc में इस समस्या को हल करने के लिए
envpउपयोग के साथ synchronization बनाए रखते हुए async-signal-safety को कायम रखने के तरीकों पर शोध चल रहा है। यह काम जटिल है, लेकिन लंबी अवधि में POSIX specification से बाहर गए बिना समाधान प्रस्तावित करने की योजना है.
1 टिप्पणियां
Hacker News टिप्पणियाँ
Red Hat के graphics stack की stability समस्या के कारण patch की समीक्षा चल रही है
getenvकी thread safety fix के glibc 2.41 में शामिल होने की संभावना काफी अधिक हैsetenvको संभालना अपेक्षाकृत आसान है क्योंकि यह पहले से environment strings को free नहीं करताunsetenvconcurrency समस्या के कारण जटिल हैgetenvमें locking नहीं जोड़ने की वजह asynchronous signal safety बनाए रखना हैvfork+execveके कारण memory leak से बचते हुए environment handling को बदलना विवादास्पद हैLinux पर Steam का ठीक से चलना सराहनीय है
सबसे अच्छा तरीका है boot के समय environment variables पढ़ना और
setenvका उपयोग न करनाgetenv/setenvको IPC messaging mechanism की तरह इस्तेमाल करना समस्या पैदा कर सकता हैइस बात पर सवाल है कि क्या
setenvLinux API हैsetenvPOSIX में परिभाषित है और Linux kernel नहीं बल्कि user space में implement किया जाता हैसवाल है कि क्या ऐसा कोई मामला होता है जहाँ program एक thread में
setenvकॉल करे और दूसरे thread में उसका प्रभाव चाहेSteam के "no connection" की शिकायत करने की समस्या है
Steam client और Linux programming पर मिली जानकारी दिलचस्प है
glibc में समस्या सुलझाने के लिए functionality के कुछ trade-offs करने पड़ सकते हैं
Steam client की rendering performance तब खराब हो जाती है जब mouse window के अंदर होता है
Linux Steam client में एक लंबे समय से चला आ रहा bug है