• [rcssserver] StdoutSaverを復活. (akiyama) 23:27:26

ResultSaverが使われていなかったので,ロードするようにしてみた. しかし,StdoutSaverはちゃんとロードできて使えたが,CSVSaverをロードするとSegmentation faultで落ちてしまう.CSVSaverParamsがロードできなくて,Nullポインタを参照してしまうことが原因とは分かったが,解決方法が分からないので,とりあえず放置.

後は,MySQLSaverなんてのもあるけど,これはもうメンテしなくてもいいかな. どうせ誰も使わないだろうし.

  • [rcssserver] メインループのポリシー変更. (akiyama) 23:27:26

これまでは純粋な無限ループが使われていて,プログラムを抜けるには常にstd::exit()が使われていたが,これではメモリリークが起きてしまうので,ちゃんとループ監視用の変数を用意した. すると,main関数を抜けるところでSegmentation faultが出るようになってしまった.

  • [rcssserver] メモリリーク修正. (akiyama) 23:27:26

上の問題は,timerのダイナミックローディング絡みで起きていたメモリリークが原因だった. 何とか修正できたものの,結構難儀だった.

rcssbase側で提供されているダイナミックローディングの関数がどのタイミングで呼ばれているのかさっぱり分からなくて,gdbで追っかけてもmain関数を抜けた後のシステムライブラリの領域まで行ってしまって何が何やら. 結局,std::cerrの絨毯爆撃をして,ロードしたライブラリをリリースするタイミングによって挙動が変わるということを突き止めることができた.

しかし,何でこんな複雑な実装にするのかなぁ. ダイナミックローディングを止めるだけで,すごくシンプルにまとまるのに.

  • [rcssserver] ダイナミックライブラリの使いかた. (akiyama) 23:27:26

正しい使いかたが分かった.

$ rcssserver load=libcsvsaver

これならエラー無く起動する. なるほどねぇ.

  • [rcssserver] TODO

残るタスクは,

  • strdupで確保されて解放されていないメモリの修正
  • timerモジュールを削除して,rcssserver本体へ統合
  • 64bitライブラリのサーチパス自動検出

こんなところか. 出来れば以下も.

  • AudioSenderの高速化

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (1254d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.