Files
epics-base/modules/libcom/src/misc/cantProceed.h
Andrew Johnson 3c99391d93 Added SPDX License ID to all EPICS-original source files
In some cases the license-identification header was missing,
so I added that as well. Replaced the remaining headers that
specifically identified "Versions 3.13.7 and higher".

Makefiles and the build system were deliberately excluded.
2020-08-03 11:53:01 -05:00

79 lines
2.7 KiB
C

/*************************************************************************\
* Copyright (c) 2011 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* SPDX-License-Identifier: EPICS
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/**
* \file cantProceed.h
* \brief Routines for code that can't continue or return after an error.
*
* This is the EPICS equivalent of a Kernel Panic, except that the effect
* is to halt only the thread that detects the error.
*/
/* callocMustSucceed() and mallocMustSucceed() can be
* used in place of calloc() and malloc(). If size or count are zero, or the
* memory allocation fails, they output a message and call cantProceed().
*/
#ifndef INCcantProceedh
#define INCcantProceedh
#include <stdlib.h>
#include "compilerDependencies.h"
#include "libComAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
/** \brief Suspend this thread, the caller cannot continue or return.
*
* The effect of calling this is to print the error message followed by
* the name of the thread that is being suspended. A stack trace will
* also be shown if supported by the OS, and the thread is suspended
* inside an infinite loop.
* \param errorMessage A printf-style error message describing the error.
* \param ... Any parameters required for the error message.
*/
LIBCOM_API void cantProceed(const char *errorMessage, ...)
EPICS_PRINTF_STYLE(1,2);
/** \name Memory Allocation Functions
* These versions of calloc() and malloc() never fail, they suspend the
* thread if the OS is unable to allocate the requested memory at the current
* time. If the thread is resumed, they will re-try the memory allocation,
* and will only return after it succeeds. These routines should only be used
* while an IOC is starting up; code that runs after iocInit() should fail
* gracefully when memory runs out.
*/
/** @{ */
/** \brief A calloc() that never returns NULL.
* \param count Number of objects.
* \param size Size of each object.
* \param errorMessage What this memory is needed for.
* \return Pointer to zeroed allocated memory.
*/
LIBCOM_API void * callocMustSucceed(size_t count, size_t size,
const char *errorMessage);
/** \brief A malloc() that never returns NULL.
* \param size Size of block to allocate.
* \param errorMessage What this memory is needed for.
* \return Pointer to allocated memory.
*/
LIBCOM_API void * mallocMustSucceed(size_t size, const char *errorMessage);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* cantProceedh */