ページ

2012年7月19日木曜日

recpt1のsegfaultエラー対応

EPGrecとrecpt1で録画しはじめて1年半になるけれど、今までに何度か録画に失敗したことがある。

最初は、電子番組表の取得とダブったのかと思っていたけれど、どうやら違うことがわかった。

syslogを見ると以下のようなメッセージが表示されている。

kernel: recpt1[7212]: segfault at 0000000000708000 rip 0000003b2227ac44 rsp 0000000042bd6018 error 6

電子番組表の取得では頻繁に同じようなエラーが表示されているが、こっちは原因が違うようだ。

kernel: epgdump[8542]: segfault at 00007fff16868000 rip 000000000040319b rsp 00007fff16861df8 error 4

電子番組表は、再取得されるので無視しても良いのだが、通常の番組は困る。

で、以下のようにdo-record.shを書いて対応している。(以下、抜粋)

if [ ${MODE} == 0 ]; then
    $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} >/dev/null &
else
    $RECORDER --b25 --strip --sid $SID $CHANNEL $DURATION ${OUTPUT} >/dev/null &
fi
PID=$! ← recpt1のpidを取得
sleep 8 ← segfaultエラーは必ずrecpt1起動して4秒後に発生しているので余裕をみて8秒待つ
COMM=$(ps -p ${PID} -o comm=)
if [ "${COMM}" != "recpt1" ]; then ← recpt1は起動しているかを確認し、落ちていれば再起動
    if [ ${MODE} == 0 ]; then
        $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} >/dev/null &
    else
        $RECORDER --b25 --strip --sid $SID $CHANNEL $DURATION ${OUTPUT} >/dev/null &
    fi
fi
while : ← recpt1が終了するまで、待つ
do
  COMM=$(ps -p ${PID} -o comm=)
  if [ "${COMM}" != "recpt1" ]; then
    break
  fi
  sleep 1
done


上記のようにコードを記述してから、何度かsegfaultエラーが発生したが、今のところ録画には成功している。


しかし、ここ2日、「TMCC LOCK ERROR」という新しいエラーがではじめた。


いままでの対応で録画はできているのだけど・・・

0 件のコメント:

コメントを投稿