[bugfix] fix potential memory leak and return code has not been set
This commit is contained in:
		| @ -1207,7 +1207,9 @@ int LogEngine::generate_flush_log_task_(const FlushLogCbCtx &flush_log_cb_ctx, | |||||||
|     PALF_LOG(ERROR, "alloc_log_io_flush_log_task failed", K(ret)); |     PALF_LOG(ERROR, "alloc_log_io_flush_log_task failed", K(ret)); | ||||||
|   } else if (OB_FAIL(flush_log_task->init(flush_log_cb_ctx, write_buf))) { |   } else if (OB_FAIL(flush_log_task->init(flush_log_cb_ctx, write_buf))) { | ||||||
|     PALF_LOG(ERROR, "init LogIOFlushLogTask failed", K(ret)); |     PALF_LOG(ERROR, "init LogIOFlushLogTask failed", K(ret)); | ||||||
|   } else { |   } else {/*do nothing*/} | ||||||
|  |   if (OB_FAIL(ret) && NULL != flush_log_task) { | ||||||
|  |     alloc_mgr_->free_log_io_flush_log_task(flush_log_task); | ||||||
|   } |   } | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
| @ -1220,11 +1222,14 @@ int LogEngine::generate_truncate_log_task_(const TruncateLogCbCtx &truncate_log_ | |||||||
|   if (NULL == (truncate_log_task = alloc_mgr_->alloc_log_io_truncate_log_task(palf_id_, palf_epoch_))) { |   if (NULL == (truncate_log_task = alloc_mgr_->alloc_log_io_truncate_log_task(palf_id_, palf_epoch_))) { | ||||||
|     ret = OB_ALLOCATE_MEMORY_FAILED; |     ret = OB_ALLOCATE_MEMORY_FAILED; | ||||||
|     PALF_LOG(ERROR, "alloc_log_io_truncate_log_task failed", K(ret)); |     PALF_LOG(ERROR, "alloc_log_io_truncate_log_task failed", K(ret)); | ||||||
|   } else if (truncate_log_task->init(truncate_log_cb_ctx)) { |   } else if (OB_FAIL(truncate_log_task->init(truncate_log_cb_ctx))) { | ||||||
|     PALF_LOG(ERROR, "init LogIOTruncateLogTask failed", K(ret), K_(palf_id), K_(is_inited)); |     PALF_LOG(ERROR, "init LogIOTruncateLogTask failed", K(ret), K_(palf_id), K_(is_inited)); | ||||||
|   } else { |   } else { | ||||||
|     PALF_LOG(TRACE, "generate_truncate_log_task_ success", K(ret), K_(palf_id), K_(is_inited)); |     PALF_LOG(TRACE, "generate_truncate_log_task_ success", K(ret), K_(palf_id), K_(is_inited)); | ||||||
|   } |   } | ||||||
|  |   if (OB_FAIL(ret) && NULL != truncate_log_task) { | ||||||
|  |     alloc_mgr_->free_log_io_truncate_log_task(truncate_log_task); | ||||||
|  |   } | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -1239,7 +1244,9 @@ int LogEngine::generate_truncate_prefix_blocks_task_( | |||||||
|     PALF_LOG(ERROR, "alloc_log_io_truncate_prefix_blocks_task failed", K(ret)); |     PALF_LOG(ERROR, "alloc_log_io_truncate_prefix_blocks_task failed", K(ret)); | ||||||
|   } else if (OB_FAIL(truncate_prefix_blocks_task->init(truncate_prefix_blocks_ctx))) { |   } else if (OB_FAIL(truncate_prefix_blocks_task->init(truncate_prefix_blocks_ctx))) { | ||||||
|     PALF_LOG(ERROR, "init LogIOTruncatePrefixBlocksTask failed", K(ret), K_(palf_id), K_(is_inited)); |     PALF_LOG(ERROR, "init LogIOTruncatePrefixBlocksTask failed", K(ret), K_(palf_id), K_(is_inited)); | ||||||
|   } else { |   } else {/*do nothing*/} | ||||||
|  |   if (OB_FAIL(ret) && NULL != truncate_prefix_blocks_task) { | ||||||
|  |     alloc_mgr_->free_log_io_truncate_prefix_blocks_task(truncate_prefix_blocks_task); | ||||||
|   } |   } | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
| @ -1265,15 +1272,22 @@ int LogEngine::generate_flush_meta_task_(const FlushMetaCbCtx &flush_meta_cb_ctx | |||||||
|     PALF_LOG(ERROR, "allocate memory failed", K(ret), K_(palf_id), K_(is_inited)); |     PALF_LOG(ERROR, "allocate memory failed", K(ret), K_(palf_id), K_(is_inited)); | ||||||
|   } else if (OB_FAIL(serialize_log_meta_(log_meta, buf, buf_len))) { |   } else if (OB_FAIL(serialize_log_meta_(log_meta, buf, buf_len))) { | ||||||
|     PALF_LOG(ERROR, "serialize_log_meta_ failed", K(ret), K_(palf_id), K_(is_inited), K(log_meta)); |     PALF_LOG(ERROR, "serialize_log_meta_ failed", K(ret), K_(palf_id), K_(is_inited), K(log_meta)); | ||||||
|   } else if (OB_FAIL(flush_meta_task->init(flush_meta_cb_ctx, |   } else if (OB_FAIL(flush_meta_task->init(flush_meta_cb_ctx, buf, buf_len))) { | ||||||
|           buf, buf_len))) { |  | ||||||
|     PALF_LOG(ERROR, "init LogIOFlushMetaTask failed", K(ret)); |     PALF_LOG(ERROR, "init LogIOFlushMetaTask failed", K(ret)); | ||||||
|   } else { |   } else { | ||||||
|     PALF_LOG(TRACE, "generate_flush_meta_task_ success", K(ret), K_(palf_id), K_(is_inited)); |     PALF_LOG(TRACE, "generate_flush_meta_task_ success", K(ret), K_(palf_id), K_(is_inited)); | ||||||
|   } |   } | ||||||
|   if (OB_FAIL(ret) && NULL != buf) { |  | ||||||
|  |   if (OB_FAIL(ret)) { | ||||||
|  |     //free memory | ||||||
|  |     if (NULL != buf) { | ||||||
|       mtl_free(buf); |       mtl_free(buf); | ||||||
|     } |     } | ||||||
|  |     if (NULL != flush_meta_task) { | ||||||
|  |       alloc_mgr_->free_log_io_flush_meta_task(flush_meta_task); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -1295,6 +1309,9 @@ int LogEngine::generate_flashback_task_(const FlashbackCbCtx &flashback_cb_ctx, | |||||||
|   } else { |   } else { | ||||||
|     PALF_LOG(TRACE, "generate_flashback_task_ hsuccess", K(ret), KPC(this)); |     PALF_LOG(TRACE, "generate_flashback_task_ hsuccess", K(ret), KPC(this)); | ||||||
|   } |   } | ||||||
|  |   if (OB_FAIL(ret) && NULL != flashback_task) { | ||||||
|  |     alloc_mgr_->free_log_io_flashback_task(flashback_task); | ||||||
|  |   } | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 obdev
					obdev