Fix the potential memory leak of ReplayMultiThread (#5949)

Summary:
The pointer ra needs to be freed the status s returns not OK. In the previous  PR https://github.com/facebook/rocksdb/issues/5934  , the ra is not freed which might cause potential memory leak. Fix this issue by moving the clarification of ra inside the while loop and freeing it as desired.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5949

Test Plan: pass make asan check.

Differential Revision: D18045726

Pulled By: zhichao-cao

fbshipit-source-id: d5445b7b832c8bb1dafe008bafea7bfe9eb0b1ce
This commit is contained in:
Zhichao Cao 2019-10-21 15:03:27 -07:00 committed by Facebook Github Bot
parent 2ce6aa5f39
commit 7245fb5f63

View File

@ -313,13 +313,13 @@ Status Replayer::MultiThreadReplay(uint32_t threads_num) {
std::chrono::system_clock::now(); std::chrono::system_clock::now();
WriteOptions woptions; WriteOptions woptions;
ReadOptions roptions; ReadOptions roptions;
ReplayerWorkerArg* ra;
uint64_t ops = 0; uint64_t ops = 0;
while (s.ok()) { while (s.ok()) {
ra = new ReplayerWorkerArg; ReplayerWorkerArg* ra = new ReplayerWorkerArg;
ra->db = db_; ra->db = db_;
s = ReadTrace(&(ra->trace_entry)); s = ReadTrace(&(ra->trace_entry));
if (!s.ok()) { if (!s.ok()) {
delete ra;
break; break;
} }
ra->woptions = woptions; ra->woptions = woptions;