fix memory leak when the TabletStatMgr is destroyed
This commit is contained in:
@ -286,7 +286,13 @@ void ObTabletStreamPool::destroy()
|
|||||||
|
|
||||||
DLIST_REMOVE_ALL_NORET(node, lru_list_) {
|
DLIST_REMOVE_ALL_NORET(node, lru_list_) {
|
||||||
lru_list_.remove(node);
|
lru_list_.remove(node);
|
||||||
|
if (DYNAMIC_ALLOC == node->flag_) {
|
||||||
node->~ObTabletStreamNode();
|
node->~ObTabletStreamNode();
|
||||||
|
// ObFIFOAllocator::reset does not release memory by default.
|
||||||
|
dynamic_allocator_.free(node);
|
||||||
|
} else {
|
||||||
|
node->~ObTabletStreamNode();
|
||||||
|
}
|
||||||
node = nullptr;
|
node = nullptr;
|
||||||
}
|
}
|
||||||
lru_list_.reset();
|
lru_list_.reset();
|
||||||
@ -512,7 +518,9 @@ int ObTenantTabletStatMgr::report_stat(const ObTabletStat &stat)
|
|||||||
uint64_t pending_cur = ATOMIC_LOAD(&pending_cursor_);
|
uint64_t pending_cur = ATOMIC_LOAD(&pending_cursor_);
|
||||||
uint64_t report_cur = ATOMIC_LOAD(&report_cursor_);
|
uint64_t report_cur = ATOMIC_LOAD(&report_cursor_);
|
||||||
if (pending_cur - report_cur + 1 == DEFAULT_MAX_PENDING_CNT) { // full queue
|
if (pending_cur - report_cur + 1 == DEFAULT_MAX_PENDING_CNT) { // full queue
|
||||||
|
if (REACH_TENANT_TIME_INTERVAL(10 * 1000L * 1000L/*10s*/)) {
|
||||||
LOG_INFO("report_queue is full, wait to process", K(report_cur), K(pending_cur), K(stat));
|
LOG_INFO("report_queue is full, wait to process", K(report_cur), K(pending_cur), K(stat));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
} else if (pending_cur != ATOMIC_CAS(&pending_cursor_, pending_cur, pending_cur + 1)) {
|
} else if (pending_cur != ATOMIC_CAS(&pending_cursor_, pending_cur, pending_cur + 1)) {
|
||||||
++retry_cnt;
|
++retry_cnt;
|
||||||
|
|||||||
Reference in New Issue
Block a user