fixed memory leak in errsim.
This commit is contained in:
@ -361,6 +361,7 @@ int LogIOWorker::BatchLogIOFlushLogTaskMgr::init(int64_t batch_width,
|
|||||||
PALF_LOG(ERROR, "batch_io_task_array_ init failed", K(ret));
|
PALF_LOG(ERROR, "batch_io_task_array_ init failed", K(ret));
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < batch_width && OB_SUCC(ret); i++) {
|
for (int i = 0; i < batch_width && OB_SUCC(ret); i++) {
|
||||||
|
bool last_io_task_push_success = false;
|
||||||
char *ptr = reinterpret_cast<char*>(mtl_malloc(sizeof(BatchLogIOFlushLogTask), "LogIOTask"));
|
char *ptr = reinterpret_cast<char*>(mtl_malloc(sizeof(BatchLogIOFlushLogTask), "LogIOTask"));
|
||||||
BatchLogIOFlushLogTask *io_task = NULL;
|
BatchLogIOFlushLogTask *io_task = NULL;
|
||||||
if (NULL == ptr) {
|
if (NULL == ptr) {
|
||||||
@ -369,12 +370,19 @@ int LogIOWorker::BatchLogIOFlushLogTaskMgr::init(int64_t batch_width,
|
|||||||
} else if (FALSE_IT(io_task = new(ptr)(BatchLogIOFlushLogTask))) {
|
} else if (FALSE_IT(io_task = new(ptr)(BatchLogIOFlushLogTask))) {
|
||||||
} else if (OB_FAIL(io_task->init(batch_depth, allocator))) {
|
} else if (OB_FAIL(io_task->init(batch_depth, allocator))) {
|
||||||
PALF_LOG(ERROR, "BatchLogIOFlushLogTask init failed", K(ret));
|
PALF_LOG(ERROR, "BatchLogIOFlushLogTask init failed", K(ret));
|
||||||
|
// NB: push batch will not failed becaue batch_io_task_array_ has reserved.
|
||||||
} else if (OB_FAIL(batch_io_task_array_.push_back(io_task))) {
|
} else if (OB_FAIL(batch_io_task_array_.push_back(io_task))) {
|
||||||
PALF_LOG(ERROR, "batch_io_task_array_ push_back failed", K(ret), KP(io_task));
|
PALF_LOG(ERROR, "batch_io_task_array_ push_back failed", K(ret), KP(io_task));
|
||||||
} else {
|
} else {
|
||||||
|
last_io_task_push_success = true;
|
||||||
PALF_LOG(INFO, "BatchLogIOFlushLogTask init success", K(ret), K(i),
|
PALF_LOG(INFO, "BatchLogIOFlushLogTask init success", K(ret), K(i),
|
||||||
KP(io_task));
|
KP(io_task));
|
||||||
}
|
}
|
||||||
|
if (!last_io_task_push_success && NULL != io_task) {
|
||||||
|
io_task->destroy();
|
||||||
|
mtl_free(io_task);
|
||||||
|
io_task = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
batch_width_ = usable_count_ = batch_width;
|
batch_width_ = usable_count_ = batch_width;
|
||||||
wait_cost_stat_ = wait_cost_stat;
|
wait_cost_stat_ = wait_cost_stat;
|
||||||
@ -397,6 +405,7 @@ void LogIOWorker::BatchLogIOFlushLogTaskMgr::destroy()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
wait_cost_stat_ = NULL;
|
wait_cost_stat_ = NULL;
|
||||||
|
batch_io_task_array_.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
int LogIOWorker::BatchLogIOFlushLogTaskMgr::insert(LogIOFlushLogTask *io_task)
|
int LogIOWorker::BatchLogIOFlushLogTaskMgr::insert(LogIOFlushLogTask *io_task)
|
||||||
|
@ -72,7 +72,7 @@ int LogIOWorkerWrapper::init(const LogIOWorkerConfig &config,
|
|||||||
LOG_INFO("success to init LogIOWorkerWrapper", K(config), K(tenant_id), KPC(this));
|
LOG_INFO("success to init LogIOWorkerWrapper", K(config), K(tenant_id), KPC(this));
|
||||||
}
|
}
|
||||||
if (OB_FAIL(ret) && OB_INIT_TWICE != ret) {
|
if (OB_FAIL(ret) && OB_INIT_TWICE != ret) {
|
||||||
destory_and_free_log_io_workers_();
|
destroy();
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -144,6 +144,7 @@ int LogIOWorkerWrapper::create_and_init_log_io_workers_(const LogIOWorkerConfig
|
|||||||
IPalfEnvImpl *palf_env_impl)
|
IPalfEnvImpl *palf_env_impl)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
log_writer_parallelism_ = 0;
|
||||||
const int64_t log_writer_parallelism = config.io_worker_num_;
|
const int64_t log_writer_parallelism = config.io_worker_num_;
|
||||||
log_io_workers_ = reinterpret_cast<LogIOWorker *>(share::mtl_malloc(
|
log_io_workers_ = reinterpret_cast<LogIOWorker *>(share::mtl_malloc(
|
||||||
(log_writer_parallelism) * sizeof(LogIOWorker), "LogIOWS"));
|
(log_writer_parallelism) * sizeof(LogIOWorker), "LogIOWS"));
|
||||||
@ -161,11 +162,16 @@ int LogIOWorkerWrapper::create_and_init_log_io_workers_(const LogIOWorkerConfig
|
|||||||
PALF_LOG(WARN, "init LogIOWorker failed", K(i), K(config), K(tenant_id),
|
PALF_LOG(WARN, "init LogIOWorker failed", K(i), K(config), K(tenant_id),
|
||||||
K(cb_thread_pool_tg_id), KP(allocator), KP(palf_env_impl));
|
K(cb_thread_pool_tg_id), KP(allocator), KP(palf_env_impl));
|
||||||
} else {
|
} else {
|
||||||
|
log_writer_parallelism_++;
|
||||||
PALF_LOG(INFO, "init LogIOWorker success", K(i), K(config), K(tenant_id),
|
PALF_LOG(INFO, "init LogIOWorker success", K(i), K(config), K(tenant_id),
|
||||||
K(cb_thread_pool_tg_id), KP(allocator), KP(palf_env_impl), KP(iow),
|
K(cb_thread_pool_tg_id), KP(allocator), KP(palf_env_impl), KP(iow),
|
||||||
KP(log_io_workers_));
|
KP(log_io_workers_));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (OB_FAIL(ret)) {
|
||||||
|
destory_and_free_log_io_workers_();
|
||||||
|
log_writer_parallelism_ = -1;
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user