You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2013/04/06 19:46:45 UTC
svn commit: r1465280 - in /subversion/trunk/subversion: include/svn_ra.h
libsvn_ra_local/ra_plugin.c libsvn_ra_serf/update.c
Author: julianfoad
Date: Sat Apr 6 17:46:45 2013
New Revision: 1465280
URL: http://svn.apache.org/r1465280
Log:
Improve pool usage in RA-serf and RA-local by making use of the scratch pool
that is available during the 'switch' operation since r1449413.
The RA-svn implementation currently has no use for a scratch pool in that
context, so there is no change there.
* subversion/include/svn_ra.h
(svn_ra_do_switch): State what is allocated in the result pool.
(svn_ra_get_inherited_props): Tweak the log message for consistency.
* subversion/libsvn_ra_local/ra_plugin.c
(get_username): Clarify pool usage in the doc string, fix typos, and
rename 'pool' to 'scratch_pool'.
(make_reporter): Switch to dual pools.
(svn_ra_local__do_update,
svn_ra_local__do_status,
svn_ra_local__do_diff): Track the change to make_reporter().
(svn_ra_local__do_switch): Pass the scratch pool to make_reporter().
* subversion/libsvn_ra_serf/update.c
(make_update_reporter): Switch to dual pools.
(svn_ra_serf__do_update,
svn_ra_serf__do_diff,
svn_ra_serf__do_status): Track the change to make_update_reporter().
(svn_ra_serf__do_switch): Pass the scratch pool to make_update_reporter().
Modified:
subversion/trunk/subversion/include/svn_ra.h
subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c
subversion/trunk/subversion/libsvn_ra_serf/update.c
Modified: subversion/trunk/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_ra.h?rev=1465280&r1=1465279&r2=1465280&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_ra.h (original)
+++ subversion/trunk/subversion/include/svn_ra.h Sat Apr 6 17:46:45 2013
@@ -1176,8 +1176,8 @@ svn_ra_do_update(svn_ra_session_t *sessi
* and the addition of another, but if this flag is @c TRUE,
* unrelated items will be diffed as if they were related.
*
- * Use @a result_pool for memory allocation and @a scratch_pool for
- * temporary work.
+ * Allocate @a *reporter and @a *report_baton in @a result_pool. Use
+ * @a scratch_pool for temporary allocations.
*
* @note Pre Subversion 1.8 svnserve based servers always ignore ancestry
* and never send copyfrom data.
@@ -1949,7 +1949,7 @@ svn_ra_get_deleted_rev(svn_ra_session_t
* paths relative to the repository root URL (of the repository which
* @a ra_session is associated).
*
- * Allocated @a *inherited_props in @a result_pool, use @a scratch_pool
+ * Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool
* for temporary allocations.
*
* @since New in 1.8.
Modified: subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c?rev=1465280&r1=1465279&r2=1465280&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c (original)
+++ subversion/trunk/subversion/libsvn_ra_local/ra_plugin.c Sat Apr 6 17:46:45 2013
@@ -71,10 +71,13 @@ cleanup_access(void *data)
}
-/* Fetch a username for use with SESS, and store it in SESS->username. */
+/* Fetch a username for use with SESSION, and store it in SESSION->username.
+ *
+ * Allocate the username in SESSION->pool. Use SCRATCH_POOL for temporary
+ * allocations. */
static svn_error_t *
get_username(svn_ra_session_t *session,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
svn_ra_local__session_baton_t *sess = session->priv;
@@ -93,7 +96,7 @@ get_username(svn_ra_session_t *session,
SVN_AUTH_CRED_USERNAME,
sess->uuid, /* realmstring */
sess->callbacks->auth_baton,
- pool));
+ scratch_pool));
/* No point in calling next_creds(), since that assumes that the
first_creds() somehow failed to authenticate. But there's no
@@ -104,7 +107,8 @@ get_username(svn_ra_session_t *session,
{
sess->username = apr_pstrdup(session->pool,
username_creds->username);
- svn_error_clear(svn_auth_save_credentials(iterstate, pool));
+ svn_error_clear(svn_auth_save_credentials(iterstate,
+ scratch_pool));
}
else
sess->username = "";
@@ -279,7 +283,9 @@ static const svn_ra_reporter3_t ra_local
* they have already wrapped with the same cancellation editor, so it ends
* up double-wrapped.
*
- * ... */
+ * Allocate @a *reporter and @a *report_baton in @a result_pool. Use
+ * @a scratch_pool for temporary allocations.
+ */
static svn_error_t *
make_reporter(svn_ra_session_t *session,
const svn_ra_reporter3_t **reporter,
@@ -293,7 +299,8 @@ make_reporter(svn_ra_session_t *session,
svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *editor,
void *edit_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_ra_local__session_baton_t *sess = session->priv;
void *rbaton;
@@ -301,14 +308,14 @@ make_reporter(svn_ra_session_t *session,
/* Get the HEAD revision if one is not supplied. */
if (! SVN_IS_VALID_REVNUM(revision))
- SVN_ERR(svn_fs_youngest_rev(&revision, sess->fs, pool));
+ SVN_ERR(svn_fs_youngest_rev(&revision, sess->fs, scratch_pool));
/* If OTHER_URL was provided, validate it and convert it into a
regular filesystem path. */
if (other_url)
{
const char *other_relpath
- = svn_uri_skip_ancestor(sess->repos_url, other_url, pool);
+ = svn_uri_skip_ancestor(sess->repos_url, other_url, scratch_pool);
/* Sanity check: the other_url better be in the same repository as
the original session url! */
@@ -319,13 +326,14 @@ make_reporter(svn_ra_session_t *session,
"is not the same repository as\n"
"'%s'"), other_url, sess->repos_url);
- other_fs_path = apr_pstrcat(pool, "/", other_relpath, (char *)NULL);
+ other_fs_path = apr_pstrcat(scratch_pool, "/", other_relpath,
+ (char *)NULL);
}
/* Pass back our reporter */
*reporter = &ra_local_reporter;
- SVN_ERR(get_username(session, pool));
+ SVN_ERR(get_username(session, scratch_pool));
if (sess->callbacks)
SVN_ERR(svn_delta_get_cancellation_editor(sess->callbacks->cancel_func,
@@ -334,7 +342,7 @@ make_reporter(svn_ra_session_t *session,
edit_baton,
&editor,
&edit_baton,
- pool));
+ result_pool));
/* Build a reporter baton. */
SVN_ERR(svn_repos_begin_report3(&rbaton,
@@ -353,11 +361,11 @@ make_reporter(svn_ra_session_t *session,
NULL,
1024 * 1024, /* process-local transfers
should be fast */
- pool));
+ result_pool));
/* Wrap the report baton given us by the repos layer with our own
reporter baton. */
- *report_baton = make_reporter_baton(sess, rbaton, pool);
+ *report_baton = make_reporter_baton(sess, rbaton, result_pool);
return SVN_NO_ERROR;
}
@@ -826,7 +834,7 @@ svn_ra_local__do_update(svn_ra_session_t
FALSE,
update_editor,
update_baton,
- pool);
+ pool, pool);
}
@@ -857,7 +865,7 @@ svn_ra_local__do_switch(svn_ra_session_t
ignore_ancestry,
update_editor,
update_baton,
- result_pool);
+ result_pool, scratch_pool);
}
@@ -884,7 +892,7 @@ svn_ra_local__do_status(svn_ra_session_t
FALSE,
status_editor,
status_baton,
- pool);
+ pool, pool);
}
@@ -914,7 +922,7 @@ svn_ra_local__do_diff(svn_ra_session_t *
ignore_ancestry,
update_editor,
update_baton,
- pool);
+ pool, pool);
}
Modified: subversion/trunk/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/update.c?rev=1465280&r1=1465279&r2=1465280&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/update.c Sat Apr 6 17:46:45 2013
@@ -3152,10 +3152,9 @@ make_update_reporter(svn_ra_session_t *r
svn_boolean_t send_copyfrom_args,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *result_pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- /* ### would be nice to get a SCRATCH_POOL passed to us. */
- apr_pool_t *scratch_pool = svn_pool_create(result_pool);
report_context_t *report;
const svn_delta_editor_t *filter_editor;
void *filter_baton;
@@ -3336,7 +3335,6 @@ make_update_reporter(svn_ra_session_t *r
SVN_ERR(svn_io_file_write_full(report->body_file, buf->data, buf->len,
NULL, scratch_pool));
- svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
@@ -3353,12 +3351,16 @@ svn_ra_serf__do_update(svn_ra_session_t
apr_pool_t *pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
- return make_update_reporter(ra_session, reporter, report_baton,
- revision_to_update_to,
- session->session_url.path, NULL, update_target,
- depth, FALSE, TRUE, send_copyfrom_args,
- update_editor, update_baton, pool);
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision_to_update_to,
+ session->session_url.path, NULL, update_target,
+ depth, FALSE, TRUE, send_copyfrom_args,
+ update_editor, update_baton,
+ pool, scratch_pool));
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -3376,12 +3378,16 @@ svn_ra_serf__do_diff(svn_ra_session_t *r
apr_pool_t *pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
- return make_update_reporter(ra_session, reporter, report_baton,
- revision,
- session->session_url.path, versus_url, diff_target,
- depth, ignore_ancestry, text_deltas, FALSE,
- diff_editor, diff_baton, pool);
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision,
+ session->session_url.path, versus_url, diff_target,
+ depth, ignore_ancestry, text_deltas, FALSE,
+ diff_editor, diff_baton,
+ pool, scratch_pool));
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -3396,12 +3402,16 @@ svn_ra_serf__do_status(svn_ra_session_t
apr_pool_t *pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
- return make_update_reporter(ra_session, reporter, report_baton,
- revision,
- session->session_url.path, NULL, status_target,
- depth, FALSE, FALSE, FALSE,
- status_editor, status_baton, pool);
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision,
+ session->session_url.path, NULL, status_target,
+ depth, FALSE, FALSE, FALSE,
+ status_editor, status_baton,
+ pool, scratch_pool));
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -3430,7 +3440,7 @@ svn_ra_serf__do_switch(svn_ra_session_t
TRUE /* text_deltas */,
send_copyfrom_args,
switch_editor, switch_baton,
- result_pool);
+ result_pool, scratch_pool);
}
/* Helper svn_ra_serf__get_file(). Attempts to fetch file contents