diff --git a/tv/cec/1.0/default/HdmiCecDefault.cpp b/tv/cec/1.0/default/HdmiCecDefault.cpp index 2ec2d09b8a..7dc0d24d81 100644 --- a/tv/cec/1.0/default/HdmiCecDefault.cpp +++ b/tv/cec/1.0/default/HdmiCecDefault.cpp @@ -35,10 +35,12 @@ namespace implementation { int mCecFd; int mExitFd; +sp mCallback; HdmiCecDefault::HdmiCecDefault() { mCecFd = -1; mExitFd = -1; + mCallback = nullptr; } HdmiCecDefault::~HdmiCecDefault() { @@ -185,7 +187,16 @@ Return HdmiCecDefault::sendMessage(const CecMessage& message) } } -Return HdmiCecDefault::setCallback(const sp& /*callback*/) { +Return HdmiCecDefault::setCallback(const sp& callback) { + if (mCallback != nullptr) { + mCallback->unlinkToDeath(this); + mCallback = nullptr; + } + + if (callback != nullptr) { + mCallback = callback; + mCallback->linkToDeath(this, 0 /*cookie*/); + } return Void(); }