हम 10.6 से 10.8 तक एक ऐप पोर्ट कर रहे हैं। मैं ऐप में लोड dylib देख रहा हूँ। मुझे कचरा संग्रह कार्य कतार में निम्नलिखित संदेश के साथ बहुत असामान्य दुर्घटना का सामना करना पड़ रहा है।कचरा संग्रह कार्य कतार का क्रैश यदि डाइलिब लोड किया गया है
malloc: Thread::suspend(): unable to suspend a thread: err = 268435459, Thread 0x111000000: _pthread = 0x108129000, _thread = 0x8b07, _stack_base = 0x108129000, enlivening on, 0 local blocks
आवेदन के लिए GCC_ENABLE_OBJC_GC = required
सेट है। यदि मेरे पास dylib में GCC_ENABLE_OBJC_GC = required
है तो यह अभी भी दुर्घटनाग्रस्त हो जाएगा। मैं आवेदन में कचरा कलेक्टर बंद नहीं कर सकता। मुझे इसे अपने डिलिब से दुर्घटनाग्रस्त करना है।
क्रैश के कारण यह पता चला है कि कचरा कलेक्टर थ्रेड को निलंबित करने में सक्षम नहीं है। (जैसा कि यह लॉग में कहता है)। यह धागा thread_create() का उपयोग करके बनाया गया है। यदि मैं डाइलिब के निर्माता में लूप (नींद के साथ) अनिश्चितकालीन रखता हूं, तो मुझे क्रैश नहीं होता है। जब रचनाकार ने अपना निष्पादन पूरा कर लिया है तो मुझे दुर्घटना हो रही है।
क्या कचरा कलेक्टर को बताने की कोशिश करने और थ्रेड को निलंबित करने का उनका तरीका है? या धागे की संदर्भ गणना बढ़ाने के लिए? या कचरा कलेक्टर को रोकने के लिए मैं कुछ भी कर सकता हूं जो मेरे डाइलिब कोड में हस्तक्षेप नहीं करता है।
आप स्पष्ट कर सकते हैं: आप अपनी परियोजना के लिए करना चाहते हैं जीसी उपयोग करने के लिए? या नहीं? मेरा पहला अनुमान यह है कि आप जिस डायलीब को लोड कर रहे हैं वह जीसी का उपयोग करने के लिए बनाया गया था लेकिन आपका मुख्य एप्लीकेशन नहीं था। – ipmcc
मैं सिर्फ dylib लिख रहा हूँ और dylib क्रैश कारणों को लोड कर रहा हूँ। आवेदन जीसी (GCC_ENABLE_OBJC_CC = आवश्यक) का उपयोग करने के लिए बनाया गया था। यदि मैं डाइलिब पर ध्वज को सक्षम या डिब्बे करता हूं, तो इससे कोई फर्क नहीं पड़ता। यह अभी भी दुर्घटनाग्रस्त है। – MacGeek
आप दोनों के लिए किस कंपाइलर का उपयोग करते हैं? जीसीसी संस्करण? इसके अलावा: तैनाती लक्ष्य, आधार एसडीके क्या हैं? –