2007年02月18日
pthread_mutex_unlock忘れ
static int
func1(void)
{
pthread_mutex_lock(&mutex);
int r = func2();
if (is_error(r)) {
return -1;
}
pthread_mutex_unlock(&mutex);
return 0;
}
この手のバグは本当に取りづらい。具合が悪い事に、あるサービス用のクライアントライブラリだったのでこのコードを使っている全てのインスタンスが数十時間後にdeadlockで止まった。
func1がネットワークがらみのコードだったので、偶然ネットワークが不調になってエラーになり、次にこの関数に突入したときに固まったようである。
今回は人の目にお世話になって、debug出来た。なんでこの場所に限ってRAIIを使わなかったのだろう(自分)...。
- by
- at 19:39

comments