This is a cryptographically signed message in MIME format. --------------ms070303050609050308080505 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Nobu, > At Thu, 10 Jul 2008 03:40:52 +0900, > Charlie Savage wrote in [ruby-core:17706]: >> Hmm. To correctly shut down my extension, I do need to control the >> order in which the objects are freed. Is there any way to do this? And >> have other people run into this issue (seems like it would be common >> when freeing resources allocated from a 3rd party library, in this case >> libxml). > > Which object is the problem? Reference count may be useful. The specifics of this issue are: 1. Open a XML::Document 2. Call Document#find which returns an XML::Node::Set 3. Within libxml, XML::Node::Set maintains a set of pointers to nodes that are owned by the document. 4. Ruby process starts exiting 5. XML::Document is freed 6. XML::Node::Set is freed - but when it iterates over its list of nodes to pointers a segmentation fault occurs. If the order is reversed then there is no problem. It is possible to code around this by having Documents maintain pointers to returned Node::Sets and Node::Sets in turn link back to their parent documents. But that all seems like a big kludge around the fact that the order of free calls is random, even though the Node::Set does have an appropriate mark function. It seems to me this must be a common thing that should have a built-in solution. It would be nice if Ruby could do one mark/sweep/free before shutting down a process. Or if that is too much, then a lighter weight way of saying Object A must be freed before Object B (well, the whole idea of mark and sweep again). In this case, I can't see how reference counting would help.... Charlie --------------ms070303050609050308080505 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJAzCC AtwwggJFoAMCAQICEApLTm3bM9PFZxFEfV6XkZAwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UE BhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMT I1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA4MDUxNDIyMDQwM1oX DTA5MDUxNDIyMDQwM1owQzEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEgMB4G CSqGSIb3DQEJARYRY2Zpc0BzYXZhZ2V4aS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQDl6cmJXyX9A06gcxGBDjFRP0VPx8hbxwelxzsrIMp4pPlo3w3iNRApMM4YZ5z6 5i3ruj/5j/RNWHELiyBIbrufJ/PQBk8/n8vNXiTqdjAhlpMuR/rB/e4XD1rE/7OYwQin3Yhx 7yYOOWJMB4eilBLayyqHBrKE85dn/jOxCo5uO9jf/4Gihv2ocWQWOGFXeKT1PNtSEFcMm8xl mteBXXmZ76eH1Al4qowFRbGrPTyPbhAyu7ssWuOVYcbfH5giOSyLuuXDctZUf4j5bzf3qVqa XBZxNAYLj5T+DDIFBLG1CVvYPsrDmPG7yheodwAdZstusPxAy0mOUMCY9x7ly4rnAgMBAAGj LjAsMBwGA1UdEQQVMBOBEWNmaXNAc2F2YWdleGkuY29tMAwGA1UdEwEB/wQCMAAwDQYJKoZI hvcNAQEFBQADgYEAFUPOGpAmQW6nsAqgLw7QnKC4HtTK39p6jp8ku0vtRGIbHxn5x2u+3JNE hOStGq51vUfhLpritwyTqlX+GVYMPqaSCxtrOLKTVyq525uQMxGlCMuqD0l9CPmDK6rmLIdf GmrPq+2q8vwuc6mhuA4WgtBp2RFCYtDcxFcjSbpy5EkwggLcMIICRaADAgECAhAKS05t2zPT xWcRRH1el5GQMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3 dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJl ZW1haWwgSXNzdWluZyBDQTAeFw0wODA1MTQyMjA0MDNaFw0wOTA1MTQyMjA0MDNaMEMxHzAd BgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIxIDAeBgkqhkiG9w0BCQEWEWNmaXNAc2F2 YWdleGkuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5enJiV8l/QNOoHMR gQ4xUT9FT8fIW8cHpcc7KyDKeKT5aN8N4jUQKTDOGGec+uYt67o/+Y/0TVhxC4sgSG67nyfz 0AZPP5/LzV4k6nYwIZaTLkf6wf3uFw9axP+zmMEIp92Ice8mDjliTAeHopQS2ssqhwayhPOX Z/4zsQqObjvY3/+Boob9qHFkFjhhV3ik9TzbUhBXDJvMZZrXgV15me+nh9QJeKqMBUWxqz08 j24QMru7LFrjlWHG3x+YIjksi7rlw3LWVH+I+W8396lamlwWcTQGC4+U/gwyBQSxtQlb2D7K w5jxu8oXqHcAHWbLbrD8QMtJjlDAmPce5cuK5wIDAQABoy4wLDAcBgNVHREEFTATgRFjZmlz QHNhdmFnZXhpLmNvbTAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBQUAA4GBABVDzhqQJkFu p7AKoC8O0JyguB7Uyt/aeo6fJLtL7URiGx8Z+cdrvtyTRITkrRqudb1H4S6a4rcMk6pV/hlW DD6mkgsbaziyk1cqudubkDMRpQjLqg9JfQj5gyuq5iyHXxpqz6vtqvL8LnOpobgOFoLQadkR QmLQ3MRXI0m6cuRJMIIDPzCCAqigAwIBAgIBDTANBgkqhkiG9w0BAQUFADCB0TELMAkGA1UE BhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl cyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJ KoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAw MFoXDTEzMDcxNjIzNTk1OVowYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25z dWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJ c3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1 BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU5VAKMNcCY1osiRVwjt3J8CuFWqo/cVbLrzwL B+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTXp6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZ cmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYBAf8CAQAwQwYDVR0fBDwwOjA4oDagNIYy aHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBlcnNvbmFsRnJlZW1haWxDQS5jcmwwCwYD VR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFQcml2YXRlTGFiZWwyLTEzODAN BgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2asZw9/r6y+whehQ5aUnX9MIbj4Nh+qLZ82 L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSeJVCUYsfbJ3FXJY3dqZw5jowgT2Vfldr3 94fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHTHUb/XV9lTzGCA2QwggNgAgEBMHYwYjEL MAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAq BgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhAKS05t2zPTxWcR RH1el5GQMAkGBSsOAwIaBQCgggHDMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI hvcNAQkFMQ8XDTA4MDcxMTAzMTIwM1owIwYJKoZIhvcNAQkEMRYEFCy6KnIAXm9/y8ZUxD0h 2j6Vn5v0MFIGCSqGSIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0G CCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMIGFBgkrBgEEAYI3EAQxeDB2 MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQu MSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIQCktObdsz 08VnEUR9XpeRkDCBhwYLKoZIhvcNAQkQAgsxeKB2MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQK ExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29u YWwgRnJlZW1haWwgSXNzdWluZyBDQQIQCktObdsz08VnEUR9XpeRkDANBgkqhkiG9w0BAQEF AASCAQCRvYYVCDbsVKj+iZM0+y7UZz/SJI9fBP5Gy66HTvVOn4es+Ru7/yDrVN8QUvSVBP5t A/tiFpPDG/OaOHEmTukd/tQbKSmKdJw1OBur29Isd+2gPQtYytqBejbYTwAqOW+VYSQnFOxF 7QYjaFAZhD4I0D8Ee/rVx5B6RhoQDTKagS9Cdo7x2oxsHyKiWG19jBS2CMEztddzQHkNQA29 EUPstsQUrxSK1qhMfpHgYYkmszBYoLkpr0/fqqP4oQrktT7tD8dW4bKXwTTi1quPlRw7eNES wnVJlZ6an0J8T1ffOl1tUtg7U6SPfSeOcRyMMobizJkAah5m0B32U+TQcEYJAAAAAAAA --------------ms070303050609050308080505--