fix tx_op list concurrent reserve bug
This commit is contained in:
@ -127,11 +127,11 @@ int ObTxOpVector::try_extend_space(int64_t count, ObIAllocator &allocator)
|
|||||||
STORAGE_LOG(WARN, "check_stat failed", KR(ret));
|
STORAGE_LOG(WARN, "check_stat failed", KR(ret));
|
||||||
} else if (count == 0) {
|
} else if (count == 0) {
|
||||||
// do nothing
|
// do nothing
|
||||||
} else if (count_ + count <= capacity_) {
|
|
||||||
// do nothing
|
|
||||||
} else {
|
} else {
|
||||||
ObTxOp *tx_op_ptr = nullptr;
|
ObTxOp *tx_op_ptr = nullptr;
|
||||||
if (OB_ISNULL(tx_op_ptr = (ObTxOp*)allocator.alloc((count_ + count) * sizeof(ObTxOp)))) {
|
// may concurrent reserve space so we use capacity_
|
||||||
|
int64_t new_capacity = capacity_ + count;
|
||||||
|
if (OB_ISNULL(tx_op_ptr = (ObTxOp*)allocator.alloc(new_capacity * sizeof(ObTxOp)))) {
|
||||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||||
} else {
|
} else {
|
||||||
if (count_ > 0) {
|
if (count_ > 0) {
|
||||||
@ -141,7 +141,7 @@ int ObTxOpVector::try_extend_space(int64_t count, ObIAllocator &allocator)
|
|||||||
allocator.free(tx_op_);
|
allocator.free(tx_op_);
|
||||||
}
|
}
|
||||||
tx_op_ = tx_op_ptr;
|
tx_op_ = tx_op_ptr;
|
||||||
capacity_ = count_ + count;
|
capacity_ = new_capacity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user