제가 간단한 프록시 데몬을 만들어서 thread 별로 작업을 분할했습니다. (linux 환경)
A(패킷수신) -> 작업전달 -> B(내용분석) -> 작업전달 -> C(원래목적지로 전달)
대략적으로 이런식인데요, 멀티쓰래드이기에 쓰래드간에 공유영역에 대해
mutex 를 걸었습니다. critical구간도 굉장히 짧고요 (pthread_mutex_lock,pthread_mutex_unlock)
그래서 잘 도는데, 한 2 ~ 3일 돌리다보면 데드락에 빠집니다.
소스코드 뚤어져라 봐도 코드상 문제점은 잘 안보입니다.
그렇게까지 복잡한 코드도 아니고요 그래서 strace 보니 아래와 같습니다.
[pid 5391] futex(0x2ee00db8, FUTEX_WAIT, 2, NULL
[pid 5393] futex(0x80d7414, FUTEX_WAIT, 2, NULL
[pid 5394] futex(0x80d743c, FUTEX_WAIT, 2, NULL
솔직히 감이 잘 안오고요