[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Segfault in ruby tests

From: Joe Swatosh <joe.swatosh_at_gmail.com>
Date: Thu, 5 Feb 2009 13:52:42 -0800

On Sat, Jan 31, 2009 at 12:45 AM, Kouhei Sutou <kou_at_cozmixng.org> wrote:
> Hi,
>
> In <497F4B21.5030008_at_mail.utexas.edu>
> "Segfault in ruby tests" on Tue, 27 Jan 2009 11:57:53 -0600,
> "Hyrum K. Wright" <hyrum_wright_at_mail.utexas.edu> wrote:
>
>> The ruby bindings tests are segfaulting on the buildbot. I can reproduce locally:
>
> I don't know about the detail of the problem but this patch
> will solve the problem:
>
> Index: subversion/libsvn_delta/text_delta.c
> ===================================================================
> --- subversion/libsvn_delta/text_delta.c (revision 35611)
> +++ subversion/libsvn_delta/text_delta.c (working copy)
> @@ -788,8 +788,11 @@
> apr_pool_t *pool)
> {
> svn_txdelta_stream_t *txstream;
> + apr_pool_t *sub_pool;
> svn_error_t *err;
>
> + sub_pool = svn_pool_create(pool);
> +
> /* ### this is a hack. we should simply read from the stream, construct
> ### some windows, and pass those to the handler. there isn't any reason
> ### to crank up a full "diff" algorithm just to copy a stream.
> @@ -798,8 +801,8 @@
>
> /* Create a delta stream which converts an *empty* bytestream into the
> target bytestream. */
> - svn_txdelta(&txstream, svn_stream_empty(pool), stream, pool);
> - err = svn_txdelta_send_txstream(txstream, handler, handler_baton, pool);
> + svn_txdelta(&txstream, svn_stream_empty(sub_pool), stream, sub_pool);
> + err = svn_txdelta_send_txstream(txstream, handler, handler_baton, sub_pool);
>
> if (digest && (! err))
> {
> @@ -809,6 +812,8 @@
> memcpy(digest, result_md5, APR_MD5_DIGESTSIZE);
> }
>
> + svn_pool_destroy(sub_pool);
> +
> return err;
> }
>
>

In the spirit of kou's patch, but in the bindings area:

Index: subversion/bindings/swig/svn_delta.i
===================================================================
--- subversion/bindings/swig/svn_delta.i (revision 35664)
+++ subversion/bindings/swig/svn_delta.i (working copy)
@@ -232,8 +232,10 @@
                           void **handler_baton,
                           apr_pool_t *pool)
 {
+ apr_pool_t *sub_pool = sub_pool = svn_pool_create(pool);
   svn_txdelta_apply(source, target, result_digest, error_info,
                     pool, handler, handler_baton);
+ svn_pool_destroy(sub_pool);
 }

 static svn_error_t *

Disclaimer: since I'm not reproducing the error, I'm not sure it will work.

Looking around a little in libsvn_delta, it seems to me that the
subpool created in svn_txdelta_apply that isn't destroyed there should
have a comment explaining why? Or if the subpool was destroyed, does
that help with the segfault? Or maybe I just don't know what I'm
talking about :-)

--
Joe
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=1109238
Received on 2009-02-05 22:53:06 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.