< :the previous in number
^ :the list in numerical order
> :the next in number
P :the previous (in thread)
N :the next (in thread)
|<:the top of this thread
>|:the next thread
^ :the parent (reply-to)
_:the child (an article replying to this)
>:the elder article having the same parent
<:the youger article having the same parent
---:split window and show thread lists
| :split window (vertically) and show thread lists
~ :close the thread frame
.:the index
..:the index of indices
> >>>>> "S" == Sean Chittenden <sean / chittenden.org> writes:
>
> S> ./test/tests.rb -i 0
>
> Well, if I'm right the problem is in ruby_xml_parser_io_set()
>
> 532 rxp->ctxt = ruby_xml_parser_context_new3();
> 533 data = (rx_io_data *)rxp->data;
> 534 data->io = io;
> 535 GetOpenFile(io, fptr);
> 536 rb_io_check_readable(fptr);
> 537 f = GetWriteFile(fptr);
> 538
> 539 Data_Get_Struct(rxp->ctxt, ruby_xml_parser_context, rxpc);
> 540 rxpc->ctxt = xmlCreateIOParserCtxt(NULL, NULL,
> 541 (xmlInputReadCallback) ctxtRead,
> 542 (xmlInputCloseCallback) ctxtClose,
> 543 f, XML_CHAR_ENCODING_NONE);
>
> When the object is garbage collected, ruby call
>
> 89 void ruby_xml_parser_context_free(ruby_xml_parser_context *rxpc) {
> 90 if (rxpc->ctxt != NULL && rxpc->copy == RUBY_LIBXML_ORIG) {
> 91 xmlFreeParserCtxt(rxpc->ctxt);
> 92 ruby_xml_parser_count--;
> 93 }
> 94
> 95 if (ruby_xml_parser_count == 0)
> 96 xmlCleanupParser();
> 97
> 98 free(rxpc);
> 99 }
> 100
>
> xmlFreeParserCtxt() call ctxtClose() but the original object (data->io)
> was previously closed by ruby : explicitely or the garbage collector has
> found it before it try to release rxp->ctxt.
>
> The segfault is just because you call close() on a already closed IO.
:-/ You could be right, but, the IO context is created when reading
data from RAM, not from an actual IO socket. I've created a simpler
use case:
http://lists.ruby-support.com/pipermail/ruby-developers/2002-September/000044.html
http://lists.ruby-support.com/pipermail/ruby-developers/2002-September/000045.html
That's a much simpler example. -sc
--
Sean Chittenden