This repository has been archived by the owner on Jun 23, 2022. It is now read-only.
rdsn: fix asio_rpc_session bug which may cause double free #115
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
to fix #114
原因是:在asio_network_provider::do_accept()中,新建的asio_rpc_session的构造函数中,调用了start_read_next(),进一步调用 asio_rpc_session::do_read():先add_ref(),如果立即调用回调函数,会release_ref(),如果该release_ref()发生在构造函数返回之前,这个新建的对象asio_rpc_session就会被立即析构。在构造函数返回之后,do_accept()中继续持有和使用该对象,就会造成double free。
解决办法:asio_rpc_session的构造函数中不调用start_read_next(),而是在对象创建完成后,在外面调用start_read_next()。