Skip to content

Commit c531a36

Browse files
authored
[Tizen] Move context removal methods to private scope (project-chip#43506)
This commit is a followup for project-chip#43386
1 parent 64cc9fc commit c531a36

2 files changed

Lines changed: 39 additions & 18 deletions

File tree

src/platform/Tizen/DnssdImpl.cpp

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void OnRegister(dnssd_error_e result, dnssd_service_h service, void * data)
8989
ChipLogError(DeviceLayer, "DNSsd %s: Error: %s", __func__, get_error_message(result));
9090
rCtx->mCallback(rCtx->mCbContext, nullptr, nullptr, MATTER_PLATFORM_ERROR(result));
9191
// After this point, the context might be no longer valid
92-
rCtx->mInstance.RemoveContext(rCtx);
92+
rCtx->RemoveFromOwner();
9393
return;
9494
}
9595

@@ -115,9 +115,8 @@ gboolean OnBrowseTimeout(void * userData)
115115
auto * bCtx = reinterpret_cast<chip::Dnssd::BrowseContext *>(userData);
116116

117117
bCtx->mCallback(bCtx->mCbContext, bCtx->mServices.data(), bCtx->mServices.size(), true, CHIP_NO_ERROR);
118-
119118
// After this point the context might be no longer valid
120-
bCtx->mInstance.RemoveContext(bCtx);
119+
bCtx->RemoveFromOwner();
121120

122121
// This is a one-shot timer
123122
return G_SOURCE_REMOVE;
@@ -210,7 +209,7 @@ void OnBrowse(dnssd_service_state_e state, dnssd_service_h service, void * data)
210209
{
211210
bCtx->mCallback(bCtx->mCbContext, nullptr, 0, true, MATTER_PLATFORM_ERROR(ret));
212211
// After this point the context might be no longer valid
213-
bCtx->mInstance.RemoveContext(bCtx);
212+
bCtx->RemoveFromOwner();
214213
}
215214
}
216215

@@ -342,9 +341,8 @@ void OnResolve(dnssd_error_e result, dnssd_service_h service, void * userData)
342341

343342
err = chip::DeviceLayer::SystemLayer().ScheduleLambda([rCtx] {
344343
ChipLogProgress(DeviceLayer, "DNSsd Handle resolve task on schedule lambda");
345-
346344
rCtx->Finalize(CHIP_NO_ERROR);
347-
rCtx->mInstance.RemoveContext(rCtx);
345+
rCtx->RemoveFromOwner();
348346
});
349347
VerifyOrExit(err == CHIP_NO_ERROR,
350348
ChipLogError(DeviceLayer, "Failed to schedule resolve task: %" CHIP_ERROR_FORMAT, err.Format()));
@@ -353,7 +351,7 @@ void OnResolve(dnssd_error_e result, dnssd_service_h service, void * userData)
353351

354352
exit:
355353
rCtx->Finalize(ret != DNSSD_ERROR_NONE ? MATTER_PLATFORM_ERROR(ret) : err);
356-
rCtx->mInstance.RemoveContext(rCtx);
354+
rCtx->RemoveFromOwner();
357355
}
358356

359357
CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx)
@@ -423,6 +421,11 @@ RegisterContext::~RegisterContext()
423421
}
424422
}
425423

424+
void RegisterContext::RemoveFromOwner()
425+
{
426+
mInstance.RemoveRegisterContext(this);
427+
}
428+
426429
BrowseContext::BrowseContext(DnssdTizen & instance, const char * type, Dnssd::DnssdServiceProtocol protocol, uint32_t interfaceId,
427430
DnssdBrowseCallback callback, void * context) :
428431
mInstance(instance),
@@ -440,6 +443,11 @@ BrowseContext::~BrowseContext()
440443
}
441444
}
442445

446+
void BrowseContext::RemoveFromOwner()
447+
{
448+
mInstance.RemoveBrowseContext(this);
449+
}
450+
443451
ResolveContext::ResolveContext(DnssdTizen & instance, const char * name, const char * type, uint32_t interfaceId,
444452
DnssdResolveCallback callback, void * context) :
445453
mInstance(instance),
@@ -465,6 +473,11 @@ void ResolveContext::Finalize(CHIP_ERROR error)
465473
mCallback(mCbContext, &mResult, chip::Span<chip::Inet::IPAddress>(&ipAddr, 1), CHIP_NO_ERROR);
466474
}
467475

476+
void ResolveContext::RemoveFromOwner()
477+
{
478+
mInstance.RemoveResolveContext(this);
479+
}
480+
468481
CHIP_ERROR DnssdTizen::Init(DnssdAsyncReturnCallback initCallback, DnssdAsyncReturnCallback errorCallback, void * context)
469482
{
470483
int ret = dnssd_initialize();
@@ -571,7 +584,7 @@ CHIP_ERROR DnssdTizen::RegisterService(const DnssdService & service, DnssdPublis
571584
if (err != CHIP_NO_ERROR)
572585
{ // Notify caller about error
573586
callback(context, nullptr, nullptr, err);
574-
RemoveContext(serviceCtx);
587+
RemoveRegisterContext(serviceCtx);
575588
}
576589
return err;
577590
}
@@ -603,7 +616,7 @@ CHIP_ERROR DnssdTizen::Browse(const char * type, Dnssd::DnssdServiceProtocol pro
603616
if (err != CHIP_NO_ERROR)
604617
{ // Notify caller about error
605618
callback(context, nullptr, 0, true, err);
606-
RemoveContext(browseCtx);
619+
RemoveBrowseContext(browseCtx);
607620
}
608621
return err;
609622
}
@@ -625,7 +638,7 @@ CHIP_ERROR DnssdTizen::Resolve(const DnssdService & browseResult, chip::Inet::In
625638

626639
exit:
627640
if (err != CHIP_NO_ERROR)
628-
RemoveContext(resolveCtx);
641+
RemoveResolveContext(resolveCtx);
629642
return err;
630643
}
631644

@@ -665,7 +678,7 @@ ResolveContext * DnssdTizen::CreateResolveContext(const char * name, const char
665678
return ctxPtr;
666679
}
667680

668-
void DnssdTizen::RemoveContext(RegisterContext * context)
681+
void DnssdTizen::RemoveRegisterContext(RegisterContext * context)
669682
{
670683
std::lock_guard<std::mutex> lock(mMutex);
671684
auto it = std::find_if(mRegisterContexts.begin(), mRegisterContexts.end(),
@@ -676,7 +689,7 @@ void DnssdTizen::RemoveContext(RegisterContext * context)
676689
}
677690
}
678691

679-
void DnssdTizen::RemoveContext(BrowseContext * context)
692+
void DnssdTizen::RemoveBrowseContext(BrowseContext * context)
680693
{
681694
std::lock_guard<std::mutex> lock(mMutex);
682695
auto it =
@@ -687,7 +700,7 @@ void DnssdTizen::RemoveContext(BrowseContext * context)
687700
}
688701
}
689702

690-
void DnssdTizen::RemoveContext(ResolveContext * context)
703+
void DnssdTizen::RemoveResolveContext(ResolveContext * context)
691704
{
692705
std::lock_guard<std::mutex> lock(mMutex);
693706
auto it = std::find_if(mResolveContexts.begin(), mResolveContexts.end(),

src/platform/Tizen/DnssdImpl.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ struct RegisterContext
5656
RegisterContext(DnssdTizen & instance, const char * type, const DnssdService & service, DnssdPublishCallback callback,
5757
void * context);
5858
~RegisterContext();
59+
60+
void RemoveFromOwner();
5961
};
6062

6163
struct BrowseContext
@@ -78,6 +80,8 @@ struct BrowseContext
7880
BrowseContext(DnssdTizen & instance, const char * type, Dnssd::DnssdServiceProtocol protocol, uint32_t interfaceId,
7981
DnssdBrowseCallback callback, void * context);
8082
~BrowseContext();
83+
84+
void RemoveFromOwner();
8185
};
8286

8387
struct ResolveContext
@@ -103,6 +107,7 @@ struct ResolveContext
103107
~ResolveContext() = default;
104108

105109
void Finalize(CHIP_ERROR error);
110+
void RemoveFromOwner();
106111
};
107112

108113
class DnssdTizen
@@ -123,14 +128,13 @@ class DnssdTizen
123128
CHIP_ERROR Resolve(const DnssdService & browseResult, chip::Inet::InterfaceId interface, DnssdResolveCallback callback,
124129
void * context);
125130

126-
// TODO (a.bokowy): Make these methods private
127-
void RemoveContext(RegisterContext * context);
128-
void RemoveContext(BrowseContext * context);
129-
void RemoveContext(ResolveContext * context);
130-
131131
static DnssdTizen & GetInstance() { return sInstance; }
132132

133133
private:
134+
friend struct RegisterContext;
135+
friend struct BrowseContext;
136+
friend struct ResolveContext;
137+
134138
DnssdTizen() = default;
135139
static DnssdTizen sInstance;
136140

@@ -141,6 +145,10 @@ class DnssdTizen
141145
ResolveContext * CreateResolveContext(const char * name, const char * type, uint32_t interfaceId, DnssdResolveCallback callback,
142146
void * context);
143147

148+
void RemoveRegisterContext(RegisterContext * context);
149+
void RemoveBrowseContext(BrowseContext * context);
150+
void RemoveResolveContext(ResolveContext * context);
151+
144152
std::mutex mMutex;
145153
std::set<std::unique_ptr<RegisterContext>> mRegisterContexts;
146154
std::set<std::unique_ptr<BrowseContext>> mBrowseContexts;

0 commit comments

Comments
 (0)