Strange… this should never be necessarily when *removing* something from a hash (value =NULL).
I think you see some kind of other problem.
Bert
Sent from Surface
From: Philip Martin
Sent: Tuesday, June 2, 2015 5:19 PM
To: commits_at_subversion.apache.org
Author: philip
Date: Tue Jun 2 15:19:26 2015
New Revision: 1683126
URL: http://svn.apache.org/r1683126
Log:
Avoid using pool memory after clear in FSX.
* subversion/libsvn_fs_x/cached_data.c
(read_dir_entries): Copy hashed values into hash pool.
Modified:
subversion/trunk/subversion/libsvn_fs_x/cached_data.c
Modified: subversion/trunk/subversion/libsvn_fs_x/cached_data.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/cached_data.c?rev=1683126&r1=1683125&r2=1683126&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/cached_data.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/cached_data.c Tue Jun 2 15:19:26 2015
@@ -2494,7 +2494,9 @@ read_dir_entries(apr_array_header_t *ent
{
/* We must be in incremental mode */
assert(hash);
- apr_hash_set(hash, entry.key, entry.keylen, NULL);
+ apr_hash_set(hash,
+ apr_pstrmemdup(scratch_pool, entry.key, entry.keylen),
+ entry.keylen, NULL);
continue;
}
@@ -2534,7 +2536,9 @@ read_dir_entries(apr_array_header_t *ent
/* In incremental mode, update the hash; otherwise, write to the
* final array. */
if (incremental)
- apr_hash_set(hash, entry.key, entry.keylen, dirent);
+ apr_hash_set(hash,
+ apr_pstrmemdup(scratch_pool, entry.key, entry.keylen),
+ entry.keylen, dirent);
else
APR_ARRAY_PUSH(entries, svn_fs_x__dirent_t *) = dirent;
}
Received on 2015-06-02 18:32:38 CEST