You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2017/05/27 14:46:15 UTC

svn commit: r1796402 - in /subversion/trunk/subversion: libsvn_fs_x/batch_fsync.c libsvn_ra/ra_loader.c libsvn_repos/dump.c libsvn_subr/pool.c svnadmin/svnadmin.c

Author: stefan2
Date: Sat May 27 14:46:15 2017
New Revision: 1796402

URL: http://svn.apache.org/viewvc?rev=1796402&view=rev
Log:
Revert r1796399.

This was accidentally committed by a faulty script.

Modified:
    subversion/trunk/subversion/libsvn_fs_x/batch_fsync.c
    subversion/trunk/subversion/libsvn_ra/ra_loader.c
    subversion/trunk/subversion/libsvn_repos/dump.c
    subversion/trunk/subversion/libsvn_subr/pool.c
    subversion/trunk/subversion/svnadmin/svnadmin.c

Modified: subversion/trunk/subversion/libsvn_fs_x/batch_fsync.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/batch_fsync.c?rev=1796402&r1=1796401&r2=1796402&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/batch_fsync.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/batch_fsync.c Sat May 27 14:46:15 2017
@@ -228,7 +228,6 @@ struct svn_fs_x__batch_fsync_t
 
 /* Thread pool to execute the fsync tasks. */
 static apr_thread_pool_t *thread_pool = NULL;
-static apr_pool_t *threadsafe_pool = NULL;
 
 #endif
 
@@ -248,18 +247,14 @@ static svn_atomic_t thread_pool_initiali
 static apr_status_t
 thread_pool_pre_cleanup(void *data)
 {
-  apr_status_t result;
   apr_thread_pool_t *tp = thread_pool;
   if (!thread_pool)
     return APR_SUCCESS;
 
   thread_pool = NULL;
-  threadsafe_pool = NULL;
   thread_pool_initialized = FALSE;
 
-  result = apr_thread_pool_destroy(tp);
-  apr_sleep(1000);
-  return result;
+  return apr_thread_pool_destroy(tp);
 }
 
 #endif
@@ -272,11 +267,7 @@ create_thread_pool(void *baton,
 #if APR_HAS_THREADS
   /* The thread-pool must be allocated from a thread-safe pool.
      GLOBAL_POOL may be single-threaded, though. */
-  apr_allocator_t *allocator = apr_pool_allocator_get(owning_pool);
-  apr_pool_t *pool = apr_allocator_mutex_get(allocator)
-                   ? owning_pool
-                   : svn_pool_create(NULL);
-  pool = owning_pool;
+  apr_pool_t *pool = svn_pool_create(NULL);
 
   /* This thread pool will get cleaned up automatically when GLOBAL_POOL
      gets cleared.  No additional cleanup callback is needed. */
@@ -286,9 +277,8 @@ create_thread_pool(void *baton,
   /* Work around an APR bug:  The cleanup must happen in the pre-cleanup
      hook instead of the normal cleanup hook.  Otherwise, the sub-pools
      containing the thread objects would already be invalid. */
+  apr_pool_pre_cleanup_register(pool, NULL, thread_pool_pre_cleanup);
   apr_pool_pre_cleanup_register(owning_pool, NULL, thread_pool_pre_cleanup);
-  if (pool != owning_pool)
-    apr_pool_pre_cleanup_register(pool, NULL, thread_pool_pre_cleanup);
 
   /* let idle threads linger for a while in case more requests are
      coming in */

Modified: subversion/trunk/subversion/libsvn_ra/ra_loader.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra/ra_loader.c?rev=1796402&r1=1796401&r2=1796402&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra/ra_loader.c (original)
+++ subversion/trunk/subversion/libsvn_ra/ra_loader.c Sat May 27 14:46:15 2017
@@ -56,10 +56,7 @@
 #include "private/svn_ra_private.h"
 #include "svn_private_config.h"
 
-#ifdef SVN_LIBSVN_RA_LINKS_RA_LOCAL
-/* for svn_fs_initialize(). */
-#include "svn_fs.h"
-#endif
+
 
 
 /* These are the URI schemes that the respective libraries *may* support.
@@ -240,20 +237,6 @@ svn_error_t *svn_ra_initialize(apr_pool_
      we're going to use it. */
   SVN_ERR(svn_dso_initialize2());
 #endif
-
-#ifdef SVN_LIBSVN_RA_LINKS_RA_LOCAL
-  /* Make sure we initialize the FS layer with an appropriate base pool.
-   * POOL will live long enough but can be cleaned up explicitly by the
-   * using application.  That prevents cleanup / threading races during
-   * the termination phase.  See also http://www.luke1410.de/blog/?p=95
-   *
-   * The client does not know that the FS layer needs to be initialized
-   * when it wants to use RA local.  Due to missing interface guarantees,
-   * we cannot pass an appropriate pool to ra_local's initialization
-   * routine.  Hence the explicit call here.
-   */
-  SVN_ERR(svn_fs_initialize(pool));
-#endif
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/dump.c?rev=1796402&r1=1796401&r2=1796402&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/dump.c (original)
+++ subversion/trunk/subversion/libsvn_repos/dump.c Sat May 27 14:46:15 2017
@@ -20,9 +20,8 @@
  * ====================================================================
  */
 
+
 #include <stdarg.h>
-#include <apr_thread_pool.h>
-#include <apr_time.h>
 
 #include "svn_private_config.h"
 #include "svn_pools.h"
@@ -45,7 +44,6 @@
 #include "private/svn_sorts_private.h"
 #include "private/svn_utf_private.h"
 #include "private/svn_cache.h"
-#include "private/svn_subr_private.h"
 
 #define ARE_VALID_COPY_ARGS(p,r) ((p) && SVN_IS_VALID_REVNUM(r))
 
@@ -2393,202 +2391,6 @@ report_error(svn_revnum_t revision,
     }
 }
 
-typedef struct verification_job_t
-{
-  svn_fs_t *fs;
-  svn_revnum_t first_rev;
-  svn_revnum_t last_rev;
-  svn_revnum_t start_rev;
-  svn_boolean_t check_normalization;
-  svn_repos_notify_func_t notify_func;
-  void *notify_baton;
-  svn_cancel_func_t cancel_func;
-  void *cancel_baton;
-  svn_root_pools__t *pools;
-  svn_error_t *result;
-  svn_mutex__t *mutex;
-  apr_array_header_t *fs_instances;
-} verification_job_t;
-
-typedef struct fs_instance_t
-{
-  svn_fs_t *fs;
-  apr_pool_t *pool;
-} fs_instance_t;
-
-/* Thread-pool task Flush the to_sync_t instance given by DATA. */
-static void * APR_THREAD_FUNC
-verify_task(apr_thread_t *tid,
-            void *data)
-{
-  verification_job_t *baton = data;
-  fs_instance_t *instance;
-  svn_error_t *err = SVN_NO_ERROR;
-
-  SVN_ERR(svn_mutex__lock(baton->mutex));
-  if (baton->fs_instances->nelts)
-    {
-      instance = *(fs_instance_t **)apr_array_pop(baton->fs_instances);
-    }
-  else
-    {
-      apr_pool_t *pool = svn_root_pools__acquire_pool(baton->pools);
-      instance = apr_pcalloc(pool, sizeof(*instance));
-      instance->pool = pool;
-
-      SVN_ERR(svn_fs_open2(&instance->fs,
-                           svn_fs_path(baton->fs, pool),
-                           svn_fs_config(baton->fs, pool),
-                           pool, pool));
-    }
-  SVN_ERR(svn_mutex__unlock(baton->mutex, SVN_NO_ERROR));
-
-  if (!err)
-    {
-      svn_revnum_t rev;
-      apr_pool_t *iterpool = svn_pool_create(instance->pool);
-      for (rev = baton->first_rev; rev < baton->last_rev; ++rev)
-        {
-          svn_pool_clear(iterpool);
-          err = svn_error_trace(verify_one_revision(instance->fs,
-                                                    rev,
-                                                    baton->notify_func,
-                                                    baton->notify_baton,
-                                                    baton->start_rev,
-                                                    baton->check_normalization,
-                                                    baton->cancel_func,
-                                                    baton->cancel_baton,
-                                                    iterpool));
-        }
-      svn_pool_destroy(iterpool);
-    }
-  baton->result = err;
-
-  SVN_ERR(svn_mutex__lock(baton->mutex));
-  APR_ARRAY_PUSH(baton->fs_instances, fs_instance_t *) = instance;
-  SVN_ERR(svn_mutex__unlock(baton->mutex, SVN_NO_ERROR));
-
-  return NULL;
-}
-
-#define WRAP_APR_ERR(x,msg)                     \
-  {                                             \
-    apr_status_t status_ = (x);                 \
-    if (status_)                                \
-      return svn_error_wrap_apr(status_, msg);  \
-  }
-
-static svn_error_t *
-verify_mt(svn_fs_t *fs,
-          svn_revnum_t start_rev,
-          svn_revnum_t end_rev,
-          svn_boolean_t check_normalization,
-          svn_repos_notify_t *notify,
-          svn_repos_notify_func_t notify_func,
-          void *notify_baton,
-          svn_repos_verify_callback_t verify_callback,
-          void *verify_baton,
-          svn_cancel_func_t cancel_func,
-          void *cancel_baton,
-          apr_pool_t *scratch_pool)
-{
-  svn_revnum_t rev;
-  svn_root_pools__t *root_pools;
-  apr_pool_t *iterpool = svn_pool_create(scratch_pool);
-  svn_error_t *err = SVN_NO_ERROR;
-  apr_array_header_t *jobs = apr_array_make(scratch_pool,
-                                            end_rev - start_rev + 1,
-                                            sizeof(verification_job_t));
-
-  /* Number of tasks sent to the thread pool. */
-  int tasks = 0;
-  int i;
-
-#if APR_HAS_THREADS
-  apr_thread_pool_t *thread_pool = NULL;
-  enum { MAX_THREADS = 24, STRIDE = 5 };
-
-  /* The thread-pool must be allocated from a thread-safe pool.
-     GLOBAL_POOL may be single-threaded, though. */
-  apr_pool_t *pool = svn_pool_create(NULL);
-
-  svn_mutex__t * mutex;
-  apr_array_header_t *fs_instances = apr_array_make(pool, MAX_THREADS,
-                                                    sizeof(fs_instance_t *));
-
-  SVN_ERR(svn_mutex__init(&mutex, TRUE, pool));
-
-  /* This thread pool will get cleaned up automatically when GLOBAL_POOL
-     gets cleared.  No additional cleanup callback is needed. */
-  WRAP_APR_ERR(apr_thread_pool_create(&thread_pool, 0, MAX_THREADS, pool),
-               _("Can't create verification thread pool"));
-
-#endif
-
-  SVN_ERR(svn_root_pools__create(&root_pools));
-
-  for (rev = start_rev; rev <= end_rev && err == SVN_NO_ERROR; rev += STRIDE)
-    {
-      apr_status_t status = APR_SUCCESS;
-      verification_job_t *job = apr_array_push(jobs);
-
-      job->fs = fs;
-      job->first_rev = rev;
-      job->last_rev = MIN(rev + STRIDE, end_rev + 1);
-      job->start_rev = start_rev;
-      job->check_normalization = check_normalization;
-      job->notify_func = notify_func;
-      job->notify_baton = notify_baton;
-      job->cancel_func = cancel_func;
-      job->cancel_baton = cancel_baton;
-      job->pools = root_pools;
-      job->result = SVN_NO_ERROR;
-      job->mutex = mutex;
-      job->fs_instances = fs_instances;
-
-      status = apr_thread_pool_push(thread_pool, verify_task, job, 0, NULL);
-      if (status)
-        job->result = svn_error_wrap_apr(status, _("Can't push task"));
-      else
-        tasks++;
-    }
-
-  while (apr_thread_pool_tasks_run_count(thread_pool) < tasks)
-    apr_sleep(10000);
-
-  for (i = 0; i < tasks; i++)
-    {
-      verification_job_t *job = &APR_ARRAY_IDX(jobs, i, verification_job_t);
-      err = job->result;
-      rev = job->first_rev;
-      svn_pool_clear(iterpool);
-
-      if (err && err->apr_err == SVN_ERR_CANCELLED)
-        {
-          ;
-        }
-      else if (err)
-        {
-          err = report_error(rev, err, verify_callback, verify_baton,
-                             iterpool);
-        }
-      else if (notify_func)
-        {
-          /* Tell the caller that we're done with this revision. */
-          notify->revision = rev;
-          notify_func(notify_baton, notify, iterpool);
-        }
-
-      svn_error_clear(err);
-    }
-
-  WRAP_APR_ERR(apr_thread_pool_destroy(thread_pool),
-               _("Can't destroy verification thread pool"));
-  svn_pool_destroy(pool);
-
-  return svn_error_trace(err);
-}
-
 svn_error_t *
 svn_repos_verify_fs3(svn_repos_t *repos,
                      svn_revnum_t start_rev,
@@ -2668,44 +2470,32 @@ svn_repos_verify_fs3(svn_repos_t *repos,
     }
 
   if (!metadata_only)
-    {
-#if APR_HAS_THREADS
-      if (start_rev < end_rev)
-        {
-          SVN_ERR(verify_mt(fs, start_rev, end_rev, check_normalization,
-                            notify, notify_func, notify_baton,
-                            verify_callback, verify_baton,
-                            cancel_func, cancel_baton, iterpool));
-        }
-      else
-#endif
-      for (rev = start_rev; rev <= end_rev; rev++)
-        {
-          svn_pool_clear(iterpool);
+    for (rev = start_rev; rev <= end_rev; rev++)
+      {
+        svn_pool_clear(iterpool);
+
+        /* Wrapper function to catch the possible errors. */
+        err = verify_one_revision(fs, rev, notify_func, notify_baton,
+                                  start_rev, check_normalization,
+                                  cancel_func, cancel_baton,
+                                  iterpool);
 
-          /* Wrapper function to catch the possible errors. */
-          err = verify_one_revision(fs, rev, notify_func, notify_baton,
-                                    start_rev, check_normalization,
-                                    cancel_func, cancel_baton,
-                                    iterpool);
-
-          if (err && err->apr_err == SVN_ERR_CANCELLED)
-            {
-              return svn_error_trace(err);
-            }
-          else if (err)
-            {
-              SVN_ERR(report_error(rev, err, verify_callback, verify_baton,
-                                  iterpool));
-            }
-          else if (notify_func)
-            {
-              /* Tell the caller that we're done with this revision. */
-              notify->revision = rev;
-              notify_func(notify_baton, notify, iterpool);
-            }
-        }
-    }
+        if (err && err->apr_err == SVN_ERR_CANCELLED)
+          {
+            return svn_error_trace(err);
+          }
+        else if (err)
+          {
+            SVN_ERR(report_error(rev, err, verify_callback, verify_baton,
+                                 iterpool));
+          }
+        else if (notify_func)
+          {
+            /* Tell the caller that we're done with this revision. */
+            notify->revision = rev;
+            notify_func(notify_baton, notify, iterpool);
+          }
+      }
 
   /* We're done. */
   if (notify_func)

Modified: subversion/trunk/subversion/libsvn_subr/pool.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/pool.c?rev=1796402&r1=1796401&r2=1796402&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/pool.c (original)
+++ subversion/trunk/subversion/libsvn_subr/pool.c Sat May 27 14:46:15 2017
@@ -136,7 +136,7 @@ svn_pool_create_allocator(svn_boolean_t
    * if we want thread-safety for that mutex. */
 
 #if APR_HAS_THREADS
-  if (1)
+  if (thread_safe)
     {
       apr_thread_mutex_t *mutex;
       apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, pool);

Modified: subversion/trunk/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnadmin/svnadmin.c?rev=1796402&r1=1796401&r2=1796402&view=diff
==============================================================================
--- subversion/trunk/subversion/svnadmin/svnadmin.c (original)
+++ subversion/trunk/subversion/svnadmin/svnadmin.c Sat May 27 14:46:15 2017
@@ -2992,7 +2992,7 @@ sub_main(int *exit_code, int argc, const
     svn_cache_config_t settings = *svn_cache_config_get();
 
     settings.cache_size = opt_state.memory_cache_size;
-    settings.single_threaded = FALSE;
+    settings.single_threaded = TRUE;
 
     svn_cache_config_set(&settings);
   }