blob: 10d454a4f0ed443e3ad02c44ff2b646fc1754ba8 [file] [log] [blame]
#pragma once
#include <thread>
// This macro is used to validate that a code is executed from the expected
// thread. It's useful to detect unexpected race on data members.
#define CHECK_VALID_THREAD() \
if (not isValidThread()) \
JAMI_ERR() << "The calling thread " << getCurrentThread() \
<< " is not the expected thread: " << threadId_;
namespace jami {
namespace upnp {
class UpnpThreadUtil
{
protected:
std::thread::id getCurrentThread() const { return std::this_thread::get_id(); }
bool isValidThread() const { return threadId_ == getCurrentThread(); }
// Upnp context execution queue (same as manager's scheduler)
// Helpers to run tasks on upnp context queue.
static ScheduledExecutor* getScheduler() { return &Manager::instance().scheduler(); }
template<typename Callback>
static void runOnUpnpContextQueue(Callback&& cb)
{
getScheduler()->run([cb = std::forward<Callback>(cb)]() mutable { cb(); });
}
std::thread::id threadId_;
};
} // namespace upnp
} // namespace jami