aboutsummaryrefslogtreecommitdiff
path: root/reftable/reader.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-08-23 16:12:51 +0200
committerJunio C Hamano <gitster@pobox.com>2024-08-23 08:04:47 -0700
commit89eada4ea1f7a9c0a5f9b9e29592daa0847a79fc (patch)
tree79d58bba78b50872ed20e3f88abcd18b3f085a09 /reftable/reader.c
parentd857469d850b5e020de181ec07806872531d35e7 (diff)
downloadgit-89eada4ea1f7a9c0a5f9b9e29592daa0847a79fc.tar.xz
reftable/reader: keep readers alive during iteration
The lifetime of a table iterator may survive the lifetime of a reader when the stack gets reloaded. Keep the reader from being released by increasing its refcount while the iterator is still being used. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'reftable/reader.c')
-rw-r--r--reftable/reader.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/reftable/reader.c b/reftable/reader.c
index 64a0953e68..f877099087 100644
--- a/reftable/reader.c
+++ b/reftable/reader.c
@@ -175,6 +175,7 @@ static int table_iter_init(struct table_iter *ti, struct reftable_reader *r)
{
struct block_iter bi = BLOCK_ITER_INIT;
memset(ti, 0, sizeof(*ti));
+ reftable_reader_incref(r);
ti->r = r;
ti->bi = bi;
return 0;
@@ -262,6 +263,7 @@ static void table_iter_close(struct table_iter *ti)
{
table_iter_block_done(ti);
block_iter_close(&ti->bi);
+ reftable_reader_decref(ti->r);
}
static int table_iter_next_block(struct table_iter *ti)