You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kudu.apache.org by "Sailesh Mukil (JIRA)" <ji...@apache.org> on 2016/10/14 17:46:20 UTC
[jira] [Resolved] (KUDU-1700) Debug build will not fail gracefully
on Messenger::Init() failure
[ https://issues.apache.org/jira/browse/KUDU-1700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sailesh Mukil resolved KUDU-1700.
---------------------------------
Resolution: Fixed
Fix Version/s: 1.1.0
Commit in: https://github.com/apache/kudu/commit/d065e3316eb631e98f8c5da0b5223392da7e719e
> Debug build will not fail gracefully on Messenger::Init() failure
> -----------------------------------------------------------------
>
> Key: KUDU-1700
> URL: https://issues.apache.org/jira/browse/KUDU-1700
> Project: Kudu
> Issue Type: Bug
> Components: rpc
> Affects Versions: 0.10.0
> Reporter: Sailesh Mukil
> Priority: Minor
> Labels: easyfix
> Fix For: 1.1.0
>
> Original Estimate: 1h
> Remaining Estimate: 1h
>
> In messenger.cc:
> {code}
> Status MessengerBuilder::Build(Messenger **msgr) {
> RETURN_NOT_OK(SaslInit(kSaslAppName)); // Initialize SASL library before we start making requests
> gscoped_ptr<Messenger> new_msgr(new Messenger(*this));
> RETURN_NOT_OK(new_msgr.get()->Init());
> *msgr = new_msgr.release();
> return Status::OK();
> }
> {code}
> If Messenger::Init() fails, _msgr_ will not get assigned. Therefore, the calling function will also not have the argument _msgr_ assigned:
> {code}
> Status MessengerBuilder::Build(shared_ptr<Messenger> *msgr) {
> Messenger *ptr;
> RETURN_NOT_OK(Build(&ptr));
> // See docs on Messenger::retain_self_ for info about this odd hack.
> *msgr = shared_ptr<Messenger>(
> ptr, std::mem_fun(&Messenger::AllExternalReferencesDropped));
> return Status::OK();
> }
> {code}
> This will cause the deleter to not get assigned as well, which means Messenger::Shutdown() doesn't get called, which will ultimately result in a CHECK() here, as _closing\_ _ will not be set:
> {code}
> Messenger::~Messenger() {
> std::lock_guard<percpu_rwlock> guard(lock_);
> CHECK(closing_) << "Should have already shut down";
> STLDeleteElements(&reactors_);
> }
> {code}
> Reordering the code in both the functions slightly will ensure that this does not happen.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)