쓰레드의 이상동작.. gcc -O2 옵션때문인가요?
글쓴이: 버그소년 / 작성시간: 수, 2003/10/01 - 1:02오후
쓰레드 하나를 생성하고,
메인프로세서는 루프를 돌면서 소켓recv를 해서 데이터를 리스트에 저장합니다.
쓰레드는 주기적으로 리스트를 뒤저가며 적절한 작업을 수행합니다.
구조도 상당히 단순하고, 전송되는 데이터도 상당히 적은 수준입니다.
그런데 일정시간동안 동작 후 바보처럼 아무런 동작을 하지 않더군요.
lsstack으로 프로세스보니 정상적일때는
LWP 3495 (initial thread): 0x4011b852 in __libc_recvfrom (0x00000006 ,0xbffff9f8 ,0x00000400 ,0x00000000) 0x0804bc68 in main LWP 3497 (manager thread): 0x40113bb0 in poll (0x080675d8 ,0x00000001 ,0x000007d0 ,0x4002626c) 0x4001ad96 in __pthread_manager LWP 3499: 0x400ebde1 in nanosleep (0x00000001 ,0x00000000 ,0xbf7ffb24 ,0x0804b7ed) 0x0804b7f7 in Timer__FPv (0x00000000 ,0xbf7ffca4 ,0x00000000 ,0x4001afe0) 0x4001b0ba in pthread_start_thread
한참을 돌리다가 바보가 된 상태는
LWP 32492 (initial thread): 0x4011b852 in __libc_recvfrom (0x00000006 ,0xbffffa08 ,0x00000400 ,0x00000000) 0x0804bcd8 in _start LWP 32495 (manager thread): 0x40113bb0 in poll (0x080674d8 ,0x00000001 ,0x000007d0 ,0x4002626c) 0x4001ad96 in __pthread_manager LWP 32496: 0x400ebde1 in nanosleep (0x00000001 ,0x00000000 ,0xbf7ffb24 ,0x0804b85d) 0x0804b867 in _start (0x00000000 ,0xbf7ffca4 ,0x00000000 ,0x4001afe0) 0x4001b0ba in pthread_start_thread
위에서 보는것과 같이 쓰레드가 이상합니다.
Timer함수를 계속 실행하고 있어야 하는데.. 이상한 곳으로 가 버리더군요.
혹시나 해서 -O2옵션을 제외하고 컴파일하여 테스트중인데 2일째 무사히 돌고있습니다.
(-O 옵션 주고 보통 12시간정도 마다 바보상태가 됩니다.)
debian 2.4.9
gcc version 2.95
컴파일 옵션에 관련해서 주의해야할 내용이나 기타 도움이 될만한 정보 있으면 알려주세요..
Forums:
답변은 아니고...저도 O2 옵션을 주면 ㅡ_-) 서버가 산화(?
답변은 아니고...
저도 O2 옵션을 주면 ㅡ_-) 서버가 산화(?)되어 버리던데...
그래서 그냥 컴파일하고 있죠.
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
댓글 달기