diff options
author | monty@donna.mysql.com <> | 2000-09-07 04:55:17 +0300 |
---|---|---|
committer | monty@donna.mysql.com <> | 2000-09-07 04:55:17 +0300 |
commit | be5e4e72b67c1ce6d25ec6d961ed0f6b4d13a106 (patch) | |
tree | cd775f59b4803ef23e407df9d47af3ae7b517a13 /mysys/mf_keycache.c | |
parent | 0c07817b08812e18ecba76966cb84b562efb0d80 (diff) | |
download | mariadb-git-be5e4e72b67c1ce6d25ec6d961ed0f6b4d13a106.tar.gz |
Small bug fixes
Diffstat (limited to 'mysys/mf_keycache.c')
-rw-r--r-- | mysys/mf_keycache.c | 14 |
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); } |