2014年6月29日日曜日
6/29 Signalの受信
signalfd。
これを使用するとpollでsignalの受信イベントを待つことができる。
int signalfd(int fd, const sigset_t *mask, int flags);
fdはsignal受信用ファイルディスクリプタ。これはすでにsignal受信用のファイルディスクリプタがある場合に使用され、初めて使用する場合は、-1を入力すること。
maskは signalの受信ルール。詳しくはsigprocmaskを見ること。
flagsはファイルディスクリプタ作成時のルール。
詳細はMan Pageを参照すること。
2014年6月27日金曜日
2014/06/26 パイプのメモ
よって、send/recvは使用できない。
(2)パイプにはread/writeが指定されている。
pipe[0]がread、pipe[1]がwriteである。
今日恥ずかしながら初めて知りました。
少し賢くなりました。
2014年6月25日水曜日
2014/06/25 shared_ptr使用のメモ
一時変数をshared_ptrに格納した際、double freeのエラーが発生。
Object obj;
std::shared_ptr<Object> objp = std::shared_ptr<Object>(&obj);
objp = nullptr;
どうもこれを実行すると一時変数のobjを解放してしまう模様。
解決策としてはshared_ptrを新たに生成すること。
Object obj;
std::shared_ptr<Object> objp = std::make_shared<Object>(obj);
objp = nullptr;
shared_ptrはまだまだ勉強する必要があるなと感じさせられたデバッグでした。
2014年6月20日金曜日
2014/06/20 signalの受信
本日は起動後の終了処理を実装。
signalを受信しTerminate関数を呼ぶことに成功。
気になる点は、2点。
・sigusr1受信時に落ちる。
・プロセスのforkに失敗。
2つ目は動作確認を始めてから解決していないので、しっかりと追っていきたい。
本日の作業
https://github.com/chikin14niwa/hytframework/commit/01e0d031d40ff1179415a7bc8044b5dba63baecd
2014年6月17日火曜日
2014/06/17 デバッグ始めました
子プロセスが上手く動作しない原因の解析を開始しました。
原因の一つは単純で、Initialize関数の入力期待値と実際の入力値が異なったから。Extentionの起動関数を変更した際、修正漏れがあったよう。
対策としては、これまではExtention用の設定値のみを入力としていたが、該当のExtentionとExtention以外の設定値を全て渡すように変更。
ようやく点と点がつながってきて面白くなってきました。
本日の作業
https://github.com/chikin14niwa/hytframework/commit/7f8467c7202241d174434779494bef2115501f17
2014年6月16日月曜日
6/15 ようやく
ようやくテストに辿りつけました。
実装にところどころ抜けがあるのは、最初に設計できていないから。そこは勉強のため目をつぶるとして一個ずつ潰していきたい。
まず明日はExtentionがうまく起動していない部分を調査したい。
TestExtentionの動作確認して、TimerExtentionの動作確認終わればリリースしたいと思います。
本日の作業:
https://github.com/chikin14niwa/hytframework/commit/3501f11e072a0923d81c7bf18399a9370d33caad
2014年6月10日火曜日
6/10 TestExtentionの実装終了
久しぶりの投稿です。なかなかまとまって時間がとれず、実装・投稿が遅れました。
今回はボチボチの進捗です。まずSocketMonitorの実装とそれに伴うExtentionの修正が終わりました。
コールバック関数の呼び出しは、前回の方針通り実装し、ビルドが通るところまで確認しました。
そしてTestExtentionの実装が終了しました。これでテスト起動ができる状態となりました。
テスト起動実施までにあとやることは、TimerExtentionの実装とmain関数にCtrl+c押下時の挙動の実装。
動作確認次第、リリースしたいと思います。
本日の作業:
https://github.com/chikin14niwa/hytframework/commit/21356f8e8c2be0252227bddba75662dbd9d723c0
2014年6月6日金曜日
6/5 方針メモ
家のマシンのデータを同期し忘れたため、作業できず。
そのため昨日、今日は調査を行った。
調査項目は、SocketMonitorのイベント発生時にExtentionへの伝達方法。
std::function+std::bindやInterfaceクラスの作成、boost::signals2+boost::bindの使用を検討。
boost::signals2を使用してみたい気持ちはあるが、今回はstd::function+std::bindを使用。理由は、標準であること+呼び出す関数が複数になることは想定できないため。
この方針で実装してダメならboostを使用しよう。
2014年6月3日火曜日
6/3 コールバック関数の渡し方に悩む
SocketMonitoringの実装が一通り終わり、Extentionの修正を実施。
CoreEngine動作確認のためにも、早く終わらせたいが、設計・実装方針が全く決まらず作業が止まっている。
それはSocketMonitorへのコールバック関数の渡し方。
今回悩んでいるポイントは以下3点。
①コールバック関数には内部変数を使用する必要があり、static化できない。
②std::bindで実現できそうだが、引数に自身のポインタを渡さなければならない。
③rvalue referenceの関係で渡したコールバック関数(std::function)が正しく格納できるか。
このまま突き進むか、I/Fを作るか、別の方法を考えるかが今週の検討事項になりそうです。
本日の作業:
https://github.com/chikin14niwa/hytframework/commit/dd6b13a4faa23d226688da4c04173d815180b1ce
6/2 ソケットの監視
現在書き直しを最小限にすべく、ソケットを監視するクラスを実装中。
少し工夫した点はpollfdへの登録方法。これが吉と出るか凶と出るかはこれから検証。
日記を書きながら、コールバックのエラーチェックをしていないので実装する必要があることに気づいた。
これが終わればTestExtentionに戻れそう。
SocketMonitoringクラスはいろいろな場所で使うので、しっかり使って枯らしたい。
これは開発とは別件ですが、今の私の環境はタブがスペース2つなのでgithubにアップするとレイアウトが崩れてしまう。
タブ変換ツールを次のリリース時には作りたい。
本日の作業:
https://github.com/chikin14niwa/hytframework/commit/3835a4960391b6f625808fcb5773757bbf210d0e
2014年6月1日日曜日
5/31 メイン関数の修正開始
これからExtention実装するたびに毎回実装するのは面倒臭いなと。
ということで、ExtentionクラスのRunメソッドの修正を開始。
同時にSocketMonitoringというクラスを使用し、
登録しているソケットの状態が変化したら通知またはコールバック関数を呼び出す仕組みを検討中。
今日は進捗がほぼないので、ソースのアップロードはなし。