ybelkadi updated this revision to Diff 32529.
ybelkadi added a comment.
Yes, the test passes, but as PR19246 reported intermittent failures, I thought
I'd wait for the results of the tests run by the bots.
Here is an updated patch also enabling the test. Could you please commit it if
it's accepted?
http://reviews.llvm.org/D12138
Files:
source/Plugins/Process/Linux/NativeProcessLinux.cpp
test/expression_command/call-restarts/TestCallThatRestarts.py
Index: test/expression_command/call-restarts/TestCallThatRestarts.py
===================================================================
--- test/expression_command/call-restarts/TestCallThatRestarts.py
+++ test/expression_command/call-restarts/TestCallThatRestarts.py
@@ -29,7 +29,6 @@
@dwarf_test
@skipIfFreeBSD # llvm.org/pr19246: intermittent failure
- @expectedFailureLinux("llvm.org/pr19246")
@skipIfDarwin # llvm.org/pr19246: intermittent failure
@skipIfWindows # Test relies on signals, unsupported on Windows
def test_with_dwarf(self):
Index: source/Plugins/Process/Linux/NativeProcessLinux.cpp
===================================================================
--- source/Plugins/Process/Linux/NativeProcessLinux.cpp
+++ source/Plugins/Process/Linux/NativeProcessLinux.cpp
@@ -554,7 +554,8 @@
eDupStderrFailed,
eChdirFailed,
eExecFailed,
- eSetGidFailed
+ eSetGidFailed,
+ eSetSigMaskFailed
};
// Child process.
@@ -629,6 +630,12 @@
}
}
+ // Clear the signal mask to prevent the child from being affected by
+ // any masking done by the parent.
+ sigset_t set;
+ if (sigemptyset(&set) != 0 || pthread_sigmask(SIG_SETMASK, &set,
nullptr) != 0)
+ exit(eSetSigMaskFailed);
+
// Execute. We should never return...
execve(argv[0],
const_cast<char *const *>(argv),
@@ -686,6 +693,9 @@
case eSetGidFailed:
error.SetErrorString("Child setgid failed.");
break;
+ case eSetSigMaskFailed:
+ error.SetErrorString("Child failed to set signal mask.");
+ break;
default:
error.SetErrorString("Child returned unknown exit status.");
break;
Index: test/expression_command/call-restarts/TestCallThatRestarts.py
===================================================================
--- test/expression_command/call-restarts/TestCallThatRestarts.py
+++ test/expression_command/call-restarts/TestCallThatRestarts.py
@@ -29,7 +29,6 @@
@dwarf_test
@skipIfFreeBSD # llvm.org/pr19246: intermittent failure
- @expectedFailureLinux("llvm.org/pr19246")
@skipIfDarwin # llvm.org/pr19246: intermittent failure
@skipIfWindows # Test relies on signals, unsupported on Windows
def test_with_dwarf(self):
Index: source/Plugins/Process/Linux/NativeProcessLinux.cpp
===================================================================
--- source/Plugins/Process/Linux/NativeProcessLinux.cpp
+++ source/Plugins/Process/Linux/NativeProcessLinux.cpp
@@ -554,7 +554,8 @@
eDupStderrFailed,
eChdirFailed,
eExecFailed,
- eSetGidFailed
+ eSetGidFailed,
+ eSetSigMaskFailed
};
// Child process.
@@ -629,6 +630,12 @@
}
}
+ // Clear the signal mask to prevent the child from being affected by
+ // any masking done by the parent.
+ sigset_t set;
+ if (sigemptyset(&set) != 0 || pthread_sigmask(SIG_SETMASK, &set, nullptr) != 0)
+ exit(eSetSigMaskFailed);
+
// Execute. We should never return...
execve(argv[0],
const_cast<char *const *>(argv),
@@ -686,6 +693,9 @@
case eSetGidFailed:
error.SetErrorString("Child setgid failed.");
break;
+ case eSetSigMaskFailed:
+ error.SetErrorString("Child failed to set signal mask.");
+ break;
default:
error.SetErrorString("Child returned unknown exit status.");
break;
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits