Files
compute-runtime/offline_compiler/utilities/windows/safety_guard_windows.h
Mateusz Jablonski 9dbeeea18f Clang-format: restore sorting includes
Change-Id: I34eb993b562c77f56d8fbd51a02ee266c1f76678
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
2020-02-24 10:22:30 +01:00

42 lines
985 B
C++

/*
* Copyright (C) 2018-2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/abort.h"
#include "offline_compiler/utilities/windows/seh_exception.h"
#include <setjmp.h>
static jmp_buf jmpbuf;
class SafetyGuardWindows {
public:
template <typename T, typename Object, typename Method>
T call(Object *object, Method method, T retValueOnCrash) {
int jump = 0;
jump = setjmp(jmpbuf);
if (jump == 0) {
__try {
return (object->*method)();
} __except (SehException::filter(GetExceptionCode(), GetExceptionInformation())) {
if (onExcept) {
onExcept();
} else {
NEO::abortExecution();
}
longjmp(jmpbuf, 1);
}
}
return retValueOnCrash;
}
typedef void (*callbackFunction)();
callbackFunction onExcept = nullptr;
};