summaryrefslogtreecommitdiff
path: root/mysys/mf_keycache.c
diff options
context:
space:
mode:
authormonty@donna.mysql.com <>2000-09-07 04:55:17 +0300
committermonty@donna.mysql.com <>2000-09-07 04:55:17 +0300
commitbe5e4e72b67c1ce6d25ec6d961ed0f6b4d13a106 (patch)
treecd775f59b4803ef23e407df9d47af3ae7b517a13 /mysys/mf_keycache.c
parent0c07817b08812e18ecba76966cb84b562efb0d80 (diff)
downloadmariadb-git-be5e4e72b67c1ce6d25ec6d961ed0f6b4d13a106.tar.gz
Small bug fixes
Diffstat (limited to 'mysys/mf_keycache.c')
-rw-r--r--mysys/mf_keycache.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c
index eca22039444..db23c474564 100644
--- a/mysys/mf_keycache.c
+++ b/mysys/mf_keycache.c
@@ -42,6 +42,17 @@
#define CHANGED_BLOCKS_MASK (CHANGED_BLOCKS_HASH-1)
#define FLUSH_CACHE 2000 /* Sort this many blocks at once */
+typedef struct sec_link {
+ struct sec_link *next_hash,**prev_hash;/* Blocks linked acc. to hash-value */
+ struct sec_link *next_used,*prev_used;
+ struct sec_link *next_changed,**prev_changed;
+ File file;
+ my_off_t diskpos;
+ byte *buffer;
+ my_bool changed;
+} SEC_LINK;
+
+
static uint find_next_bigger_power(uint value);
static SEC_LINK *find_key_block(int file,my_off_t filepos,int *error);
@@ -287,7 +298,6 @@ byte *key_cache_read(File file, my_off_t filepos, byte *buff, uint length,
} while ((length-= read_length));
pthread_mutex_unlock(&THR_LOCK_keycache);
return(start);
- pthread_mutex_unlock(&THR_LOCK_keycache);
}
_my_cache_r_requests++;
_my_cache_read++;
@@ -457,6 +467,7 @@ static SEC_LINK *find_key_block(int file, my_off_t filepos, int *error)
static void free_block(SEC_LINK *used)
{
used->file= -1;
+ used->changed=0;
if (used != _my_used_first) /* Relink used-chain */
{
if (used == _my_used_last)
@@ -568,7 +579,6 @@ int flush_key_blocks(File file, enum flush_type type)
if (type != FLUSH_KEEP && type != FLUSH_FORCE_WRITE)
{
/* This will not destroy position or data */
- used->changed=0;
_my_blocks_changed--;
free_block(used);
}