मैं एक अपाचे मॉड्यूल में dlopen() का उपयोग कर रहा हूं जिसे मैं लिख रहा हूं ताकि मेरे मॉड्यूल के लिए प्लगइन सिस्टम हो। मैंने पाया है कि अगर मैं अपने मॉड्यूल को संकलित करता हूं, मेरी प्लगइन संकलित करता हूं, और अपाचे शुरू करता हूं, तो सब कुछ peachy-उत्सुक काम करता है।_dl_close Assertion विफलता
यदि, हालांकि, मैंने यह सब करने के बाद, मैं अपनी प्लगइन को दोबारा जोड़ता हूं, (प्लगइन कोड में एक छोटा बदलाव या दो बना देता हूं), मेरे अगले पृष्ठ लोड से अपाचे को segfault का कारण बन जाएगा। प्रत्येक अनुवर्ती अनुरोध फिर से ठीक काम करता है। इस प्रकार, यह संकलन के तुरंत बाद पहला पृष्ठ लोड होता है जो segfault का कारण बनता है।
मैं और आज (मैं सी डिबगिंग में महान नहीं कर रहा हूँ) कुछ दिनों के लिए इस से निपटने की कोशिश कर रहा हूँ, मैं अपने अपाचे त्रुटि लॉग में इस पर ध्यान:
Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
किसी को भी किसी भी विचार क्या है चल रहा? क्या इसका मतलब यह मेरा कोड नहीं है और मैं एक प्रेत बग शिकार कर रहा हूं? मुझे काफी विश्वास है कि मैं प्रत्येक कॉल के लिए dlopen() को dlcose() कहते हैं। हालांकि, यह विशेष बग/segfault तब होता है जब मैं एकल प्रक्रिया मोड में अपाचे चलाता हूं और पृष्ठ को तुरंत रीफ्रेश करना प्रारंभ करता हूं।
प्रतिक्रिया के लिए धन्यवाद! मैं RTLD_NODELETE का उपयोग नहीं कर रहा हूं। मुझे पूरा यकीन है कि मैं प्रत्येक कॉल के लिए dlopen (हालांकि कोड में अलग-अलग बिंदुओं पर) के लिए dllcose बुला रहा हूँ।) मैं एक और बार जांचूँगा। –