2010-01-31 5 views
3

다중 스레드 응용 프로그램에서 sgprocmask()가 segfault로 알려진 이유는 무엇입니까?sigprocmask() segfault 일으키는

clone()을 사용하여 여러 스레드를 만드는 응용 프로그램이 있습니다. 나는 sigprocmask를 사용할 때 어떤 이유 때문에 segfaults (항상 그런 것은 아니지만)를 결정했습니다. backtrace()에서 siglongjmp() 뒤에 sigprocmask()를 사용하면 segfault가 발생하는 것처럼 보입니다.

아이디어가 있으십니까?

답변

1

두 번째 및 세 번째 인수를 확인하십시오. 값이 NULL이 아니면 각각이 sigset_t에 대한 유효한 포인터인지 확인하십시오.

sigprocmask()은 단일 스레드 프로세스에 대해서만 공식적으로 정의되어 있습니다. 다중 스레드 프로세스는 대신 pthread_sigmask()을 사용해야하며, 동일한 인수를 사용하는 경우 errno을 사용하는 대신 오류 코드를 반환합니다.