commit
190c6218ab
|
@ -116,19 +116,22 @@ static void HotplugThreadFunc()
|
|||
|
||||
static void StartHotplugThread()
|
||||
{
|
||||
if (s_hotplug_thread_running.IsSet())
|
||||
// Mark the thread as running.
|
||||
if (!s_hotplug_thread_running.TestAndSet())
|
||||
// It was already running.
|
||||
return;
|
||||
|
||||
s_wakeup_eventfd = eventfd(0, 0);
|
||||
_assert_msg_(PAD, s_wakeup_eventfd != -1, "Couldn't create eventfd.");
|
||||
s_hotplug_thread_running.Set(true);
|
||||
s_hotplug_thread = std::thread(HotplugThreadFunc);
|
||||
}
|
||||
|
||||
static void StopHotplugThread()
|
||||
{
|
||||
if (s_hotplug_thread_running.TestAndClear())
|
||||
{
|
||||
// Tell the hotplug thread to stop.
|
||||
if (!s_hotplug_thread_running.TestAndClear())
|
||||
// It wasn't running, we're done.
|
||||
return;
|
||||
// Write something to efd so that select() stops blocking.
|
||||
uint64_t value = 1;
|
||||
if (write(s_wakeup_eventfd, &value, sizeof(uint64_t)) < 0)
|
||||
|
@ -136,12 +139,10 @@ static void StopHotplugThread()
|
|||
}
|
||||
s_hotplug_thread.join();
|
||||
}
|
||||
}
|
||||
|
||||
void Init()
|
||||
{
|
||||
s_devnode_name_map.clear();
|
||||
PopulateDevices();
|
||||
StartHotplugThread();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue