sigwaitinfo에서 죽네요
글쓴이: cb2531 / 작성시간: 금, 2006/03/24 - 4:30오후
Real Time Signal 방식으로 네트웍을 구현해서 접속을 시켰더니
sigwaitinfo 부분에서
실-시각 시그널 0
이런 메세지가 뿌려지면서 에러를 리턴할 겨를도 없이 프로그램이 죽네요
(0이란 숫자는 set 에 등록시킨 시그널입니다. 다른거 등록하면 다른 숫자가.. )
근데 같은 소스를 함수에 넣고 실행하면 괜찮은데
스레드에 넣고 실행하면 저렇게 되는게 수상해서 질문 올립니다
겪어보신 분의 조언을 구합니다 ^^
참고로 커널 버전은 2.6.9-34 입니다.
Forums:
혹시 스레드에서
혹시 스레드에서 sigprocmask 대신 pthread_sigmask 는 호출하셨는지요?
뭐 이것때문에 죽었는지는 모르겠습니다. 잘 안되시면 죽는 소스를 축약해서 올려주시면 왜 죽는지 생각해보는데 도움이 될 것 같네요.
Coral Library Project : http://coral.kldp.net
Orion Project : http://home.megapass.net/~heesc22/
Orion Project : http://orionids.org
꽤 오래된 질문이지만...
지식 공유 하고자 올립니다.
저도 같은 문제로 검색에 검색을 해보았지만 시원한 답변이 나오질 않네요..^^;;
일단 4~5시간 삽질 해 본 결과로 getpid() 요놈에 의한것으로 판단이 됩니다.
리눅스 2.4 kernel 에서의 getpid() 는 각 쓰레드의 고유값이 나온다고 하는군요. (2.4 kernel 시스템이 없어서 테스트는 못해봤습니다.)
현재 리눅스 2.6 kernel 에서는 완벽한 쓰레드 지원(?) 이라 하여 프로세스 아이디는 공유를 하고
gettid() 함수로 쓰레드 ID가 있더군요.;;
gettid() 썼는데 컴파일 에러가 난다면
---------------------------------------------
#include
#define gettid() (long int)syscall(__NR_gettid)
---------------------------------------------
요 놈들을 추가 시켜 주고 gettid() 를 쓰시면 되겠습니다 ^^
결론
RTS 방식의 2.4용 네트워크 예제 소스중
getpid() 값을 키 값으로 활용하기 때문에 발생 하는 문제로
getpid() 함수를 gettid() 함수로 바꿔주시면 잘 작동합니다.
댓글 달기