2010-01-31 72 views
3

sigprocmask()在多線程應用程序中使用時是否存在segfault的衆所周知的原因?sigprocmask()導致段錯誤

我有一個應用程序使用clone()創建多個線程。我已經確定,由於某種原因,當我使用sigprocmask它segfaults(儘管並非所有的時間)。在backtrace()中,當我在siglongjmp()之後使用sigprocmask()時,它看起來像是發生了segfault。

任何想法?

回答

1

檢查第二個和第三個參數。如果它們不是NULL,請確保它們都是指向sigset_t的有效指針。

請注意sigprocmask()只是爲單線程進程正式定義的。多線程進程應該使用pthread_sigmask()代替,雖然它返回錯誤代碼,但它使用相同的參數,而不是使用errno