쓰레드의 이상동작.. gcc -O2 옵션때문인가요?

버그소년의 이미지

쓰레드 하나를 생성하고,

메인프로세서는 루프를 돌면서 소켓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

컴파일 옵션에 관련해서 주의해야할 내용이나 기타 도움이 될만한 정보 있으면 알려주세요..

purewell의 이미지

답변은 아니고...

저도 O2 옵션을 주면 ㅡ_-) 서버가 산화(?)되어 버리던데...

그래서 그냥 컴파일하고 있죠.

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz