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()の中で落ちているみたいで、誰かがメモリ壊していますね。


あと少しで分かりそうなんですが、また明日。