You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by sv...@apache.org on 2014/04/17 09:47:01 UTC

svn commit: r1588153 - in /subversion/branches/1.8.x: ./ subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c subversion/bindings/swig/ruby/test/test_client.rb subversion/bindings/swig/svn_client.i

Author: svn-role
Date: Thu Apr 17 07:47:00 2014
New Revision: 1588153

URL: http://svn.apache.org/r1588153
Log:
Merge the r1586052 group from trunk:

 * r1586052, r1586467
   Fix two memory lifetime bugs in the Ruby bindings.
   Justification:
     Ruby bindings tests crash with APR pool debugging enabled.
   Votes:
     +1: stsp
     +0: rhuijben (Looks good. Can't test)
sentinel

Modified:
    subversion/branches/1.8.x/   (props changed)
    subversion/branches/1.8.x/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
    subversion/branches/1.8.x/subversion/bindings/swig/ruby/test/test_client.rb
    subversion/branches/1.8.x/subversion/bindings/swig/svn_client.i

Propchange: subversion/branches/1.8.x/
------------------------------------------------------------------------------
  Merged /subversion/trunk:r1586052,1586467

Modified: subversion/branches/1.8.x/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c?rev=1588153&r1=1588152&r2=1588153&view=diff
==============================================================================
--- subversion/branches/1.8.x/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c (original)
+++ subversion/branches/1.8.x/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c Thu Apr 17 07:47:00 2014
@@ -1192,6 +1192,7 @@ DEFINE_DUP(auth_ssl_server_cert_info)
 DEFINE_DUP(wc_entry)
 DEFINE_DUP(client_diff_summarize)
 DEFINE_DUP(dirent)
+DEFINE_DUP(log_entry)
 DEFINE_DUP_NO_CONVENIENCE(client_commit_item3)
 DEFINE_DUP_NO_CONVENIENCE(client_proplist_item)
 DEFINE_DUP_NO_CONVENIENCE(wc_external_item2)
@@ -2155,9 +2156,7 @@ svn_swig_rb_log_entry_receiver(void *bat
 
         cbb.receiver = proc;
         cbb.message = id_call;
-        cbb.args = rb_ary_new3(1,
-                               c2r_swig_type((void *)entry,
-                                             (void *)"svn_log_entry_t *"));
+        cbb.args = rb_ary_new3(1, c2r_log_entry__dup(entry));
         invoke_callback_handle_error((VALUE)(&cbb), rb_pool, &err);
     }
     return err;

Modified: subversion/branches/1.8.x/subversion/bindings/swig/ruby/test/test_client.rb
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x/subversion/bindings/swig/ruby/test/test_client.rb?rev=1588153&r1=1588152&r2=1588153&view=diff
==============================================================================
--- subversion/branches/1.8.x/subversion/bindings/swig/ruby/test/test_client.rb (original)
+++ subversion/branches/1.8.x/subversion/bindings/swig/ruby/test/test_client.rb Thu Apr 17 07:47:00 2014
@@ -2262,7 +2262,6 @@ class SvnClientTest < Test::Unit::TestCa
         end
       end
       config = Svn::Core::Config.config(@config_path)
-      assert_nil(ctx.config)
       assert_equal(options, config[Svn::Core::CONFIG_CATEGORY_SERVERS].to_hash)
       ctx.config = config
       assert_equal(options,

Modified: subversion/branches/1.8.x/subversion/bindings/swig/svn_client.i
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x/subversion/bindings/swig/svn_client.i?rev=1588153&r1=1588152&r2=1588153&view=diff
==============================================================================
--- subversion/branches/1.8.x/subversion/bindings/swig/svn_client.i (original)
+++ subversion/branches/1.8.x/subversion/bindings/swig/svn_client.i Thu Apr 17 07:47:00 2014
@@ -395,7 +395,13 @@ Callback: svn_client_diff_summarize_func
   svn_client_ctx_t(apr_pool_t *pool) {
     svn_error_t *err;
     svn_client_ctx_t *self;
-    err = svn_client_create_context(&self, pool);
+    apr_hash_t *cfg_hash;
+
+    err = svn_config_get_config(&cfg_hash, NULL, pool);
+    if (err)
+      svn_swig_rb_handle_svn_error(err);
+
+    err = svn_client_create_context2(&self, cfg_hash, pool);
     if (err)
       svn_swig_rb_handle_svn_error(err);
     return self;
@@ -512,7 +518,13 @@ svn_client_set_config(svn_client_ctx_t *
                       apr_hash_t *config,
                       apr_pool_t *pool)
 {
-  ctx->config = config;
+  svn_error_t *err;
+
+  apr_hash_clear(ctx->config);
+  err = svn_config_copy_config(&ctx->config, config,
+                               apr_hash_pool_get(ctx->config));
+  if (err)
+    svn_swig_rb_handle_svn_error(err);
   return Qnil;
 }