2020年4月1日水曜日

[Linux] エージングで逝ってしまう調査3

こんにちは

ソフトな道をほのぼのと今日も歩きます。


今回は、前回の逝ってしまう原因調査の続きです。


スレッドがsnd_pcm_writei()実行中に”-EBADFD”が入ってくると、

   

    そのエラーに対する処理は入っていない為


    リトライ発生という無限ループに入っていました。

   

調査したところ、そもそも、EBADFD自体でるのがNGということが分かりました。


スレッド内でクローズ処理をしていたのですが、


オープン失敗に対してもクローズ処理をしているところがありました。


要するにnullに対してのクローズ処理。


お恥ずかしい限りですw


また、FDファイルディスクリプタ自体が不定な箇所がありました。


fopen()とopen()のエラー判定は違うことに対処できていなかったです。


fopen()の失敗はNULL(0)

open()の失敗は-1

です。

 

FDはそれぞれ1以上、0以上となるので、エラー判定はしっかりしないと、数百回に一回の不具合につながります。


    今回は以上です。


[環境]

私の使用環境は VMware 上でUbuntu14.04を使用しています。

コンパイラ: arm-linux-gnueabihf-gcc


今日から新入社員が入ってきます。

電車内でおしゃべりしているが、飛沫感染させないようにしてもらいたいですね。

 

0 件のコメント:

コメントを投稿