bool
StopDBus()
{
  MOZ_ASSERT(!NS_IsMainThread());
  NS_ENSURE_TRUE(gDBusServiceThread, true);

  if (gDBusThread) {
    static const char data = DBUS_EVENT_LOOP_EXIT;
    ssize_t wret = TEMP_FAILURE_RETRY(write(gDBusThread->mControlFdW.get(),
                                            &data, sizeof(data)));
    NS_ENSURE_TRUE(wret == 1, false);
  }

#ifdef DEBUG
  LOG("DBus Thread Joining\n");
#endif

  if (NS_FAILED(gDBusServiceThread->Shutdown())) {
    NS_WARNING("DBus thread shutdown failed!");
  }
  gDBusServiceThread = nullptr;

#ifdef DEBUG
  LOG("DBus Thread Joined\n");
#endif

  if (gDBusThread) {
    gDBusThread->CleanUp();
    gDBusThread = nullptr;
  }

  return true;
}