aio_cancel

aio_cancelしても、aio_readが止まらない件。どうもそういうものらしい。

  • Queueに入ったまま、実際の読み込みが始まっていない状態でaio_cancel(そんな状況がほんとにあるのか?) ... AIO_CANCELEDで成功
  • 読み込み処理が開始された後でaio_cancel ... AIO_NOTCANCELEDかつEINPROGRESSのエラー

何らかの原因でチューナからTSが落ちてこなくて、aio_readから完了通知が来ない状況がたまに起こる。実験としては、放送のないチャンネルを指定すると100%発現する。
この場合は、読み込み開始してるので、aio_cancelでは止まらない。それに、aio_readにはタイムアウトが指定できない。
結局、一定時間(今は3秒)データが降ってこなければ、libusb20_dev_resetするしかないかー。
録画のことを考えると、0.1秒くらいデータが落ちてこなかったら、resetして再initしてread開始して、0.5秒分くらいdropするけど録画し続ける、という方がよさそう。3回失敗したら終了、とか。