BUGFIX: allow dml if lock table at the same trans
This commit is contained in:
@ -314,15 +314,16 @@ int ObLockMemCtx::check_lock_exist(
|
|||||||
} else {
|
} else {
|
||||||
RDLockGuard guard(list_rwlock_);
|
RDLockGuard guard(list_rwlock_);
|
||||||
DLIST_FOREACH(curr, lock_list_) {
|
DLIST_FOREACH(curr, lock_list_) {
|
||||||
if (curr->lock_op_.lock_id_ == lock_id &&
|
if (curr->lock_op_.lock_id_ == lock_id) {
|
||||||
curr->lock_op_.owner_id_ == owner_id &&
|
// BE CAREFUL: get all the lock mode curr trans has got.
|
||||||
curr->lock_op_.op_type_ == op_type && // different op type may lock twice.
|
lock_mode_in_same_trans |= curr->lock_op_.lock_mode_;
|
||||||
curr->lock_op_.lock_op_status_ == LOCK_OP_DOING) {
|
// check exist.
|
||||||
if (curr->lock_op_.lock_mode_ == mode) {
|
if (curr->lock_op_.lock_mode_ == mode &&
|
||||||
|
curr->lock_op_.owner_id_ == owner_id &&
|
||||||
|
curr->lock_op_.op_type_ == op_type && /* different op type may lock twice */
|
||||||
|
curr->lock_op_.lock_op_status_ == LOCK_OP_DOING) {
|
||||||
is_exist = true;
|
is_exist = true;
|
||||||
break;
|
break;
|
||||||
} else {
|
|
||||||
lock_mode_in_same_trans |= curr->lock_op_.lock_mode_;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user