miniDLNAいじり メモリリーク探し

そもそもは。
miniDLNAは、起動時にメディアの格納フォルダをスキャンして、ffmpeg(avformat)でサイズや時間やbitrateを拾って、それをsqliteに入れておくのだけど、

  • 録画ファイル/フォルダの変更をinotifyで見張っていてdbを更新するが、FreeBSDにinotifyは無いので、ファイルが増えても反映されない
  • miniDLNAを止めて、また起動した場合、sqliteのファイルが残っていると再スキャンしないでそのまま使っちゃう
  • しょうがないので録画ファイルが増えるたびに、miniDLNAを止めて、sqliteのファイルを消して、miniDLNAを起動すると、録画ファイルが100個もあったら、すべてのファイルのプロパティを拾ってdb作るのに数分かかる

というわけで、あまりに面倒なのでSIGHUPでメディアの格納フォルダを再スキャン、という処理を追加した。
ところがどっこい、再スキャン時に900Mくらいメモリ食ってるのに気付いたのが昨日。いくらファイルが多いからといってもありえない。dbファイルが存在しない、最初の起動時には30Mくらいで済んでるし。
というわけで、処理追加部分をおっかけていくと。。。sqliteのSELECT結果をfreeし忘れてるところがあるがな。フォルダを再帰で降りて行くにつれて、どんどんリークしていくという。
修正して、無事に動いてるっぽい。