Hey, The revision of libxml-ruby currently in unstable fixes an important bug. The boring changelog:
| libxml-ruby (0.8.3-1) unstable; urgency=low | | * New upstream version (closes: #485738). The changes are big, but this version has been in the archive for a month and now new bugs have been filed since then. Still, because I assume that you do not want to let new upstream releases in at this point, I attach the debdiff for a possible t-p-u upload backporting the required fix. Please let me know which way you prefer. Best regards, -- Michael Schutte <[EMAIL PROTECTED]>
diff -u libxml-ruby-0.5.2.0/debian/control libxml-ruby-0.5.2.0/debian/control --- libxml-ruby-0.5.2.0/debian/control +++ libxml-ruby-0.5.2.0/debian/control @@ -2,9 +2,9 @@ Section: libs Priority: optional Maintainer: Filipe Lautert <[EMAIL PROTECTED]> -Uploaders: Debian Ruby Extras Maintainers <pkg-ruby-extras-maintainers@lists.alioth.debian.org>, Paul van Tilburg <[EMAIL PROTECTED]> +Uploaders: Debian Ruby Extras Maintainers <pkg-ruby-extras-maintainers@lists.alioth.debian.org>, Paul van Tilburg <[EMAIL PROTECTED]>, Michael Schutte <[EMAIL PROTECTED]> Build-Depends: debhelper (>> 4.1.0), cdbs, ruby-pkg-tools (>= 0.8), ruby, ruby1.8-dev, libxml2-dev, libxslt1-dev, zlib1g-dev -Standards-Version: 3.7.3 +Standards-Version: 3.8.0 XS-Dm-Upload-Allowed: yes Homepage: http://libxml.rubyforge.org/ Vcs-Browser: http://svn.debian.org/wsvn/pkg-ruby-extras/packages/libxml-ruby/ diff -u libxml-ruby-0.5.2.0/debian/changelog libxml-ruby-0.5.2.0/debian/changelog --- libxml-ruby-0.5.2.0/debian/changelog +++ libxml-ruby-0.5.2.0/debian/changelog @@ -1,3 +1,12 @@ +libxml-ruby (0.5.2.0-3+lenny1) testing-proposed-updates; urgency=low + + * Backport a patch from upstream SVN (r319) to fix an “object allocation + during GC phase” bug, closes: #485738. + * Bump Standards-Version to 3.8.0 (no changes needed). + * Add myself to Uploaders. + + -- Michael Schutte <[EMAIL PROTECTED]> Thu, 04 Sep 2008 14:50:51 +0200 + libxml-ruby (0.5.2.0-3) unstable; urgency=low * Set section to "libs" instead of "interpreters". This is a library. only in patch2: unchanged: --- libxml-ruby-0.5.2.0.orig/debian/patches/10-object_allocation_in_gc_phase.diff +++ libxml-ruby-0.5.2.0/debian/patches/10-object_allocation_in_gc_phase.diff @@ -0,0 +1,377 @@ +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_document.c +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_document.c 2007-09-28 19:13:58.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_document.c 2008-09-04 14:22:48.000000000 +0200 +@@ -438,7 +438,7 @@ + ruby_xml_document_mark(ruby_xml_document_t *rxd) { + // will mark parsers and source types + // I do not thing doc->parent has anything useful in it. +- ruby_xml_state_marker(); ++ rb_gc_mark(LIBXML_STATE); + } + + /* +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_ns.c +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_ns.c 2007-08-29 19:30:11.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_ns.c 2008-09-04 14:22:48.000000000 +0200 +@@ -55,7 +55,8 @@ + static void + ruby_xml_ns_mark(ruby_xml_ns *rxns) { + if (rxns == NULL) return; +- if (!NIL_P(rxns->xd)) rb_gc_mark(rxns->xd); ++ if (!NIL_P(rxns->xd)) ++ rb_gc_mark(rxns->xd); + } + + +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_html_parser.c +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_html_parser.c 2007-09-26 17:04:48.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_html_parser.c 2008-09-04 14:22:48.000000000 +0200 +@@ -63,7 +63,7 @@ + return(Qnil); + } + +- rxp->ctxt = ruby_xml_parser_context_new3(); ++ rxp->ctxt = ruby_xml_parser_context_new(); + data = (rx_file_data *)rxp->data; + data->filename = filename; + +@@ -159,7 +159,7 @@ + return(Qnil); + } + +- rxp->ctxt = ruby_xml_parser_context_new3(); ++ rxp->ctxt = ruby_xml_parser_context_new(); + data = (rx_io_data *)rxp->data; + data->io = io; + +@@ -181,9 +181,10 @@ + void + ruby_xml_html_parser_mark(ruby_xml_html_parser *rxp) { + if (rxp == NULL) return; +- if (!NIL_P(rxp->ctxt)) rb_gc_mark(rxp->ctxt); ++ if (!NIL_P(rxp->ctxt)) ++ rb_gc_mark(rxp->ctxt); + +- ruby_xml_state_marker(); ++ rb_gc_mark(LIBXML_STATE); + + switch(rxp->data_type) { + case RUBY_LIBXML_SRC_TYPE_NULL: +@@ -411,7 +412,7 @@ + return(Qnil); + } + +- rxp->ctxt = ruby_xml_parser_context_new3(); ++ rxp->ctxt = ruby_xml_parser_context_new(); + data = (rx_string_data *)rxp->data; + data->str = str; + +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_parser.c +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_parser.c 2007-10-10 13:07:13.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_parser.c 2008-09-04 14:22:48.000000000 +0200 +@@ -779,7 +779,7 @@ + return(Qnil); + } + +- rxp->ctxt = ruby_xml_parser_context_new3(); ++ rxp->ctxt = ruby_xml_parser_context_new(); + data = (rx_file_data *)rxp->data; + data->filename = filename; + +@@ -910,7 +910,7 @@ + return(Qnil); + } + +- rxp->ctxt = ruby_xml_parser_context_new3(); ++ rxp->ctxt = ruby_xml_parser_context_new(); + data = (rx_io_data *)rxp->data; + data->io = io; + +@@ -932,9 +932,10 @@ + void + ruby_xml_parser_mark(ruby_xml_parser *rxp) { + if (rxp == NULL) return; +- if (!NIL_P(rxp->ctxt)) rb_gc_mark(rxp->ctxt); ++ if (!NIL_P(rxp->ctxt)) ++ rb_gc_mark(rxp->ctxt); + +- ruby_xml_state_marker(); ++ rb_gc_mark(LIBXML_STATE); + + switch(rxp->data_type) { + case RUBY_LIBXML_SRC_TYPE_NULL: +@@ -1208,7 +1209,7 @@ + return(Qnil); + } + +- rxp->ctxt = ruby_xml_parser_context_new3(); ++ rxp->ctxt = ruby_xml_parser_context_new(); + data = (rx_string_data *)rxp->data; + data->str = str; + +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_state.c +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_state.c 2007-10-10 13:07:13.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_state.c 2008-09-04 14:30:56.000000000 +0200 +@@ -3,96 +3,28 @@ + #include "libxml.h" + + VALUE cXMLState; +-static VALUE weak_holder; +-static int id_inst; ++VALUE LIBXML_STATE = Qnil; + +-ID id_state; +- +-#undef DEBUG ++static int dummy; + + void +-ruby_xml_state_free(int * dummy) { +- if ( dummy==NULL ) return; ++ruby_xml_state_free(int dummy) { + xmlCleanupParser(); +- free(dummy); +- dummy=NULL; +- weak_holder=Qnil; +- rb_ivar_set(cXMLState,id_state,Qnil); +-} +- +-void +-ruby_xml_state_mark(void * a) { +-#ifdef DEBUG +- fprintf(stderr,"marked 0x%x\n",NUM2INT(rb_ivar_get(cXMLState,id_state))); +-#endif +-} +- +-VALUE +-ruby_xml_state_object() { +- VALUE obj,id; +- int *dummy; +- +- id=rb_ivar_get(cXMLState,id_state); +- if (NIL_P(id)) { +- obj = Data_Make_Struct(cXMLState, int, +- ruby_xml_state_mark, +- ruby_xml_state_free, +- dummy); +- rb_ivar_set(cXMLState,id_state,id=rb_obj_id(obj)); +- *dummy=0; +- weak_holder=obj; +- return obj; +- } +- +-#ifdef DEBUG +- fprintf(stderr,"getting 0x%x\n",NUM2INT(id)); +-#endif +- return weak_holder; +- +- return rb_funcall(rb_const_get(rb_cModule,rb_intern("ObjectSpace")), +- rb_intern("_id2ref"), +- 1, +- id); ++ LIBXML_STATE = Qnil; + } + + VALUE +-ruby_xml_state_object_find_aux(VALUE id) { +- rb_funcall(rb_const_get(rb_cModule,rb_intern("ObjectSpace")), +- rb_intern("_id2ref"), +- 1, +- id); +-} +- +- +-static VALUE +-find_failed() { +- return Qnil; +-} +- +-VALUE +-ruby_xml_state_object_find(VALUE id) { +- return rb_rescue(ruby_xml_state_object_find_aux, id, find_failed, 0); +-} +-/* +- * This will establish a use and mark it or mark an existing use. +- * should be called by parser.mark and document.mark +- */ +-void +-ruby_xml_state_marker(void) { +- ruby_xml_state_object(); +- rb_gc_mark(weak_holder); +-} +- +-VALUE +-ruby_xml_state_used_p(VALUE klass) +-{ +- return rb_ivar_get(cXMLState,id_state); +-} +- +-VALUE +-ruby_xml_state_use(VALUE klass) +-{ +- return ruby_xml_state_object(); ++ruby_xml_state_alloc() { ++ #ifdef DEBUG ++ fprintf(stderr, "Allocating state"); ++ #endif ++ ++ xmlInitParser(); ++ ++ return Data_Make_Struct(cXMLState, int, ++ NULL, ++ ruby_xml_state_free, ++ dummy); + } + + // Rdoc needs to know +@@ -103,12 +35,20 @@ + + void + ruby_init_state(void) { ++ VALUE rb_mSingleton; + cXMLState = rb_define_class_under(mXML, "State", rb_cObject); +- +- rb_define_singleton_method(cXMLState, "used?", +- ruby_xml_state_used_p, 0); +- rb_define_singleton_method(cXMLState, "use", +- ruby_xml_state_use, 0); +- +- rb_ivar_set(cXMLState, id_state=rb_intern("@stateid"), Qnil); ++ ++ /* Mixin singleton so only one xml state object can be created. */ ++ rb_require("singleton"); ++ rb_mSingleton = rb_const_get(rb_cObject, rb_intern("Singleton")); ++ rb_include_module(cXMLState, rb_mSingleton); ++ ++ rb_define_alloc_func(cXMLState, ruby_xml_state_alloc); ++ ++ /* Create one instance of the state object that is used ++ to initalize and cleanup libxml. Then register it with ++ the garbage collector so its not freed until the process ++ exists.*/ ++ LIBXML_STATE = rb_class_new_instance(0, NULL, cXMLState); ++ rb_global_variable(&LIBXML_STATE); + } +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_state.h +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_state.h 2007-09-25 21:14:10.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_state.h 2008-09-04 14:31:27.000000000 +0200 +@@ -4,8 +4,6 @@ + #define __RUBY_XML_STATE__ + + extern VALUE cXMLState; +- +-void ruby_xml_state_marker(void); +-VALUE ruby_xml_state_object_find(VALUE id); ++extern VALUE LIBXML_STATE; + + #endif +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_parser_context.c +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_parser_context.c 2007-09-26 17:04:48.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_parser_context.c 2008-09-04 14:36:40.000000000 +0200 +@@ -148,11 +148,6 @@ + free(rxpc); + } + +-void +-ruby_xml_parser_context_mark(void *v) { +- if ( v == NULL ) return; +- ruby_xml_state_marker(); +-} + + /* + * call-seq: +@@ -367,31 +362,15 @@ + + + VALUE +-ruby_xml_parser_context_new(VALUE class, xmlParserCtxtPtr ctxt) { +- ruby_xml_parser_context *rxpc; +- +- rxpc = ALLOC(ruby_xml_parser_context); +- +- rxpc->ctxt = ctxt; +- return Data_Wrap_Struct(class, +- ruby_xml_parser_context_mark, ++ruby_xml_parser_context_new() { ++ ruby_xml_parser_context *rxpc = ALLOC(ruby_xml_parser_context); ++ return Data_Wrap_Struct(cXMLParserContext, ++ NULL, + ruby_xml_parser_context_free, + rxpc); + } + + +-VALUE +-ruby_xml_parser_context_new2(VALUE class) { +- return(ruby_xml_parser_context_new(class, NULL)); +-} +- +- +-VALUE +-ruby_xml_parser_context_new3() { +- return(ruby_xml_parser_context_new2(cXMLParserContext)); +-} +- +- + /* + * call-seq: + * context.replace_entities? => (true|false) +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_node_set.c +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_node_set.c 2007-10-10 13:07:13.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_node_set.c 2008-09-04 14:22:48.000000000 +0200 +@@ -96,7 +96,8 @@ + + static void + ruby_xml_node_set_mark(ruby_xml_node_set *rxnset) { +- if (!NIL_P(rxnset->rxpop)) rb_gc_mark(rxnset->rxpop); ++ if (!NIL_P(rxnset->rxpop)) ++ rb_gc_mark(rxnset->rxpop); + } + + static void +Index: libxml-ruby-0.5.2.0/ext/xml/ruby_xml_parser_context.h +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/ruby_xml_parser_context.h 2007-08-29 19:35:27.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/ruby_xml_parser_context.h 2008-09-04 14:22:48.000000000 +0200 +@@ -14,9 +14,7 @@ + + void ruby_xml_parser_context_free(ruby_xml_parser_context *ctxt); + void ruby_init_xml_parser_context(void); +-VALUE ruby_xml_parser_context_new(VALUE class, xmlParserCtxtPtr ctxt); +-VALUE ruby_xml_parser_context_new2(VALUE class); +-VALUE ruby_xml_parser_context_new3(); ++VALUE ruby_xml_parser_context_new(); + VALUE ruby_xml_parser_context_each(VALUE self); + + #endif +Index: libxml-ruby-0.5.2.0/ext/xml/libxml.c +=================================================================== +--- libxml-ruby-0.5.2.0.orig/ext/xml/libxml.c 2007-09-26 17:04:48.000000000 +0200 ++++ libxml-ruby-0.5.2.0/ext/xml/libxml.c 2008-09-04 14:22:48.000000000 +0200 +@@ -41,10 +41,6 @@ + VALUE mXML; + VALUE eXMLError; + +-static xmlFreeFunc freeFunc = NULL; +-static xmlMallocFunc mallocFunc = NULL; +-static xmlReallocFunc reallocFunc = NULL; +-static xmlStrdupFunc strdupFunc = NULL; + + void + Init_libxml_so(void) { +@@ -59,7 +55,6 @@ + (xmlReallocFunc)RubyMemRealloc, (xmlStrdupFunc)RubyMemStrdup) != 0) + rb_fatal("could not install the memory handlers for libxml"); + #endif +- xmlInitParser(); + + mXML = rb_define_module("XML"); + eXMLError = rb_define_class_under(mXML, "Error", rb_eRuntimeError);
signature.asc
Description: Digital signature
_______________________________________________ Pkg-ruby-extras-maintainers mailing list Pkg-ruby-extras-maintainers@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/pkg-ruby-extras-maintainers