office-gobmx/include/opencl/OpenCLZone.hxx
Tor Lillqvist 32881f0183 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.

Change-Id: Ibb9bf3a86b7521bf16728de2a118ad4323be674b
Reviewed-on: https://gerrit.libreoffice.org/28086
Reviewed-by: Tor Lillqvist <tml@collabora.com>
Tested-by: Tor Lillqvist <tml@collabora.com>
2016-08-14 06:54:03 +00:00

53 lines
1.3 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef INCLUDED_OPENCL_INC_OPENCL_ZONE_HXX
#define INCLUDED_OPENCL_INC_OPENCL_ZONE_HXX
#include <opencl/opencldllapi.h>
// FIXME: post back-port, templatize me and share with OpenGLZone.
class OPENCL_DLLPUBLIC OpenCLZone
{
/// how many times have we entered a CL zone
static volatile sal_uInt64 gnEnterCount;
/// how many times have we left a new CL zone
static volatile sal_uInt64 gnLeaveCount;
static volatile bool gbInInitialTest;
public:
OpenCLZone()
{
gnEnterCount++;
}
~OpenCLZone()
{
gnLeaveCount++;
if (!isInZone())
gbInInitialTest = false;
}
static bool isInZone()
{
return gnEnterCount != gnLeaveCount;
}
static bool isInInitialTest()
{
return gbInInitialTest;
}
static void hardDisable();
static void enterInitialTest();
};
#endif // INCLUDED_OPENCL_INC_OPENCL_ZONE_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */