27    std::queue<unsigned char> m_queue;
 
   29    std::atomic_bool m_running;
 
   30    std::unique_ptr<std::thread> rcv_thread_id;
 
   36#pragma message("CharBackendStdio not yet implemented for WIN32") 
   38    static void catch_fn(
int signo) {}
 
   40    static void tty_reset()
 
   57        SCP_TRACE(()) << 
"legacy_char_backend_stdio constructor";
 
   75        gs::SigHandler::get().register_on_exit_cb(std::string(this->name()) + 
".char_backend_stdio::tty_reset",
 
   77        gs::SigHandler::get().add_sig_handler(
SIGINT, gs::SigHandler::Handler_CB::PASS);
 
   78        gs::SigHandler::get().register_handler(std::string(this->name()) + 
".char_backend_stdio::SIGINT_handler",
 
   80                                                   std::lock_guard<std::mutex> 
lock(m_mutex);
 
   84                                                       if (!m_queue.empty()) m_event.async_notify();
 
   89            rcv_thread_id = std::make_unique<std::thread>(&legacy_char_backend_stdio::rcv_thread, 
this);
 
   96        act.sa_handler = &catch_fn;
 
  109            int r = read(
fd, &
c, 1);
 
  111                std::lock_guard<std::mutex> 
lock(m_mutex);
 
  116                if (!m_queue.empty()) {
 
  117                    m_event.async_notify();
 
  132        std::lock_guard<std::mutex> 
lock(m_mutex);
 
  134        while (!m_queue.empty()) {
 
  135            if (m_can_receive(m_opaque)) {
 
  138                m_receive(m_opaque, &
c, 1);
 
  147    void write(
unsigned char c)
 
  155        gs::SigHandler::get().deregister_on_exit_cb(std::string(name()) + 
".char_backend_stdio::tty_reset");
 
  156        gs::SigHandler::get().deregister_handler(std::string(name()) + 
".char_backend_stdio::SIGINT_handler");
 
  159        if (rcv_thread_id->joinable()) rcv_thread_id->join();