From c9af358e4bbc39da7dfe3ce650008c12ac3f8335 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 23 Jan 2014 22:21:45 +0100 Subject: [PATCH] db/upnp/Discovery: move code to LockAdd(), LockRemove() --- src/db/upnp/Discovery.cxx | 27 ++++++++++++++++++--------- src/db/upnp/Discovery.hxx | 3 +++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/db/upnp/Discovery.cxx b/src/db/upnp/Discovery.cxx index 5eaf054f5..4aeb381fd 100644 --- a/src/db/upnp/Discovery.cxx +++ b/src/db/upnp/Discovery.cxx @@ -53,6 +53,22 @@ isMSDevice(const char *st) return memcmp(MediaServerDType, st, sz) == 0; } +inline void +UPnPDeviceDirectory::LockAdd(std::string &&id, ContentDirectoryDescriptor &&d) +{ + const ScopeLock protect(mutex); + directories[std::move(id)] = std::move(d); +} + +inline void +UPnPDeviceDirectory::LockRemove(const std::string &id) +{ + const ScopeLock protect(mutex); + auto i = directories.find(id); + if (i != directories.end()) + directories.erase(i); +} + inline void UPnPDeviceDirectory::discoExplorer() { @@ -88,10 +104,7 @@ UPnPDeviceDirectory::discoExplorer() } } - mutex.lock(); - directories[std::move(tsk->deviceId)] = std::move(d); - mutex.unlock(); - + LockAdd(std::move(tsk->deviceId), std::move(d)); delete tsk; } } @@ -120,14 +133,10 @@ UPnPDeviceDirectory::OnAlive(Upnp_Discovery *disco) inline int UPnPDeviceDirectory::OnByeBye(Upnp_Discovery *disco) { - if (isMSDevice(disco->DeviceType) || isCDService(disco->ServiceType)) { // Device signals it is going off. - const ScopeLock protect(mutex); - auto it = directories.find(disco->DeviceId); - if (it != directories.end()) - directories.erase(it); + LockRemove(disco->DeviceId); } return UPNP_E_SUCCESS; diff --git a/src/db/upnp/Discovery.hxx b/src/db/upnp/Discovery.hxx index 78d905369..fec9fe1fb 100644 --- a/src/db/upnp/Discovery.hxx +++ b/src/db/upnp/Discovery.hxx @@ -129,6 +129,9 @@ private: */ bool expireDevices(Error &error); + void LockAdd(std::string &&id, ContentDirectoryDescriptor &&d); + void LockRemove(const std::string &id); + /** * Worker routine for the discovery queue. Get messages about * devices appearing and disappearing, and update the