cygwin1.dllと格闘中
CygwinでHamigaki.Audioのテストが暴走する問題を調査中です。
サンプルのpcm_record等は正常に動作しますし、pcm_source_testの2回目の読み込みでとまっているようだったので、次のコードを試したところ、再現しました。
#include <fcntl.h> #include <unistd.h> void capture_sound(void) { int fd; char buf[1]; fd = open("/dev/dsp", O_RDONLY); read(fd, buf, sizeof(buf)); close(fd); // 2度目のココで暴走する } int main(void) { capture_sound(); capture_sound(); return 0; }
というわけでCygwinのバグっぽいです。
偶然、別バージョンのcygwin1.dllがPATHの通った場所にあって、(bashでなく)DOS窓で実行したら動いてしまいました。
手元(setup.exeの作業ディレクトリ)に残っている全バージョンを試してみたところ、1.5.19-3で失敗、1.5.18-1で成功となりました。
この間の修正が影響しているはずですが、/dev/dspに関する変更は問題なさそうに見えます。
自前でCygwinをビルドして調べてみたとところ、waveInClose()の中で落ちているみたいで、誰かがメモリ壊していますね。
あと少しで分かりそうなんですが、また明日。