Annotation of nono/host/signalthread.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2021 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: //
                      8: // シグナルスレッド
                      9: //
                     10: 
                     11: #pragma once
                     12: 
                     13: #include "thread.h"
                     14: #include <atomic>
                     15: 
                     16: class SignalThread : public ThreadDevice
                     17: {
                     18:        using inherited = ThreadDevice;
                     19:        friend void signal_handler(int);
                     20: 
                     21:  public:
                     22:        SignalThread();
                     23:        ~SignalThread() override;
                     24: 
                     25:        bool StartThread() override;
                     26:        void ThreadRun() override;
                     27:        void Terminate() override;
                     28: 
                     29:        // HostCOM スレッドへのパイプを追加する (HostCOM スレッドから呼ばれる)
                     30:        void AddPipe(int fd);
                     31:        // HostCOM スレッドへのパイプを削除する
                     32:        void DeletePipe();
                     33: 
                     34:  private:
                     35:        // シグナルを再配送する
                     36:        void WriteSignal(int fd, int signo);
                     37: 
                     38:        // HostCOM スレッドとのパイプを接続/切断する
                     39:        void ChangeCOM(int reqfd);
                     40: 
                     41:        // このスレッドにシグナルを投げる
                     42:        void Kill(int signo);
                     43: 
                     44:        // シグナルをブロック/アンブロックする
                     45:        void Mask(int how, int signo);
                     46: 
                     47:        // ブロックするシグナル集合
                     48:        sigset_t waitset {};
                     49: 
                     50:        // HostCOM へのパイプ
                     51:        int wpipe {};
                     52: 
                     53:        // コマンド(フラグ)
                     54:        // 終了フラグは立てるだけ、読むだけなので atomic じゃなくてもいいはず。
                     55:        bool request_terminate {};
                     56: 
                     57:        // HostCOM からの接続、切断要求。
                     58:        // 負数なら要求なし、
                     59:        // INT_MAX なら切断を要求中、
                     60:        // それ以外ならこのディスクリプタの接続を要求中。
                     61:        std::atomic<int> request_wpipe {};
                     62: };
                     63: 
                     64: extern SignalThread *gSignalThread;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.