8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-26 10:03:03 +01:00
firebird-mirror/src/jrd/ibsetjmp.h
dimitr 6203ec728f 1) Enabled proper error reporting for unexpected crashes in Classic.
2) Attempted to make the async error handling independent from the engine.
Alex, please verify the UNIX part of my changes.
2008-04-10 09:25:48 +00:00

66 lines
1.8 KiB
C

/*
* PROGRAM: JRD access method
* MODULE: ibsetjmp.h
* DESCRIPTION: Defines for setjmp/longjmp
*
* The contents of this file are subject to the Interbase Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy
* of the License at http://www.Inprise.com/IPL.html
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
* or implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code was created by Inprise Corporation
* and its predecessors. Portions created by Inprise Corporation are
* Copyright (C) Inprise Corporation.
*
* All Rights Reserved.
* Contributor(s): ______________________________________.
*/
#ifndef JRD_IBSETJMP_H
#define JRD_IBSETJMP_H
#ifdef UNIX
#ifdef HAVE_SETJMP_H
#include <setjmp.h>
#endif
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
#define START_CHECK_FOR_EXCEPTIONS(err) { \
sigjmp_buf sigenv; \
int sig; \
if (!Config::getBugcheckAbort()) { \
if (sig = sigsetjmp(sigenv, 1)) \
ISC_exception_post(sig, err); \
ISC_sync_signals_set(&sigenv); \
}
#define END_CHECK_FOR_EXCEPTIONS(err) if (!Config::getBugcheckAbort()) ISC_sync_signals_reset(); }
#endif // UNIX
#if defined(WIN_NT) && !defined(MINGW)
#include <excpt.h>
#define START_CHECK_FOR_EXCEPTIONS(err) __try {
#define END_CHECK_FOR_EXCEPTIONS(err) } __except ( ISC_exception_post(GetExceptionCode(), err)) { }
#endif // WIN_NT
/* generic macros */
#ifndef START_CHECK_FOR_EXCEPTIONS
#define START_CHECK_FOR_EXCEPTIONS(err)
#endif
#ifndef END_CHECK_FOR_EXCEPTIONS
#define END_CHECK_FOR_EXCEPTIONS(err)
#endif
#endif /* JRD_IBSETJMP_H */