Thread unlock 시 Segmentation fault가 나옵니다.
글쓴이: icaptina / 작성시간: 목, 2010/07/22 - 2:22오후
안녕하세요. 리눅스 왕초보입니다.
이번에 회사에서 급하게 리눅스를 사용하게 되면서 아무것도 모르고 사용하고있습니다.
HOST : x86 CentOS 5.4 Kernel 2.6.18?
arm-linux-gcc 3.4.3
Target : s3c2440 arm9
이렇게 크로스 컴파일 환경을 만들어 두고 app을 올렸는데요
일단 gcc로 컴파일 했을때는 잘 돌아갔습니다. 그런데 arm-linux-gcc로 컴파일
하니까 에러는 안나는데 돌다가 Segmentation fault가 났습니다.
중간중간 프린트문을 넣어서 확인해본 결과 pthread_mutex_unlock 부분에서
계속 Segmentation fault가 났습니다. 막아두면 넘어가고요...
status = pthread_mutex_init(&cfg_gsCcuCfg.SEMA_CfgWr, NULL); pthread_mutex_lock(&cfg_gsCcuCfg.SEMA_CfgWr); pthread_mutex_unlock(&cfg_gsCcuCfg.SEMA_CfgWr);
이렇게 init, lock, unlock 이 되도록 사용을 했습니다. 근데 unlock에서
어디서 사용을 하든 unlock부분에서 Segmentation fault가 나옵니다.
이경우 어떤것을 의심해봐야 할까요...? 제발 도와주세요 너무 답답합니다.
Forums:
잘은 모르지만...
뮤텍스 초기화한 "&spDebug->MUTEX_PRINT" 이것과 lock, unlock하는 "&sDebugTask.MUTEX_PRINT" 이게 같은 건가요?
같은게 아니라면 초기화가 안 된 뮤텍스를 가지고 lock, unlock을 하시고 계신 것 같은데요?
아 죄송합니다..
죄송합니다 위의 소스가 부적절 했던거 같네요
status = pthread_mutex_init(&cfg_gsCcuCfg.SEMA_CfgWr, NULL);
pthread_mutex_lock(&cfg_gsCcuCfg.SEMA_CfgWr);
pthread_mutex_unlock(&cfg_gsCcuCfg.SEMA_CfgWr);
이런식으로 했습니다....
위에 상황만 보고는 알 수가 없을것 같군요
간단한 mutex예제를 따로 만들어서 테스트 해 보시는게 가장 빠를것 갈군요
그래도 죽는다면 시스템 상에 문제일것 같습니다.
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
잘 모르지만
엉뚱한 데에서 free() 가 동작하고 있을 가능성도 있습니다.
segmentation fault 라면 발생되는 시점이 문제가 아니라 어디선가에서 메모리가 이미 깨졌을 수도 있으니까요
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
debugging tool을
debugging tool을 사용하셔서 memory 에 대한 invalid write 혹은 invalid read 가 발생한 지점을 확인해보시는게 좋을 거 같습니다.
내지는, pthread.h가 include 되어 있는지, 컴파일시 -lpthread 를 추가하셨는지 확인해보시고..
optimization 설정을 조정해서 확인해보시는것도 하나의 방법일거 같습니다.
노파심에
pthread_mutex_init은 아무도 그 뮤텍스를 쓰기 전에 단 한번만 호출하신 거 맞죠?
메모리 관련 문제일 가능성이 가장 많습니다.
만약 쓰레드 관련 문제라면 리눅스에서 기본적으로 동작하는 소프트웨어들도
문제가 발생할 가능성이 높겠죠.
아얘 O/S가 제대로 기동하지 않을 가능성도 있습니다.
또한 Thread관련이라면 보통 Segmentation Fault가 나지 않습니다.
사용하신 메모리의 엄한 번지를 억세스 하고 있는 것이 아닌지
앞에 쓰신 어떤 분의 말씀대로 메모리를 이미 날려버리신 것은 아닌지
한번 잘 찾아보시기 바랍니다.
댓글 달기