39 #include <sys/resource.h> 62 LONG WINAPI CreateMiniDump (
struct _EXCEPTION_POINTERS *pException,
char *
db_name);
65 static void crash_handler (
int signo, siginfo_t * siginfo,
void *dummyp);
67 static void abort_handler (
int signo, siginfo_t * siginfo,
void *dummyp);
89 sigemptyset (&sigset);
90 sigaddset (&sigset, signo);
91 return sigprocmask (SIG_UNBLOCK, &sigset,
NULL);
105 struct sigaction act;
107 act.sa_handler =
NULL;
109 sigemptyset (&act.sa_mask);
111 act.sa_flags |= SA_SIGINFO;
112 sigaction (signo, &act,
NULL);
115 #if !defined (NDEBUG) 119 struct sigaction act;
121 act.sa_handler =
NULL;
123 sigemptyset (&act.sa_mask);
125 act.sa_flags |= SA_SIGINFO;
126 sigaction (signo, &act,
NULL);
134 CreateMiniDump (
struct _EXCEPTION_POINTERS *pException,
char *
db_name)
137 PROCESS_INFORMATION pi;
139 char cmd_line[PATH_MAX];
140 TCHAR DumpFile[MAX_PATH] = { 0, };
141 TCHAR DumpPath[MAX_PATH] = { 0, };
142 SYSTEMTIME SystemTime;
145 GetLocalTime (&SystemTime);
147 sprintf (DumpFile,
"%d-%d-%d %d_%d_%d.dmp", SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay, SystemTime.wHour,
148 SystemTime.wMinute, SystemTime.wSecond);
151 FileHandle = CreateFile (DumpPath, GENERIC_WRITE, FILE_SHARE_WRITE,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
NULL);
153 if (FileHandle != INVALID_HANDLE_VALUE)
155 MINIDUMP_EXCEPTION_INFORMATION MiniDumpExceptionInfo;
158 MiniDumpExceptionInfo.ThreadId = GetCurrentThreadId ();
159 MiniDumpExceptionInfo.ExceptionPointers = pException;
160 MiniDumpExceptionInfo.ClientPointers =
FALSE;
163 MiniDumpWriteDump (GetCurrentProcess (), GetCurrentProcessId (), FileHandle, MiniDumpNormal,
164 (pException) ? &MiniDumpExceptionInfo :
NULL, NULL, NULL);
167 CloseHandle (FileHandle);
170 GetStartupInfo (&si);
172 snprintf (cmd_line, PATH_MAX,
"\"%s\" \"%s\"",
executable_path, db_name);
190 return EXCEPTION_EXECUTE_HANDLER;
211 if (signo != SIGABRT && siginfo !=
NULL && siginfo->si_code <= 0)
230 char err_log[PATH_MAX];
236 for (fd = 3; fd < fd_max; fd++)
244 if (kill (ppid, 0) < 0)
264 #if !defined (NDEBUG) 268 int *local_clients_pid =
NULL;
269 int i, num_clients, client_pid;
283 for (i = 0; i < num_clients; i++)
285 client_pid = local_clients_pid[
i];
294 kill (client_pid, SIGABRT);
297 if (local_clients_pid !=
NULL)
299 free (local_clients_pid);
325 #if !defined (NDEBUG) 344 fprintf (stdout,
"\nThis may take a long time depending on the amount " "of recovery works to do.\n");
352 #if !defined(WINDOWS) 364 __except (CreateMiniDump (GetExceptionInformation (), argv[1]))
static void register_abort_signal_handler(int signo)
int main(int argc, char **argv)
#define BO_IS_SERVER_RESTARTED()
#define PRINT_AND_LOG_ERR_MSG(...)
int net_server_start(const char *name)
void hb_set_exec_path(char *exec_path)
int css_get_max_socket_fds(void)
static void register_fatal_signal_handler(int signo)
void hb_set_argv(char **argv)
static const char * database_name
static char executable_path[PATH_MAX]
char * envvar_bindir_file(char *path, size_t size, const char *filename)
static void crash_handler(int signo, siginfo_t *siginfo, void *dummyp)
int logtb_collect_local_clients(int **local_client_pids)
static int unmask_signal(int signo)
char * prm_get_string_value(PARAM_ID prm_id)
bool prm_get_bool_value(PARAM_ID prm_id)
char * basename(const char *path)
static void abort_handler(int signo, siginfo_t *siginfo, void *dummyp)
SIGNAL_HANDLER_FUNCTION os_set_signal_handler(const int sig_no, SIGNAL_HANDLER_FUNCTION sig_handler)