summaryrefslogtreecommitdiff
path: root/sal/osl/unx/signal.cxx
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2017-03-15 03:06:16 +0100
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2017-03-15 15:55:40 +0000
commit20339900683f0d29f5235ebd494e29bc62b053fd (patch)
treefaff35c35b1893084aa8f8d1e54a50660d149e2d /sal/osl/unx/signal.cxx
parente681749ffa5a18c8a6ff874787d4ab8411a46125 (diff)
workaround for breakpad signal handler on linux
The breakpad signal handler is overwritten by our own signal handler during startup. As a workaround we use the same approach as in the windows code and add call the old signal handler if a crash was registered. Change-Id: I1179fd9cba851734aa1686168f231cf68de57c1a Reviewed-on: https://gerrit.libreoffice.org/35226 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'sal/osl/unx/signal.cxx')
-rw-r--r--sal/osl/unx/signal.cxx24
1 files changed, 24 insertions, 0 deletions
diff --git a/sal/osl/unx/signal.cxx b/sal/osl/unx/signal.cxx
index 2cf6d7edda43..55c7765b5d8a 100644
--- a/sal/osl/unx/signal.cxx
+++ b/sal/osl/unx/signal.cxx
@@ -445,6 +445,30 @@ void signalHandlerFunction(int signal, siginfo_t * info, void * context)
break;
}
+#if HAVE_FEATURE_BREAKPAD
+ if (Info.Signal == osl_Signal_AccessViolation ||
+ Info.Signal == osl_Signal_IntegerDivideByZero ||
+ Info.Signal == osl_Signal_FloatDivideByZero)
+ {
+ for (SignalAction & rSignal : Signals)
+ {
+ if (rSignal.Signal == signal)
+ {
+ if (rSignal.siginfo)
+ {
+ (*reinterpret_cast<Handler2>(rSignal.Handler))(
+ signal, info, context);
+ }
+ else
+ {
+ rSignal.Handler(signal);
+ }
+ break;
+ }
+ }
+ }
+#endif
+
switch (callSignalHandler(&Info))
{
case osl_Signal_ActCallNextHdl: