On Thu, Mar 26, 2009 at 07:06:14PM +0100, Nick Wellnhofer wrote: > > The input and output callbacks of libxml are stored in static arrays in > xmlIO.c, so any use of the callback functions is not thread-safe. > > In many cases this shouldn't be a problem, if callbacks are registered > only at the start of a program. But the Perl bindings register and > unregister callbacks every time a document is parsed. I can reproduce
Uhhhh ???? That sounds severely broken to me. Can you details why, and how ? > random segfaults or other errors when processing many thousand documents > in concurrent threads with the libxml Perl bindings. > > I'm willing to help fix this, but I'm not sure about the correct > approach. Should the callback arrays be added to the global variables in > globals.c? Those variables are not public, so I guess a different way would be preferable. Still I can't see any good valid reason to change the values all the time. Something is severely broken there in the perl bindings ! If they need a per parsing instance processing they should use the data block provided by the I/O to make the switch, but register an unified routine for all threads. No really this doesn't make any sense to me, but maybe you can come up with a valid reason, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ [email protected] | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ _______________________________________________ xml mailing list, project page http://xmlsoft.org/ [email protected] http://mail.gnome.org/mailman/listinfo/xml
