db/upnp/Discovery: move code to LockAdd(), LockRemove()

This commit is contained in:
Max Kellermann 2014-01-23 22:21:45 +01:00
parent 3afcfe3330
commit c9af358e4b
2 changed files with 21 additions and 9 deletions

View File

@ -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;

View File

@ -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