Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix-redis-response-swap-mem-leak #2340

Merged
merged 1 commit into from
Aug 6, 2023

Conversation

qqwangxiaow
Copy link
Contributor

@qqwangxiaow qqwangxiaow commented Aug 2, 2023

What problem does this PR solve?

redis response swap operation may cause memory leaks
Issue Number:

Problem Summary:
redis reply _arena address should be the same as respone, otherwise, there may be a memory leak.

test code

    brpc::RedisResponse resp1;
    std::cout << "response 1 arena address:"<< &(resp1._arena) << std::endl;
    std::cout << "first reply arena address:" << (resp1._first_reply._arena) << std::endl;
    brpc::RedisResponse resp2;
    std::cout << "response 2 arena address:"<< &(resp2._arena) << std::endl;
    std::cout << "first reply arena address:" << (resp2._first_reply._arena) << std::endl;

    resp1.Swap(&resp2);
    std::cout << "========= swap ============" << std::endl;
    std::cout << "response 1 arena address:"<< &(resp1._arena) << std::endl;
    std::cout << "first reply arena address:" << (resp1._first_reply._arena) << std::endl;;
    std::cout << "response 2 arena address:"<< &(resp2._arena) << std::endl;
    std::cout << "first reply arena address:" << (resp2._first_reply._arena) << std::endl;

bug version
image

fixed version
image

What is changed and the side effects?

Changed:

Side effects:

  • Performance effects(性能影响):
    no
  • Breaking backward compatibility(向后兼容性):
    no

Check List:

  • Please make sure your changes are compilable(请确保你的更改可以通过编译).
  • When providing us with a new feature, it is best to add related tests(如果你向我们增加一个新的功能, 请添加相关测试).
  • Please follow Contributor Covenant Code of Conduct.(请遵循贡献者准则).

@serverglen
Copy link
Contributor

LGTM

@heartplus
Copy link

nobody except RedisRespone.Swap calls RedisReply.Swap, so it is safety to change behaviour of RedisReply.Swap
// i just renamed RedisReply.Swap to RedisReply.Swap2 to check whether compile passed or not

@chenBright
Copy link
Contributor

LGTM

@zyearn zyearn merged commit cb4ed16 into apache:master Aug 6, 2023
16 checks passed
yanglimingcn pushed a commit to yanglimingcn/brpc that referenced this pull request Oct 31, 2023
yanglimingcn pushed a commit to yanglimingcn/brpc that referenced this pull request Oct 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

_arena of RedisReply should not be swapped as it always point to RedisResponse._arena
5 participants