[CP] [to #47972546]fix bug observer core when llvm alloc memory failed and compile UDT
This commit is contained in:
@ -161,14 +161,21 @@ int ObJitMemory::protect_mapped_memory(const ObJitMemoryBlock &block,
|
|||||||
if (OB_ISNULL(block.addr_) || 0 == block.size_ || (!p_flags)) {
|
if (OB_ISNULL(block.addr_) || 0 == block.size_ || (!p_flags)) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid argument", K(block), K(p_flags), K(ret));
|
LOG_WARN("invalid argument", K(block), K(p_flags), K(ret));
|
||||||
} else if (0 != (tmp_ret = ::mprotect((void*)((uintptr_t)block.addr_& ~(page_size-1)),
|
} else {
|
||||||
page_size*((block.size_+page_size-1)/page_size),
|
do {
|
||||||
p_flags))) {
|
tmp_ret = 0;
|
||||||
ret = OB_ERR_UNEXPECTED;
|
if (0 != (tmp_ret = ::mprotect((void*)((uintptr_t)block.addr_& ~(page_size-1)),
|
||||||
LOG_WARN("jit block mprotect failed", K(block), K(errno), K(tmp_ret), K(ret),
|
page_size*((block.size_+page_size-1)/page_size),
|
||||||
K((uintptr_t)block.addr_& ~(page_size - 1)),
|
p_flags))) {
|
||||||
K(page_size * ((block.size_ + page_size - 1) / page_size)),
|
if (REACH_TIME_INTERVAL(10000000)) {
|
||||||
K(p_flags));
|
LOG_ERROR("jit block mprotect failed", K(block), K(errno), K(tmp_ret),
|
||||||
|
K((uintptr_t)block.addr_& ~(page_size - 1)),
|
||||||
|
K(page_size * ((block.size_ + page_size - 1) / page_size)),
|
||||||
|
K(p_flags));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (-1 == tmp_ret && 12 == errno);
|
||||||
|
// `-1 == tmp_ret` means `mprotect` failed, `12 == errno` means `Cannot allocate memory`
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user