diff options
author | Michael Widenius <monty@mysql.com> | 2008-08-26 15:34:57 +0300 |
---|---|---|
committer | Michael Widenius <monty@mysql.com> | 2008-08-26 15:34:57 +0300 |
commit | dd406c1e7ebeede6506c3f8c1bc62c671ea880a1 (patch) | |
tree | 1a03eb79ca38addd300785022e9b7ec50a73bc96 /storage/maria/ma_page.c | |
parent | 6629c7641a0e9a3987c7af7fe73ac2d48a56038a (diff) | |
download | mariadb-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.c | 20 |
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 } |