From 5557f48506e533cdf58fda35a38eb471d4736cb9 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Mon, 2 Aug 2021 12:59:36 +0300 Subject: Fix gdbm_recover * src/recover.c (_gdbm_finish_transfer): Close snapshot descriptors, if any. Restore xheader, avail, and avail_size members. --- src/recover.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/recover.c b/src/recover.c index b4b577c..0a82507 100644 --- a/src/recover.c +++ b/src/recover.c @@ -105,6 +105,8 @@ _gdbm_finish_transfer (GDBM_FILE dbf, GDBM_FILE new_dbf, return -1; } + _gdbmsync_done (dbf); + #if HAVE_MMAP _gdbm_mapped_unmap (dbf); #endif @@ -153,6 +155,10 @@ _gdbm_finish_transfer (GDBM_FILE dbf, GDBM_FILE new_dbf, dbf->bucket = new_dbf->bucket; dbf->bucket_dir = new_dbf->bucket_dir; + dbf->avail = new_dbf->avail; + dbf->avail_size = new_dbf->avail_size; + dbf->xheader = new_dbf->xheader; + dbf->cache_size = new_dbf->cache_size; dbf->cache_num = new_dbf->cache_num; dbf->cache_tree = new_dbf->cache_tree; @@ -399,6 +405,7 @@ gdbm_recover (GDBM_FILE dbf, gdbm_recovery *rcvr, int flags) new_dbf = gdbm_fd_open (fd, new_name, dbf->header->block_size, GDBM_WRCREAT | (dbf->cloexec ? GDBM_CLOEXEC : 0) + | (dbf->xheader ? GDBM_NUMSYNC : 0) | GDBM_CLOERROR, dbf->fatal_err); SAVE_ERRNO (free (new_name)); -- cgit v1.2.1