diff options
author | Tor Lillqvist <tml@collabora.com> | 2016-08-12 15:56:52 +0300 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-08-18 12:38:18 +0000 |
commit | 0db37afc551e7e7be04dfb3a7efe7a1e5e327f2f (patch) | |
tree | 678340363179886fd9565d6669581d90f5fde8d6 /vcl | |
parent | fa729e8cf6e3b3e00f0a031d4fc7d7183f4e073d (diff) |
tdf#100965: Restart on initialisation-time OpenCL crash
Add a flag to the OpenCLZone indicating whether we are performing the
first-start OpenCL functionality verification, so that if we run into
a crash that is caught by the VCL VCLExceptionSignal_impl() handler,
we terminate the process with the EXITHELPER_NORMAL_RESTART
status after first having disabled OpenCL use. The wrapper process will
then restart soffice.bin. This is for Windows only so far.
This matches what we do if OpenGL fails early during start of
LibreOffice.
Also, the enter() and leave() functions are not used anywhere
(cherry picked from commit 32881f01833dbcefd5600e1135dd8743178bfd96)
(cherry picked from commit b9898f03eb05411c508b1b02588812074d40417a)
Change-Id: Ibb9bf3a86b7521bf16728de2a118ad4323be674b
Reviewed-on: https://gerrit.libreoffice.org/28139
Reviewed-by: Eike Rathke <erack@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/app/svmain.cxx | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx index 54aecfdcddae..81bfb759a337 100644 --- a/vcl/source/app/svmain.cxx +++ b/vcl/source/app/svmain.cxx @@ -24,6 +24,8 @@ #include <osl/file.hxx> #include <osl/signal.h> +#include <desktop/exithelper.h> + #include <tools/debug.hxx> #include <tools/resmgr.hxx> @@ -123,7 +125,13 @@ oslSignalAction SAL_CALL VCLExceptionSignal_impl( void* /*pData*/, oslSignalInfo #endif #if HAVE_FEATURE_OPENCL if (OpenCLZone::isInZone()) + { OpenCLZone::hardDisable(); +#ifdef _WIN32 + if (OpenCLZone::isInInitialTest()) + TerminateProcess(GetCurrentProcess(), EXITHELPER_NORMAL_RESTART); +#endif + } #endif } |