2 पॉइंट द्वारा GN⁺ 2024-11-12 | 1 टिप्पणियां | WhatsApp पर शेयर करें

Steam क्लाइंट की स्थिरता में सुधार

  • पृष्ठभूमि: 5 नवंबर के Steam क्लाइंट अपडेट में Linux पर होने वाले कुछ सामान्य क्रैश ठीक किए गए। इनमें सबसे अधिक प्रभाव डालने वाला बदलाव setenv और getenv फ़ंक्शनों के उपयोग के तरीके में परिवर्तन था.

  • समस्या: setenv Linux में एक असुरक्षित 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 टिप्पणियां

 
GN⁺ 2024-11-12
Hacker News टिप्पणियाँ
  • Red Hat के graphics stack की stability समस्या के कारण patch की समीक्षा चल रही है

    • getenv की thread safety fix के glibc 2.41 में शामिल होने की संभावना काफी अधिक है
    • setenv को संभालना अपेक्षाकृत आसान है क्योंकि यह पहले से environment strings को free नहीं करता
    • unsetenv concurrency समस्या के कारण जटिल है
    • getenv में locking नहीं जोड़ने की वजह asynchronous signal safety बनाए रखना है
    • vfork+execve के कारण memory leak से बचते हुए environment handling को बदलना विवादास्पद है
  • Linux पर Steam का ठीक से चलना सराहनीय है

  • सबसे अच्छा तरीका है boot के समय environment variables पढ़ना और setenv का उपयोग न करना

    • नया process बनाते समय मौजूदा environment को clone करके नए values update करने चाहिए
    • getenv/setenv को IPC messaging mechanism की तरह इस्तेमाल करना समस्या पैदा कर सकता है
  • इस बात पर सवाल है कि क्या setenv Linux API है

    • setenv POSIX में परिभाषित है और Linux kernel नहीं बल्कि user space में implement किया जाता है
  • सवाल है कि क्या ऐसा कोई मामला होता है जहाँ program एक thread में setenv कॉल करे और दूसरे thread में उसका प्रभाव चाहे

    • GLIBC खतरनाक functions का अच्छा documentation देता है, इसलिए locking/copying जोड़ा जा सकता है
  • Steam के "no connection" की शिकायत करने की समस्या है

    • कई बार 'Retry' बटन दबाने पर यह चलने लगता है, लेकिन यह असुविधाजनक है
  • Steam client और Linux programming पर मिली जानकारी दिलचस्प है

    • यह समझ आता है कि release notes बहुत विस्तृत क्यों नहीं होते, लेकिन "general crash fixes" कहना काफी कम करके बताना है
  • glibc में समस्या सुलझाने के लिए functionality के कुछ trade-offs करने पड़ सकते हैं

    • अगर लंबे समय में कोई उचित प्रस्ताव बनाया जा सके, तो उसे आगे बढ़ाया जा सकता है
  • Steam client की rendering performance तब खराब हो जाती है जब mouse window के अंदर होता है

  • Linux Steam client में एक लंबे समय से चला आ रहा bug है

    • Steam को एक दिन से अधिक चलाने पर window handles कम पड़ जाते हैं, जिससे नए graphical applications/windows नहीं खुल पाते
    • Steam Chat इस्तेमाल करने पर यह समस्या और जल्दी होती है
    • यह समस्या GitHub पर documented है, लेकिन बिना कारण बंद कर दी गई
    • व्यक्तिगत रूप से हर दिन Steam restart करना पड़ता है
    • यह समस्या KDE/Wayland और X11 दोनों में देखी गई है