From 80fd81452d0331467a0e5910e57294622cfb2f5e Mon Sep 17 00:00:00 2001 From: "cjhopman@chromium.org" Date: Wed, 15 Apr 2015 23:12:21 +0000 Subject: [PATCH] Merge 1447 "Fix call to rt_sigaction" > Fix call to rt_sigaction > > Despite the fact that many places imply that sigaction and rt_sigaction > are essentially the same, rt_sigaction's signature is actually > different-- it takes the size of the kernel's sigset_t as an extra argument. > > BUG=473973 > TBR=cjhopman@chromium.org Review URL: https://breakpad.appspot.com/5784002 git-svn-id: http://google-breakpad.googlecode.com/svn/branches/chrome_42@1448 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/client/linux/handler/exception_handler.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc index 3ddbe662..6a8849df 100644 --- a/src/client/linux/handler/exception_handler.cc +++ b/src/client/linux/handler/exception_handler.cc @@ -195,12 +195,12 @@ void InstallDefaultHandler(int sig) { // to SIG_DFL is ignored. In that case, an infinite loop is entered as the // signal is repeatedly sent to breakpad's signal handler. // To work around this, directly call the system's sigaction. - struct sigaction sa; + struct kernel_sigaction sa; memset(&sa, 0, sizeof(sa)); - sigemptyset(&sa.sa_mask); - sa.sa_handler = SIG_DFL; + sys_sigemptyset(&sa.sa_mask); + sa.sa_handler_ = SIG_DFL; sa.sa_flags = SA_RESTART; - syscall(__NR_rt_sigaction, sig, &sa, NULL); + sys_rt_sigaction(sig, &sa, NULL, sizeof(kernel_sigset_t)); #else signal(sig, SIG_DFL); #endif