pthread 사용시에 futex 에서 dead lock 이 됩니다. 도와주세요.
안녕하세요. 제가 UDP 통신프로그램(heart bit check)을 만들었는데요.
어쩌다가 설정을 바뀐 경우에 데몬 자체가 hang 이 걸리면서 멈추는 경우가 발생합니다.
Main 함수가 있고 따로 pthread_create() 를 해서 thread를 하나 돌립니다.
Main thread: packet 수신
sub thread : client IP timeout 검사
위와 같은 역활을 수행합니다. 그리고 메모리는 수신 client 의 timeout table 을 관리하고 있고요
이 table 의 값을 변경할 때 pthread_mutex_lock() 으로 처리를 합니다. 수정 후 바로 unlock() 하고요
그런데 불규칙하게 아래와 같이 멈추는 경우가 발생합니다. 원래대로라면 select(), recvform(), sendto()같은 함수가
계속 호출이 되어야 하는데 아래와 같이 멈추어 있습니다.
bash-3.1# strace -p 18948 -f
Process 18949 attached with 2 threads - interrupt to quit
[pid 18948] futex(0x8078900, FUTEX_WAIT, 2, NULL
[pid 18949] futex(0x8078900, FUTEX_WAIT, 2, NULL
현재 답답한 상태입니다. mutex 를 걸어놓은 영역에서 sendto(), msgget(), msgsnd(비동기) 이런 종류의 시스템 콜만
사용하고요. 특별한 연산은 없는 상태입니다. memcpy, strcpy 정도 (64byte 이내)
제가 궁금한 점은 왜 데드락 상태에 빠지는지와 데몬이 데드락에 걸렷을 경우 다른 데몬에서 이를 감지 할 수 있는지 여부입니다.
고수님들 제발 도와주세요... -,.-
_lock() 대신 _trylock()을
_lock() 대신 _trylock()을 사용해보고 실패날 경우 오류를 출력해보세요.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
댓글 달기