diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2017-03-15 03:06:16 +0100 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2017-03-15 15:55:40 +0000 |
commit | 20339900683f0d29f5235ebd494e29bc62b053fd (patch) | |
tree | faff35c35b1893084aa8f8d1e54a50660d149e2d /sal/osl | |
parent | e681749ffa5a18c8a6ff874787d4ab8411a46125 (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')
-rw-r--r-- | sal/osl/unx/signal.cxx | 24 |
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: |