2010-01-31 130 views
3

sigprocmask()在多线程应用程序中使用时是否存在segfault的众所周知的原因?sigprocmask()导致段错误

我有一个应用程序使用clone()创建多个线程。我已经确定,由于某种原因,当我使用sigprocmask它segfaults(尽管并非所有的时间)。在backtrace()中,当我在siglongjmp()之后使用sigprocmask()时,它看起来像是发生了segfault。

任何想法?

回答

1

检查第二个和第三个参数。如果它们不是NULL,请确保它们都是指向sigset_t的有效指针。

请注意sigprocmask()只是为单线程进程正式定义的。多线程进程应该使用pthread_sigmask()代替,虽然它返回错误代码,但它使用相同的参数,而不是使用errno