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

Re: svn commit: r1127938 - /subversion/trunk/subversion/libsvn_client/externals.c

From: Mark Phippard <markphip_at_gmail.com>
Date: Thu, 26 May 2011 10:46:35 -0400

Do not know if it is related but I just updated and am running the
tests on my Mac. I have not run the tests in a while. I got a crash
during the tests. I think it was the externals tests but everything is
reporting success so far.

Here is the info that came up from the crash:

Application Specific Information:
abort() called

Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libSystem.B.dylib 0x00007fff830425d6 __kill + 10
1 libSystem.B.dylib 0x00007fff830e2cd6 abort + 83
2 libsvn_subr-1.0.dylib 0x0000000100457bc5
svn_error_set_malfunction_handler + 0
3 libsvn_subr-1.0.dylib 0x0000000100457c16
svn_error__malfunction + 45
4 libsvn_wc-1.0.dylib 0x000000010014e6cd run_file_install + 864
5 libsvn_wc-1.0.dylib 0x0000000100150e74 dispatch_work_item + 123
6 libsvn_wc-1.0.dylib 0x0000000100151045 svn_wc__wq_run + 279
7 libsvn_wc-1.0.dylib 0x00000001000ebe1d close_file + 3308
8 libsvn_delta-1.0.dylib 0x0000000100430b85 close_file + 136
9 libsvn_delta-1.0.dylib 0x0000000100430b85 close_file + 136
10 libsvn_repos-1.0.dylib 0x00000001001cf49c update_entry + 3070
11 libsvn_repos-1.0.dylib 0x00000001001d0435 drive + 1438
12 libsvn_repos-1.0.dylib 0x00000001001d0838 finish_report + 909
13 libsvn_repos-1.0.dylib 0x00000001001d0c9a
svn_repos_finish_report + 37
14 libsvn_ra_local-1.0.dylib 0x00000001001a9b33
reporter_finish_report + 41
15 libsvn_wc-1.0.dylib 0x00000001000ec5fa
svn_wc__crawl_file_external + 597
16 libsvn_client-1.0.dylib 0x000000010006c5c4
switch_file_external + 2622
17 libsvn_client-1.0.dylib 0x000000010006d67b
handle_external_item_change + 2204
18 libsvn_client-1.0.dylib 0x000000010006dce0
handle_external_item_change_wrapper + 87
19 libsvn_client-1.0.dylib 0x000000010006e09f
handle_externals_change + 920
20 libsvn_client-1.0.dylib 0x000000010006e4d5
svn_client__handle_externals + 655
21 libsvn_client-1.0.dylib 0x00000001000a32d7 update_internal + 3971
22 libsvn_client-1.0.dylib 0x00000001000a3799
svn_client__update_internal + 905
23 libsvn_client-1.0.dylib 0x00000001000a3a2d svn_client_update4 + 567
24 svn 0x000000010001d37c svn_cl__update + 788
25 svn 0x0000000100010bbb main + 11470
26 svn 0x00000001000016f8 start + 52

On Thu, May 26, 2011 at 10:25 AM, <rhuijben_at_apache.org> wrote:
> Author: rhuijben
> Date: Thu May 26 14:25:30 2011
> New Revision: 1127938
>
> URL: http://svn.apache.org/viewvc?rev=1127938&view=rev
> Log:
> Perform the externals processing in a different order: Start with processing
> the externals in paths that exist after the update instead of with the old
> externals that might not exist after the update.
>
> Because every external path is processed just once this is no real functional
> change, but it makes it easier to switch to the db driven processing.
>
> * subversion/libsvn_client/externals.c
>  (handle_externals_change): Create a hash of old externals and process the
>    new definitions against this list instead of the other way around.
>    Store abspaths in the hash instead of relpaths in preparation for getting
>    the old information from the database.
>
> Modified:
>    subversion/trunk/subversion/libsvn_client/externals.c
>
> Modified: subversion/trunk/subversion/libsvn_client/externals.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/externals.c?rev=1127938&r1=1127937&r2=1127938&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_client/externals.c (original)
> +++ subversion/trunk/subversion/libsvn_client/externals.c Thu May 26 14:25:30 2011
> @@ -1058,7 +1058,7 @@ handle_externals_change(const struct ext
>                         apr_pool_t *scratch_pool)
>  {
>   apr_array_header_t *old_desc, *new_desc;
> -  apr_hash_t *new_desc_hash;
> +  apr_hash_t *old_desc_hash;
>   int i;
>   apr_pool_t *iterpool;
>   const char *url;
> @@ -1089,18 +1089,21 @@ handle_externals_change(const struct ext
>   else
>     new_desc = NULL;
>
> -  new_desc_hash = apr_hash_make(scratch_pool);
> +  old_desc_hash = apr_hash_make(scratch_pool);
>
>   /* Create a hash of our new item array so that we can efficiently generate
>      a diff for them. */
> -  for (i = 0; new_desc && (i < new_desc->nelts); i++)
> +  for (i = 0; old_desc && (i < old_desc->nelts); i++)
>     {
>       svn_wc_external_item2_t *item;
> +      const char *target_abspath;
>
> -      item = APR_ARRAY_IDX(new_desc, i, svn_wc_external_item2_t *);
> +      item = APR_ARRAY_IDX(old_desc, i, svn_wc_external_item2_t *);
>
> -      apr_hash_set(new_desc_hash, item->target_dir,
> -                   APR_HASH_KEY_STRING, item);
> +      target_abspath = svn_dirent_join(local_abspath, item->target_dir,
> +                                       scratch_pool);
> +
> +      apr_hash_set(old_desc_hash, target_abspath, APR_HASH_KEY_STRING, item);
>     }
>
>   SVN_ERR(svn_wc__node_get_url(&url, eb->ctx->wc_ctx, local_abspath,
> @@ -1108,20 +1111,20 @@ handle_externals_change(const struct ext
>
>   SVN_ERR_ASSERT(url);
>
> -  for (i = 0; old_desc && (i < old_desc->nelts); i++)
> +  for (i = 0; new_desc && (i < new_desc->nelts); i++)
>     {
>       svn_wc_external_item2_t *old_item;
>       svn_wc_external_item2_t *new_item;
>       const char *target_abspath;
>
> -      old_item = APR_ARRAY_IDX(old_desc, i, svn_wc_external_item2_t *);
> +      new_item = APR_ARRAY_IDX(new_desc, i, svn_wc_external_item2_t *);
>
>       svn_pool_clear(iterpool);
>
> -      target_abspath = svn_dirent_join(local_abspath, old_item->target_dir,
> +      target_abspath = svn_dirent_join(local_abspath, new_item->target_dir,
>                                        iterpool);
>
> -      new_item = apr_hash_get(new_desc_hash, old_item->target_dir,
> +      old_item = apr_hash_get(old_desc_hash, target_abspath,
>                               APR_HASH_KEY_STRING);
>
>       SVN_ERR(handle_external_item_change_wrapper(eb, local_abspath, url,
> @@ -1129,29 +1132,29 @@ handle_externals_change(const struct ext
>                                                   old_item, new_item,
>                                                   iterpool));
>
> -      /* And remove already processed items from the hash */
> -      if (new_item)
> -        apr_hash_set(new_desc_hash, new_item->target_dir,
> +      /* And remove already processed items from the to-remove hash */
> +      if (old_item)
> +        apr_hash_set(old_desc_hash, target_abspath,
>                      APR_HASH_KEY_STRING, NULL);
>     }
> -  for (i = 0; new_desc && (i < new_desc->nelts); i++)
> +  for (i = 0; old_desc && (i < old_desc->nelts); i++)
>     {
> -      svn_wc_external_item2_t *new_item;
> -      new_item = APR_ARRAY_IDX(new_desc, i, svn_wc_external_item2_t *);
> +      svn_wc_external_item2_t *item;
> +      const char *target_abspath;
> +
> +      item = APR_ARRAY_IDX(old_desc, i, svn_wc_external_item2_t *);
>
>       svn_pool_clear(iterpool);
>
> +      target_abspath = svn_dirent_join(local_abspath, item->target_dir,
> +                                       iterpool);
> +
>       /* Only if the item is still in the hash, we should process it */
> -      if (apr_hash_get(new_desc_hash, new_item->target_dir,
> -                       APR_HASH_KEY_STRING))
> +      if (apr_hash_get(old_desc_hash, target_abspath, APR_HASH_KEY_STRING))
>         {
> -          const char *target_abspath = svn_dirent_join(local_abspath,
> -                                                       new_item->target_dir,
> -                                                       iterpool);
> -
>           SVN_ERR(handle_external_item_change_wrapper(eb, local_abspath, url,
>                                                       target_abspath,
> -                                                      NULL, new_item,
> +                                                      item, NULL,
>                                                       iterpool));
>         }
>     }
>
>
>

-- 
Thanks
Mark Phippard
http://markphip.blogspot.com/
Received on 2011-05-26 16:47:08 CEST

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.