summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2021-08-11 23:01:37 +0300
committerSergey Poznyakoff <gray@gnu.org>2021-08-11 23:01:37 +0300
commitf77b0273db2d1f0cc1ba2d3256acfab1bda1f584 (patch)
tree5ec70897287e0757b00ae993d27cf02903d7919c
parent038872b1582c6b99cc352551875aba0e81f6b5f0 (diff)
downloadgdbm-f77b0273db2d1f0cc1ba2d3256acfab1bda1f584.tar.gz
Fix duplicated mmap in gdbm_recover
* src/recover.c (_gdbm_finish_transfer): Reuse memory mapping from the intermediate dbm structure.
-rw-r--r--src/recover.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/recover.c b/src/recover.c
index 9a89ce8..76a372c 100644
--- a/src/recover.c
+++ b/src/recover.c
@@ -174,15 +174,16 @@ _gdbm_finish_transfer (GDBM_FILE dbf, GDBM_FILE new_dbf,
dbf->file_size = -1;
+ dbf->mapped_size_max = new_dbf->mapped_size_max;
+ dbf->mapped_region = new_dbf->mapped_region;
+ dbf->mapped_size = new_dbf->mapped_size;
+ dbf->mapped_pos = new_dbf->mapped_pos;
+ dbf->mapped_off = new_dbf->mapped_off;
+ dbf->mmap_preread = new_dbf->mmap_preread;
+
free (new_dbf->name);
free (new_dbf);
- #if HAVE_MMAP
- /* Re-initialize mapping if required */
- if (dbf->memory_mapping)
- _gdbm_mapped_init (dbf);
- #endif
-
/* Make sure the new database is all on disk. */
gdbm_file_sync (dbf);