Skip to content

Commit d668dc2

Browse files
[nrfconnect] light-switch-app: fix the crash during CASE session resumption. (#22622)
Accessing DeviceProxy object in the application callback is redundant and leads to crash, because of modified lifetime of this object in Matter core.
1 parent b381ba8 commit d668dc2

File tree

2 files changed

+4
-13
lines changed

2 files changed

+4
-13
lines changed

examples/light-switch-app/nrfconnect/main/BindingHandler.cpp

+3-12
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,13 @@ void BindingHandler::Init()
3535
DeviceLayer::PlatformMgr().ScheduleWork(InitInternal);
3636
}
3737

38-
void BindingHandler::OnInvokeCommandFailure(DeviceProxy * aDevice, BindingData & aBindingData, CHIP_ERROR aError)
38+
void BindingHandler::OnInvokeCommandFailure(BindingData & aBindingData, CHIP_ERROR aError)
3939
{
4040
CHIP_ERROR error;
4141

4242
if (aError == CHIP_ERROR_TIMEOUT && !BindingHandler::GetInstance().mCaseSessionRecovered)
4343
{
4444
LOG_INF("Response timeout for invoked command, trying to recover CASE session.");
45-
if (!aDevice)
46-
return;
47-
48-
// Release current CASE session.
49-
aDevice->Disconnect();
5045

5146
// Set flag to not try recover session multiple times.
5247
BindingHandler::GetInstance().mCaseSessionRecovered = true;
@@ -85,9 +80,7 @@ void BindingHandler::OnOffProcessCommand(CommandId aCommandId, const EmberBindin
8580
BindingHandler::GetInstance().mCaseSessionRecovered = false;
8681
};
8782

88-
auto onFailure = [aDevice, dataRef = *data](CHIP_ERROR aError) mutable {
89-
BindingHandler::OnInvokeCommandFailure(aDevice, dataRef, aError);
90-
};
83+
auto onFailure = [dataRef = *data](CHIP_ERROR aError) mutable { BindingHandler::OnInvokeCommandFailure(dataRef, aError); };
9184

9285
if (aDevice)
9386
{
@@ -162,9 +155,7 @@ void BindingHandler::LevelControlProcessCommand(CommandId aCommandId, const Embe
162155
BindingHandler::GetInstance().mCaseSessionRecovered = false;
163156
};
164157

165-
auto onFailure = [aDevice, dataRef = *data](CHIP_ERROR aError) mutable {
166-
BindingHandler::OnInvokeCommandFailure(aDevice, dataRef, aError);
167-
};
158+
auto onFailure = [dataRef = *data](CHIP_ERROR aError) mutable { BindingHandler::OnInvokeCommandFailure(dataRef, aError); };
168159

169160
CHIP_ERROR ret = CHIP_NO_ERROR;
170161

examples/light-switch-app/nrfconnect/main/include/BindingHandler.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class BindingHandler
4242
bool IsGroupBound();
4343

4444
static void SwitchWorkerHandler(intptr_t);
45-
static void OnInvokeCommandFailure(chip::DeviceProxy * aDevice, BindingData & aBindingData, CHIP_ERROR aError);
45+
static void OnInvokeCommandFailure(BindingData & aBindingData, CHIP_ERROR aError);
4646

4747
static BindingHandler & GetInstance()
4848
{

0 commit comments

Comments
 (0)