diff options
Diffstat (limited to 'storage/innobase/lock/lock0prdt.cc')
-rw-r--r-- | storage/innobase/lock/lock0prdt.cc | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/storage/innobase/lock/lock0prdt.cc b/storage/innobase/lock/lock0prdt.cc index 5553fa98357..e924d46bd3f 100644 --- a/storage/innobase/lock/lock0prdt.cc +++ b/storage/innobase/lock/lock0prdt.cc @@ -496,7 +496,7 @@ lock_prdt_insert_check_and_lock( lock_prdt_t* prdt) /*!< in: Predicates with Minimum Bound Rectangle */ { - ut_ad(block->frame == page_align(rec)); + ut_ad(block->page.frame == page_align(rec)); ut_ad(!index->table->is_temporary()); ut_ad(index->is_spatial()); @@ -533,7 +533,7 @@ lock_prdt_insert_check_and_lock( trx->mutex_lock(); /* Allocate MBR on the lock heap */ lock_init_prdt_from_mbr(prdt, mbr, 0, trx->lock.lock_heap); - err= lock_rec_enqueue_waiting(c_lock, mode, id, block->frame, + err= lock_rec_enqueue_waiting(c_lock, mode, id, block->page.frame, PRDT_HEAPNO, index, thr, prdt); trx->mutex_unlock(); } @@ -753,28 +753,19 @@ lock_prdt_lock( lock = lock_prdt_has_lock( mode, g.cell(), id, prdt, trx); - if (lock == NULL) { - - lock_t* wait_for; - - wait_for = lock_prdt_other_has_conflicting( - prdt_mode, g.cell(), id, prdt, trx); - - if (wait_for != NULL) { - - err = lock_rec_enqueue_waiting( - wait_for, - prdt_mode, - id, block->frame, PRDT_HEAPNO, - index, thr, prdt); - } else { - - lock_prdt_add_to_queue( - prdt_mode, block, index, trx, - prdt, true); - - status = LOCK_REC_SUCCESS; - } + if (lock) { + } else if (lock_t* wait_for + = lock_prdt_other_has_conflicting( + prdt_mode, g.cell(), id, prdt, + trx)) { + err = lock_rec_enqueue_waiting( + wait_for, prdt_mode, id, + block->page.frame, PRDT_HEAPNO, + index, thr, prdt); + } else { + lock_prdt_add_to_queue( + prdt_mode, block, index, trx, + prdt, true); } trx->mutex_unlock(); |