summaryrefslogtreecommitdiff
path: root/storage/maria/ma_page.c
diff options
context:
space:
mode:
authorMichael Widenius <monty@mysql.com>2008-08-26 15:34:57 +0300
committerMichael Widenius <monty@mysql.com>2008-08-26 15:34:57 +0300
commitdd406c1e7ebeede6506c3f8c1bc62c671ea880a1 (patch)
tree1a03eb79ca38addd300785022e9b7ec50a73bc96 /storage/maria/ma_page.c
parent6629c7641a0e9a3987c7af7fe73ac2d48a56038a (diff)
downloadmariadb-git-dd406c1e7ebeede6506c3f8c1bc62c671ea880a1.tar.gz
Fix for Bug#36499 Maria: potential deadlock
This was done by introducing another mutex for handling the key_del link I also renamed all key_del variables to start with key_del prefix storage/maria/ma_close.c: Rename of key_del variables storage/maria/ma_key_recover.c: Changed key_del to be protexted by it's own mutex: key_del_lock Rename of key_del variables Removed comment for old bug storage/maria/ma_key_recover.h: Rename of key_del variables storage/maria/ma_open.c: Initialization for new key_del_lock mutex Renamed intern_cond to key_del_cond as it was only used for protection of key_del storage/maria/ma_page.c: Rename of key_del variables storage/maria/ma_write.c: Rename of key_del variables storage/maria/maria_def.h: Rename of key_del variables Added key_del_lock
Diffstat (limited to 'storage/maria/ma_page.c')
-rw-r--r--storage/maria/ma_page.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/storage/maria/ma_page.c b/storage/maria/ma_page.c
index 2cbaf3ec690..afe40aad399 100644
--- a/storage/maria/ma_page.c
+++ b/storage/maria/ma_page.c
@@ -223,8 +223,8 @@ int _ma_dispose(register MARIA_HA *info, my_off_t pos, my_bool page_not_read)
(void) _ma_lock_key_del(info, 0);
- old_link= share->current_key_del;
- share->current_key_del= pos;
+ old_link= share->key_del_current;
+ share->key_del_current= pos;
page_no= pos / block_size;
bzero(buff, share->keypage_header);
_ma_store_keynr(share, buff, (uchar) MARIA_DELETE_KEY_NR);
@@ -347,7 +347,7 @@ my_off_t _ma_new(register MARIA_HA *info, int level,
else
{
uchar *buff;
- pos= share->current_key_del; /* Protected */
+ pos= share->key_del_current; /* Protected */
DBUG_ASSERT(share->pagecache->block_size == block_size);
if (!(buff= pagecache_read(share->pagecache,
&share->kfile,
@@ -362,15 +362,15 @@ my_off_t _ma_new(register MARIA_HA *info, int level,
(single linked list):
*/
#ifndef DBUG_OFF
- my_off_t current_key_del;
+ my_off_t key_del_current;
#endif
- share->current_key_del= mi_sizekorr(buff+share->keypage_header);
+ share->key_del_current= mi_sizekorr(buff+share->keypage_header);
#ifndef DBUG_OFF
- current_key_del= share->current_key_del;
- DBUG_ASSERT(current_key_del != share->state.key_del &&
- (current_key_del != 0) &&
- ((current_key_del == HA_OFFSET_ERROR) ||
- (current_key_del <=
+ key_del_current= share->key_del_current;
+ DBUG_ASSERT(key_del_current != share->state.key_del &&
+ (key_del_current != 0) &&
+ ((key_del_current == HA_OFFSET_ERROR) ||
+ (key_del_current <=
(share->state.state.key_file_length - block_size))));
#endif
}