aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2019-11-13 12:46:54 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2019-11-13 12:47:33 +0200
commitefaefe4cee95d2dd4829c0ecaafb9f2584cb9786 (patch)
treee3003f1581dc69d5c8764ffa5d9b7aca7c3c0650
parentdc176a5cdc841e05876d5e7b52cfb1b7bac2d333 (diff)
downloadgdbm-efaefe4cee95d2dd4829c0ecaafb9f2584cb9786.tar.gz
gdbm-efaefe4cee95d2dd4829c0ecaafb9f2584cb9786.tar.bz2
Don't cache data pages
* src/findkey.c (_gdbm_read_entry): Revert dc176a5c
-rw-r--r--src/findkey.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/findkey.c b/src/findkey.c
index f82b422..bff1f45 100644
--- a/src/findkey.c
+++ b/src/findkey.c
@@ -43,6 +43,8 @@ gdbm_bucket_element_valid_p (GDBM_FILE dbf, int elem_loc)
char *
_gdbm_read_entry (GDBM_FILE dbf, int elem_loc)
{
+ int rc;
+ off_t file_pos;
int key_size;
int data_size;
size_t dsize;
@@ -100,11 +102,32 @@ _gdbm_read_entry (GDBM_FILE dbf, int elem_loc)
return NULL;
}
}
+#if 1
+ /* Read into the cache. */
+ file_pos = gdbm_file_seek (dbf, dbf->bucket->h_table[elem_loc].data_pointer,
+ SEEK_SET);
+ if (file_pos != dbf->bucket->h_table[elem_loc].data_pointer)
+ {
+ GDBM_SET_ERRNO2 (dbf, GDBM_FILE_SEEK_ERROR, TRUE, GDBM_DEBUG_LOOKUP);
+ _gdbm_fatal (dbf, _("lseek error"));
+ return NULL;
+ }
+ rc = _gdbm_full_read (dbf, data_ca->dptr, key_size+data_size);
+ if (rc)
+ {
+ GDBM_DEBUG (GDBM_DEBUG_ERR|GDBM_DEBUG_LOOKUP|GDBM_DEBUG_READ,
+ "%s: error reading entry: %s",
+ dbf->name, gdbm_db_strerror (dbf));
+ dbf->need_recovery = TRUE;
+ _gdbm_fatal (dbf, gdbm_db_strerror (dbf));
+ return NULL;
+ }
+#else
if (_gdbm_fetch_data (dbf, dbf->bucket->h_table[elem_loc].data_pointer,
key_size + data_size, data_ca->dptr))
return NULL;
-
+#endif
return data_ca->dptr;
}

Return to:

Send suggestions and report system problems to the System administrator.