1/* redisassert.c -- Implement the default _serverAssert and _serverPanic which
2 * simply print stack trace to standard error stream.
3 *
4 * This file is shared by those modules that try to print some logs about stack trace
5 * but don't have their own implementations of functions in redisassert.h.
6 *
7 * ----------------------------------------------------------------------------
8 *
9 * Copyright (c) 2021, Andy Pan <[email protected]> and Redis Labs
10 * All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions are met:
14 *
15 * * Redistributions of source code must retain the above copyright notice,
16 * this list of conditions and the following disclaimer.
17 * * Redistributions in binary form must reproduce the above copyright
18 * notice, this list of conditions and the following disclaimer in the
19 * documentation and/or other materials provided with the distribution.
20 * * Neither the name of Redis nor the names of its contributors may be used
21 * to endorse or promote products derived from this software without
22 * specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37
38#include <stdio.h>
39#include <stdlib.h>
40#include <signal.h>
41
42void _serverAssert(const char *estr, const char *file, int line) {
43 fprintf(stderr, "=== ASSERTION FAILED ===");
44 fprintf(stderr, "==> %s:%d '%s' is not true",file,line,estr);
45 raise(SIGSEGV);
46}
47
48void _serverPanic(const char *file, int line, const char *msg, ...) {
49 fprintf(stderr, "------------------------------------------------");
50 fprintf(stderr, "!!! Software Failure. Press left mouse button to continue");
51 fprintf(stderr, "Guru Meditation: %s #%s:%d",msg,file,line);
52 abort();
53}
54