void stop()

in src/cubeb_log.cpp [117:138]


  void stop()
  {
    assert(((g_cubeb_log_callback == cubeb_noop_log_callback) ||
            !g_cubeb_log_callback) &&
           "Only call stop after logging has been disabled.");
    shutdown_thread = true;
    if (logging_thread.get_id() != std::thread::id()) {
      logging_thread.join();
      logging_thread = std::thread();
      auto * owned_queue = msg_queue.load();
      // Check if the queue is being used. If not, grab ownership. If yes,
      // try again shortly. At this point, the logging thread has been joined,
      // so nothing is going to dequeue.
      // If there is a valid pointer here, then the real-time audio thread that
      // logs won't attempt to write into the queue, and instead drop the
      // message.
      while (!msg_queue.compare_exchange_weak(owned_queue, nullptr)) {
      }
      delete owned_queue;
      msg_queue_consumer.store(nullptr);
    }
  }