You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Yoshiki Hayashi <yo...@xemacs.org> on 2002/01/24 05:14:09 UTC
[PATCH] Trace editor should free dir_baton when it's done.
While I was investigating issue 602 (importing large tree
bloats memory), I found that trace editor never frees memory
before it dies. The directory with compiled Linux kernel
and source contains about 12000 directory and files so that
amounts to about 12000 * (size of dir_baton or file_baton +
length of path). I don't think it uses much memory but it
would nicer not to consume memory linear to the number of
files and directories in a tree. Here's a patch to create
and destroy subpool based on the implementation of
libsvn_ra_local/commit_editor.c
Implement freeing directory button using reference counting.
* trace-commit.c
(struct dir_baton): New member, subpool and ref_count.
(decrement_dir_ref_count): New function, copied from
libsvn_ra_local/commit_editor.
(open_root): Create subpool corresponding the directory. Initialize refcount.
(add_directory): Create subpool. Initialize refcount. Increment parent's
refcount.
(open_directory): Ditto.
(close_directory): Call decrement_dir_ref_count.
(clsoe_file): Ditto.
(add_file): Increase parent's refcount.
(open_file): Ditto.
Index: ./subversion/clients/cmdline/trace-commit.c
===================================================================
--- ./subversion/clients/cmdline/trace-commit.c
+++ ./subversion/clients/cmdline/trace-commit.c Thu Jan 24 13:39:53 2002
@@ -51,6 +51,8 @@
svn_stringbuf_t *path;
svn_boolean_t added;
svn_boolean_t prop_changed;
+ apr_pool_t *subpool;
+ int ref_count;
};
@@ -66,14 +68,44 @@
static svn_error_t *
+decrement_dir_ref_count (struct dir_baton *db)
+{
+ if (db == NULL)
+ return SVN_NO_ERROR;
+
+ db->ref_count--;
+
+ /* Check to see if *any* child batons still depend on this
+ directory's pool. */
+ if (db->ref_count == 0)
+ {
+ struct dir_baton *dbparent = db->parent_dir_baton;
+
+ /* Destroy all memory used by this baton, including the baton
+ itself! */
+ svn_pool_destroy (db->subpool);
+
+ /* Tell your parent that you're gone. */
+ SVN_ERR (decrement_dir_ref_count (dbparent));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
open_root (void *edit_baton, svn_revnum_t base_revision, void **root_baton)
{
+ apr_pool_t *subpool;
struct edit_baton *eb = edit_baton;
- struct dir_baton *rb = apr_pcalloc (eb->pool, sizeof (*rb));
+ struct dir_baton *rb;
+ subpool = svn_pool_create (eb->pool);;
+ rb = apr_pcalloc (eb->pool, sizeof (*rb));
rb->edit_baton = eb;
rb->parent_dir_baton = NULL;
rb->path = eb->initial_path;
+ rb->subpool = subpool;
+ rb->ref_count = 1;
*root_baton = rb;
@@ -102,16 +134,21 @@
svn_revnum_t copyfrom_revision,
void **child_baton)
{
+ apr_pool_t *subpool;
struct dir_baton *parent_d = parent_baton;
- struct dir_baton *child_d
- = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
+ struct dir_baton *child_d;
+ subpool = svn_pool_create (parent_d->subpool);
+ child_d = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
child_d->edit_baton = parent_d->edit_baton;
child_d->parent_dir_baton = parent_d;
child_d->path = svn_stringbuf_dup (parent_d->path,
child_d->edit_baton->pool);
svn_path_add_component (child_d->path, name);
child_d->added = TRUE;
+ child_d->subpool = subpool;
+ child_d->ref_count = 1;
+ parent_d->ref_count++;
printf ("Adding %s\n", child_d->path->data);
*child_baton = child_d;
@@ -126,15 +163,20 @@
svn_revnum_t base_revision,
void **child_baton)
{
+ apr_pool_t *subpool;
struct dir_baton *parent_d = parent_baton;
- struct dir_baton *child_d
- = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
+ struct dir_baton *child_d;
+ subpool = svn_pool_create (parent_d->subpool);
+ child_d = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
child_d->edit_baton = parent_d->edit_baton;
child_d->parent_dir_baton = parent_d;
child_d->path = svn_stringbuf_dup (parent_d->path,
child_d->edit_baton->pool);
svn_path_add_component (child_d->path, name);
+ child_d->subpool = subpool;
+ child_d->ref_count = 1;
+ parent_d->ref_count++;
*child_baton = child_d;
@@ -153,6 +195,7 @@
if (db->prop_changed)
printf ("Sending %s\n", db->path->data);
+ decrement_dir_ref_count (db);
return SVN_NO_ERROR;
}
@@ -168,7 +211,8 @@
fb->path->data);
else
printf ("Sending %s\n", fb->path->data);
-
+
+ decrement_dir_ref_count (fb->parent_dir_baton);
return SVN_NO_ERROR;
}
@@ -218,6 +262,8 @@
child_fb->binary = FALSE;
*file_baton = child_fb;
+ parent_d->ref_count++;
+
return SVN_NO_ERROR;
}
@@ -238,6 +284,8 @@
svn_path_add_component (child_fb->path, name);
*file_baton = child_fb;
+
+ parent_d->ref_count++;
return SVN_NO_ERROR;
}
--
Yoshiki Hayashi
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] Trace editor should free dir_baton when it's done.
Posted by Karl Fogel <kf...@newton.ch.collab.net>.
Yoshiki Hayashi <yo...@xemacs.org> writes:
> > > > refcount.
> > > >(open_directory): Ditto.
> > > >(close_directory): Call decrement_dir_ref_count.
> > > >(clsoe_file): Ditto.
> > ^^^^
> > as an unfeasibly tiny niggle, I guess this typo should be fixed before the
> > commit...
By the way, there's one other tiny problem in the log message:
> * trace-commit.c
>
> (struct dir_baton): New member, subpool and ref_count.
"New member" should be be "New members".
I don't see any other problems, +1 on committing.
-K
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] Trace editor should free dir_baton when it's done.
Posted by Yoshiki Hayashi <yo...@xemacs.org>.
Karl Fogel <kf...@newton.ch.collab.net> writes:
> I have only a few concerns below. Actually, the same concern three
> times. With the changes below, I'd say go ahead and commit it. (I
> assume it already passes "make check" for you, of course -- I didn't
> build the patch myself, just looked at it.)
Yes, I reran it with fixes you suggested and it passed all
tests (modulo I need to comment out new $EDITOR code to run
client tests).
> Thanks for the patch, Yoshiki!
You're welcome. But more simple and important patch I
attached to issuezilla seems to go unnoticed so I'll send it
to here, too. (I didn't know plain/text attachment wasn't
sent as is to bug@subversion.)
> `rb' should be created in `subpool', not `eb->pool', right? That way
> it fulfills the claim made by the comment in the middle of
> decrement_dir_ref_count().
Yes. Thanks for careful review. I found another bug in my
patch. File button should be allocated from directory's
pool, not from edit_baton's. I was wondering why memory
consumption doesn't change much and this was the reason.
Could you review this new patch? This passes make check and
I believe it is bug free.
Thom May <th...@planetarytramp.net> writes:
> > >(add_directory): Create subpool. Initialize refcount. Increment parent's
> > > refcount.
> > >(open_directory): Ditto.
> > >(close_directory): Call decrement_dir_ref_count.
> > >(clsoe_file): Ditto.
> ^^^^
> as an unfeasibly tiny niggle, I guess this typo should be fixed before the
> commit...
Thanks.
Implement freeing directory button using reference counting.
* trace-commit.c
(struct dir_baton): New member, subpool and ref_count.
(decrement_dir_ref_count): New function, copied from
libsvn_ra_local/commit_editor.
(open_root): Create subpool corresponding the directory. Initialize refcount.
(add_directory): Create subpool. Initialize refcount. Increment parent's
refcount.
(open_directory): Ditto.
(close_directory): Call decrement_dir_ref_count.
(close_file): Ditto.
(add_file): Increase parent's refcount. Use parent directory's pool.
(open_file): Ditto.
Index: ./subversion/clients/cmdline/trace-commit.c
===================================================================
--- ./subversion/clients/cmdline/trace-commit.c
+++ ./subversion/clients/cmdline/trace-commit.c Fri Jan 25 22:04:28 2002
@@ -51,6 +51,8 @@
svn_stringbuf_t *path;
svn_boolean_t added;
svn_boolean_t prop_changed;
+ apr_pool_t *subpool;
+ int ref_count;
};
@@ -66,14 +68,44 @@
static svn_error_t *
+decrement_dir_ref_count (struct dir_baton *db)
+{
+ if (db == NULL)
+ return SVN_NO_ERROR;
+
+ db->ref_count--;
+
+ /* Check to see if *any* child batons still depend on this
+ directory's pool. */
+ if (db->ref_count == 0)
+ {
+ struct dir_baton *dbparent = db->parent_dir_baton;
+
+ /* Destroy all memory used by this baton, including the baton
+ itself! */
+ svn_pool_destroy (db->subpool);
+
+ /* Tell your parent that you're gone. */
+ SVN_ERR (decrement_dir_ref_count (dbparent));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
open_root (void *edit_baton, svn_revnum_t base_revision, void **root_baton)
{
+ apr_pool_t *subpool;
struct edit_baton *eb = edit_baton;
- struct dir_baton *rb = apr_pcalloc (eb->pool, sizeof (*rb));
+ struct dir_baton *rb;
+ subpool = svn_pool_create (eb->pool);;
+ rb = apr_pcalloc (subpool, sizeof (*rb));
rb->edit_baton = eb;
rb->parent_dir_baton = NULL;
rb->path = eb->initial_path;
+ rb->subpool = subpool;
+ rb->ref_count = 1;
*root_baton = rb;
@@ -102,16 +134,21 @@
svn_revnum_t copyfrom_revision,
void **child_baton)
{
+ apr_pool_t *subpool;
struct dir_baton *parent_d = parent_baton;
- struct dir_baton *child_d
- = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
+ struct dir_baton *child_d;
+ subpool = svn_pool_create (parent_d->edit_baton->pool);
+ child_d = apr_pcalloc (subpool, sizeof (*child_d));
child_d->edit_baton = parent_d->edit_baton;
child_d->parent_dir_baton = parent_d;
child_d->path = svn_stringbuf_dup (parent_d->path,
child_d->edit_baton->pool);
svn_path_add_component (child_d->path, name);
child_d->added = TRUE;
+ child_d->subpool = subpool;
+ child_d->ref_count = 1;
+ parent_d->ref_count++;
printf ("Adding %s\n", child_d->path->data);
*child_baton = child_d;
@@ -126,15 +163,20 @@
svn_revnum_t base_revision,
void **child_baton)
{
+ apr_pool_t *subpool;
struct dir_baton *parent_d = parent_baton;
- struct dir_baton *child_d
- = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
+ struct dir_baton *child_d;
+ subpool = svn_pool_create (parent_d->edit_baton->pool);
+ child_d = apr_pcalloc (subpool, sizeof (*child_d));
child_d->edit_baton = parent_d->edit_baton;
child_d->parent_dir_baton = parent_d;
child_d->path = svn_stringbuf_dup (parent_d->path,
child_d->edit_baton->pool);
svn_path_add_component (child_d->path, name);
+ child_d->subpool = subpool;
+ child_d->ref_count = 1;
+ parent_d->ref_count++;
*child_baton = child_d;
@@ -153,6 +195,7 @@
if (db->prop_changed)
printf ("Sending %s\n", db->path->data);
+ decrement_dir_ref_count (db);
return SVN_NO_ERROR;
}
@@ -168,7 +211,8 @@
fb->path->data);
else
printf ("Sending %s\n", fb->path->data);
-
+
+ decrement_dir_ref_count (fb->parent_dir_baton);
return SVN_NO_ERROR;
}
@@ -208,7 +252,7 @@
{
struct dir_baton *parent_d = parent_baton;
struct file_baton *child_fb
- = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_fb));
+ = apr_pcalloc (parent_d->subpool, sizeof (*child_fb));
child_fb->parent_dir_baton = parent_d;
child_fb->path = svn_stringbuf_dup (parent_d->path,
@@ -218,6 +262,8 @@
child_fb->binary = FALSE;
*file_baton = child_fb;
+ parent_d->ref_count++;
+
return SVN_NO_ERROR;
}
@@ -230,7 +276,7 @@
{
struct dir_baton *parent_d = parent_baton;
struct file_baton *child_fb
- = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_fb));
+ = apr_pcalloc (parent_d->subpool, sizeof (*child_fb));
child_fb->parent_dir_baton = parent_d;
child_fb->path = svn_stringbuf_dup (parent_d->path,
@@ -238,6 +284,8 @@
svn_path_add_component (child_fb->path, name);
*file_baton = child_fb;
+
+ parent_d->ref_count++;
return SVN_NO_ERROR;
}
--
Yoshiki Hayashi
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] Trace editor should free dir_baton when it's done.
Posted by Karl Fogel <kf...@newton.ch.collab.net>.
Branko Čibej <br...@xbc.nu> writes:
> I don't see anything wrong with this patch. The idea is definitely sound.
> Needs another pair of eyes, but on the whole I recommend we commit it.
Just gave it another pair of eyes, and basically agree.
I have only a few concerns below. Actually, the same concern three
times. With the changes below, I'd say go ahead and commit it. (I
assume it already passes "make check" for you, of course -- I didn't
build the patch myself, just looked at it.)
Thanks for the patch, Yoshiki!
-Karl
> Index: ./subversion/clients/cmdline/trace-commit.c
> ===================================================================
> --- ./subversion/clients/cmdline/trace-commit.c
> +++ ./subversion/clients/cmdline/trace-commit.c
>
> [...]
>
> static svn_error_t *
> +decrement_dir_ref_count (struct dir_baton *db)
> +{
> + if (db == NULL)
> + return SVN_NO_ERROR;
> +
> + db->ref_count--;
> +
> + /* Check to see if *any* child batons still depend on this
> + directory's pool. */
> + if (db->ref_count == 0)
> + {
> + struct dir_baton *dbparent = db->parent_dir_baton;
> +
> + /* Destroy all memory used by this baton, including the baton
> + itself! */
> + svn_pool_destroy (db->subpool);
> +
> + /* Tell your parent that you're gone. */
> + SVN_ERR (decrement_dir_ref_count (dbparent));
> + }
> +
> + return SVN_NO_ERROR;
> +}
> +
> +static svn_error_t *
> open_root (void *edit_baton, svn_revnum_t base_revision, void **root_baton)
> {
> + apr_pool_t *subpool;
> struct edit_baton *eb = edit_baton;
> - struct dir_baton *rb = apr_pcalloc (eb->pool, sizeof (*rb));
> + struct dir_baton *rb;
>
> + subpool = svn_pool_create (eb->pool);;
> + rb = apr_pcalloc (eb->pool, sizeof (*rb));
`rb' should be created in `subpool', not `eb->pool', right? That way
it fulfills the claim made by the comment in the middle of
decrement_dir_ref_count().
(Or one could change the comment in decrement_dir_ref_count(), I
suppose, but it seems cleaner to allocate the batons themselves in
their own subpools.)
> @@ -102,16 +134,21 @@
> svn_revnum_t copyfrom_revision,
> void **child_baton)
> {
> + apr_pool_t *subpool;
> struct dir_baton *parent_d = parent_baton;
> - struct dir_baton *child_d
> - = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
> + struct dir_baton *child_d;
>
> + subpool = svn_pool_create (parent_d->subpool);
> + child_d = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
Same thing regarding `child_d'.
> @@ -126,15 +163,20 @@
> svn_revnum_t base_revision,
> void **child_baton)
> {
> + apr_pool_t *subpool;
> struct dir_baton *parent_d = parent_baton;
> - struct dir_baton *child_d
> - = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
> + struct dir_baton *child_d;
>
> + subpool = svn_pool_create (parent_d->subpool);
> + child_d = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
Same.
-K
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] Trace editor should free dir_baton when it's done.
Posted by Karl Fogel <kf...@newton.ch.collab.net>.
Thom May <th...@planetarytramp.net> writes:
> as an unfeasibly tiny niggle, I guess this typo should be fixed before the
> commit...
Thom, thanks for spotting this. But (in case anyone isn't aware) it's
not so terribly important to fix these before the commit now, as we
can change log messages after committing pretty easily now:
http://svn.collab.net/scripts/tweak-log.cgi
-K
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] Trace editor should free dir_baton when it's done.
Posted by Thom May <th...@planetarytramp.net>.
* Branko ??ibej (brane@xbc.nu) wrote :
> I don't see anything wrong with this patch. The idea is definitely sound.
> Needs another pair of eyes, but on the whole I recommend we commit it.
>
> Yoshiki Hayashi wrote:
[...]
>
> >
> >Implement freeing directory button using reference counting.
> >* trace-commit.c
> >
[...]
> >(add_directory): Create subpool. Initialize refcount. Increment parent's
> > refcount.
> >(open_directory): Ditto.
> >(close_directory): Call decrement_dir_ref_count.
> >(clsoe_file): Ditto.
^^^^
as an unfeasibly tiny niggle, I guess this typo should be fixed before the
commit...
-Thom, easing into svn _very_ gradually ;-)
Re: [PATCH] Trace editor should free dir_baton when it's done.
Posted by Branko Čibej <br...@xbc.nu>.
I don't see anything wrong with this patch. The idea is definitely sound.
Needs another pair of eyes, but on the whole I recommend we commit it.
Yoshiki Hayashi wrote:
>While I was investigating issue 602 (importing large tree
>bloats memory), I found that trace editor never frees memory
>before it dies. The directory with compiled Linux kernel
>and source contains about 12000 directory and files so that
>amounts to about 12000 * (size of dir_baton or file_baton +
>length of path). I don't think it uses much memory but it
>would nicer not to consume memory linear to the number of
>files and directories in a tree. Here's a patch to create
>and destroy subpool based on the implementation of
>libsvn_ra_local/commit_editor.c
>
>Implement freeing directory button using reference counting.
>
>* trace-commit.c
>
>(struct dir_baton): New member, subpool and ref_count.
>(decrement_dir_ref_count): New function, copied from
> libsvn_ra_local/commit_editor.
>(open_root): Create subpool corresponding the directory. Initialize refcount.
>(add_directory): Create subpool. Initialize refcount. Increment parent's
> refcount.
>(open_directory): Ditto.
>(close_directory): Call decrement_dir_ref_count.
>(clsoe_file): Ditto.
>(add_file): Increase parent's refcount.
>(open_file): Ditto.
>
>Index: ./subversion/clients/cmdline/trace-commit.c
>===================================================================
>--- ./subversion/clients/cmdline/trace-commit.c
>+++ ./subversion/clients/cmdline/trace-commit.c Thu Jan 24 13:39:53 2002
>@@ -51,6 +51,8 @@
> svn_stringbuf_t *path;
> svn_boolean_t added;
> svn_boolean_t prop_changed;
>+ apr_pool_t *subpool;
>+ int ref_count;
> };
>
>
>@@ -66,14 +68,44 @@
>
>
> static svn_error_t *
>+decrement_dir_ref_count (struct dir_baton *db)
>+{
>+ if (db == NULL)
>+ return SVN_NO_ERROR;
>+
>+ db->ref_count--;
>+
>+ /* Check to see if *any* child batons still depend on this
>+ directory's pool. */
>+ if (db->ref_count == 0)
>+ {
>+ struct dir_baton *dbparent = db->parent_dir_baton;
>+
>+ /* Destroy all memory used by this baton, including the baton
>+ itself! */
>+ svn_pool_destroy (db->subpool);
>+
>+ /* Tell your parent that you're gone. */
>+ SVN_ERR (decrement_dir_ref_count (dbparent));
>+ }
>+
>+ return SVN_NO_ERROR;
>+}
>+
>+static svn_error_t *
> open_root (void *edit_baton, svn_revnum_t base_revision, void **root_baton)
> {
>+ apr_pool_t *subpool;
> struct edit_baton *eb = edit_baton;
>- struct dir_baton *rb = apr_pcalloc (eb->pool, sizeof (*rb));
>+ struct dir_baton *rb;
>
>+ subpool = svn_pool_create (eb->pool);;
>+ rb = apr_pcalloc (eb->pool, sizeof (*rb));
> rb->edit_baton = eb;
> rb->parent_dir_baton = NULL;
> rb->path = eb->initial_path;
>+ rb->subpool = subpool;
>+ rb->ref_count = 1;
>
> *root_baton = rb;
>
>@@ -102,16 +134,21 @@
> svn_revnum_t copyfrom_revision,
> void **child_baton)
> {
>+ apr_pool_t *subpool;
> struct dir_baton *parent_d = parent_baton;
>- struct dir_baton *child_d
>- = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
>+ struct dir_baton *child_d;
>
>+ subpool = svn_pool_create (parent_d->subpool);
>+ child_d = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
> child_d->edit_baton = parent_d->edit_baton;
> child_d->parent_dir_baton = parent_d;
> child_d->path = svn_stringbuf_dup (parent_d->path,
> child_d->edit_baton->pool);
> svn_path_add_component (child_d->path, name);
> child_d->added = TRUE;
>+ child_d->subpool = subpool;
>+ child_d->ref_count = 1;
>+ parent_d->ref_count++;
>
> printf ("Adding %s\n", child_d->path->data);
> *child_baton = child_d;
>@@ -126,15 +163,20 @@
> svn_revnum_t base_revision,
> void **child_baton)
> {
>+ apr_pool_t *subpool;
> struct dir_baton *parent_d = parent_baton;
>- struct dir_baton *child_d
>- = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
>+ struct dir_baton *child_d;
>
>+ subpool = svn_pool_create (parent_d->subpool);
>+ child_d = apr_pcalloc (parent_d->edit_baton->pool, sizeof (*child_d));
> child_d->edit_baton = parent_d->edit_baton;
> child_d->parent_dir_baton = parent_d;
> child_d->path = svn_stringbuf_dup (parent_d->path,
> child_d->edit_baton->pool);
> svn_path_add_component (child_d->path, name);
>+ child_d->subpool = subpool;
>+ child_d->ref_count = 1;
>+ parent_d->ref_count++;
>
> *child_baton = child_d;
>
>@@ -153,6 +195,7 @@
> if (db->prop_changed)
> printf ("Sending %s\n", db->path->data);
>
>+ decrement_dir_ref_count (db);
> return SVN_NO_ERROR;
> }
>
>@@ -168,7 +211,8 @@
> fb->path->data);
> else
> printf ("Sending %s\n", fb->path->data);
>-
>+
>+ decrement_dir_ref_count (fb->parent_dir_baton);
> return SVN_NO_ERROR;
> }
>
>@@ -218,6 +262,8 @@
> child_fb->binary = FALSE;
> *file_baton = child_fb;
>
>+ parent_d->ref_count++;
>+
> return SVN_NO_ERROR;
> }
>
>@@ -238,6 +284,8 @@
> svn_path_add_component (child_fb->path, name);
>
> *file_baton = child_fb;
>+
>+ parent_d->ref_count++;
>
> return SVN_NO_ERROR;
> }
>
>
--
Brane Čibej <br...@xbc.nu> http://www.xbc.nu/brane/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org