Thread unlock 시 Segmentation fault가 나옵니다.

icaptina의 이미지

안녕하세요. 리눅스 왕초보입니다.

이번에 회사에서 급하게 리눅스를 사용하게 되면서 아무것도 모르고 사용하고있습니다.

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가 나옵니다.

이경우 어떤것을 의심해봐야 할까요...? 제발 도와주세요 너무 답답합니다.

goahno의 이미지

뮤텍스 초기화한 "&spDebug->MUTEX_PRINT" 이것과 lock, unlock하는 "&sDebugTask.MUTEX_PRINT" 이게 같은 건가요?
같은게 아니라면 초기화가 안 된 뮤텍스를 가지고 lock, unlock을 하시고 계신 것 같은데요?

icaptina의 이미지

죄송합니다 위의 소스가 부적절 했던거 같네요

status = pthread_mutex_init(&cfg_gsCcuCfg.SEMA_CfgWr, NULL);
pthread_mutex_lock(&cfg_gsCcuCfg.SEMA_CfgWr);
pthread_mutex_unlock(&cfg_gsCcuCfg.SEMA_CfgWr);

이런식으로 했습니다....

madman93의 이미지

간단한 mutex예제를 따로 만들어서 테스트 해 보시는게 가장 빠를것 갈군요
그래도 죽는다면 시스템 상에 문제일것 같습니다.
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

jos77의 이미지

엉뚱한 데에서 free() 가 동작하고 있을 가능성도 있습니다.
segmentation fault 라면 발생되는 시점이 문제가 아니라 어디선가에서 메모리가 이미 깨졌을 수도 있으니까요

-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr

mirr187의 이미지

debugging tool을 사용하셔서 memory 에 대한 invalid write 혹은 invalid read 가 발생한 지점을 확인해보시는게 좋을 거 같습니다.

내지는, pthread.h가 include 되어 있는지, 컴파일시 -lpthread 를 추가하셨는지 확인해보시고..

optimization 설정을 조정해서 확인해보시는것도 하나의 방법일거 같습니다.

jick의 이미지

pthread_mutex_init은 아무도 그 뮤텍스를 쓰기 전에 단 한번만 호출하신 거 맞죠?

codepage의 이미지

만약 쓰레드 관련 문제라면 리눅스에서 기본적으로 동작하는 소프트웨어들도
문제가 발생할 가능성이 높겠죠.
아얘 O/S가 제대로 기동하지 않을 가능성도 있습니다.
또한 Thread관련이라면 보통 Segmentation Fault가 나지 않습니다.

사용하신 메모리의 엄한 번지를 억세스 하고 있는 것이 아닌지
앞에 쓰신 어떤 분의 말씀대로 메모리를 이미 날려버리신 것은 아닌지
한번 잘 찾아보시기 바랍니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.