diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2021-08-02 12:59:36 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2021-08-02 12:59:36 +0300 |
commit | 5557f48506e533cdf58fda35a38eb471d4736cb9 (patch) | |
tree | 2e1b3504fb68980eabce77112c2d7f5bb57c32b5 | |
parent | 6f0ec93a12ba936d60cb3a34b8df07145774d24c (diff) | |
download | gdbm-5557f48506e533cdf58fda35a38eb471d4736cb9.tar.gz |
Fix gdbm_recover
* src/recover.c (_gdbm_finish_transfer): Close snapshot descriptors,
if any.
Restore xheader, avail, and avail_size members.
-rw-r--r-- | src/recover.c | 7 |
1 files changed, 7 insertions, 0 deletions
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)); |