3
* Author: Mingqiang Zhuang
5
* Created on March 15, 2009
7
* (c) Copyright 2009, Schooner Information Technology, Inc.
8
* http://www.schoonerinfotech.com/
10
* Rewrite of stack dump:
11
* Copyright (C) 2009 Sun Microsystems
23
#include "ms_memslap.h"
24
#include "ms_setting.h"
27
int ms_setup_sigsegv(void);
28
int ms_setup_sigpipe(void);
29
int ms_setup_sigint(void);
32
/* signal seg reaches, this function will run */
33
static void ms_signal_segv(int signum, siginfo_t *info, void *ptr)
35
UNUSED_ARGUMENT(signum);
36
UNUSED_ARGUMENT(info);
39
pthread_mutex_lock(&ms_global.quit_mutex);
40
fprintf(stderr, "Segmentation fault occurred.\nStack trace:\n");
41
pandora_print_callstack(stderr);
42
fprintf(stderr, "End of stack trace\n");
43
pthread_mutex_unlock(&ms_global.quit_mutex);
47
/* signal int reaches, this function will run */
48
static void ms_signal_int(int signum, siginfo_t *info, void *ptr)
50
UNUSED_ARGUMENT(signum);
51
UNUSED_ARGUMENT(info);
54
pthread_mutex_lock(&ms_global.quit_mutex);
55
fprintf(stderr, "SIGINT handled.\n");
56
pthread_mutex_unlock(&ms_global.quit_mutex);
64
* @return if success, return EXIT_SUCCESS, else return -1
66
int ms_setup_sigsegv(void)
68
struct sigaction action;
70
memset(&action, 0, sizeof(action));
71
action.sa_sigaction= ms_signal_segv;
72
action.sa_flags= SA_SIGINFO;
73
if (sigaction(SIGSEGV, &action, NULL) < 0)
80
} /* ms_setup_sigsegv */
84
* redirect signal pipe
86
* @return if success, return EXIT_SUCCESS, else return -1
88
int ms_setup_sigpipe(void)
90
/* ignore the SIGPIPE signal */
91
signal(SIGPIPE, SIG_IGN);
94
} /* ms_setup_sigpipe */
100
* @return if success, return EXIT_SUCCESS, else return -1
102
int ms_setup_sigint(void)
104
struct sigaction action_3;
106
memset(&action_3, 0, sizeof(action_3));
107
action_3.sa_sigaction= ms_signal_int;
108
action_3.sa_flags= SA_SIGINFO;
109
if (sigaction(SIGINT, &action_3, NULL) < 0)
116
} /* ms_setup_sigint */
119
#ifndef SIGSEGV_NO_AUTO_INIT
120
static void __attribute((constructor)) ms_init(void)