24 #include <drizzled/signal_handler.h>
25 #include <drizzled/drizzled.h>
26 #include <drizzled/session.h>
27 #include <drizzled/session/cache.h>
28 #include <drizzled/internal/my_sys.h>
29 #include <drizzled/probes.h>
30 #include <drizzled/plugin.h>
31 #include <drizzled/plugin/scheduler.h>
32 #include <drizzled/current_session.h>
33 #include <drizzled/util/backtrace.h>
34 #include <drizzled/statistics_variables.h>
35 #include <drizzled/system_variables.h>
37 using namespace drizzled;
39 static uint32_t killed_threads;
40 static bool segfaulted=
false;
51 void drizzled_print_signal_warning(
int sig)
53 if (global_system_variables.log_warnings)
54 errmsg_printf(error::WARN, _(
"Got signal %d from thread %"PRIu32),
55 sig, global_thread_id);
56 #ifndef HAVE_BSD_SIGNALS
61 sa.sa_handler= drizzled_print_signal_warning;
64 sigaction(sig, &sa, NULL);
71 void drizzled_end_thread_signal(
int )
73 Session *session= current_session;
76 Session::shared_ptr session_ptr(session::Cache::find(session->
getSessionId()));
83 session_ptr->scheduler->killSessionNow(session_ptr);
84 DRIZZLE_CONNECTION_DONE(session_ptr->getSessionId());
88 static void write_core(
int sig)
97 extern void __gcov_flush(
void);
100 pthread_kill(pthread_self(), sig);
101 #if defined(P_MYID) && !defined(SCO)
103 sigsend(P_PID,P_MYID,sig);
107 void drizzled_handle_segfault(
int sig)
120 fprintf(stderr, _(
"Fatal signal %d while backtracing\n"), sig);
126 curr_time= time(NULL);
127 if(curr_time == (time_t)-1)
129 fprintf(stderr, _(
"Fatal: time() call failed\n"));
133 localtime_r(&curr_time, &tm);
135 fprintf(stderr,_(
"%02d%02d%02d %2d:%02d:%02d - drizzled got signal %d;\n"
136 "This could be because you hit a bug. It is also possible that "
137 "this binary\n or one of the libraries it was linked against is "
138 "corrupt, improperly built,\n or misconfigured. This error can "
139 "also be caused by malfunctioning hardware.\n"),
140 tm.tm_year % 100, tm.tm_mon+1, tm.tm_mday,
141 tm.tm_hour, tm.tm_min, tm.tm_sec,
143 fprintf(stderr, _(
"We will try our best to scrape up some info that "
144 "will hopefully help diagnose\n"
145 "the problem, but since we have already crashed, "
146 "something is definitely wrong\nand this may fail.\n\n"));
147 fprintf(stderr,
"read_buffer_size=%ld\n", (
long) global_system_variables.read_buff_size);
148 fprintf(stderr,
"max_used_connections=%"PRIu64
"\n", current_global_counters.max_used_connections);
149 fprintf(stderr,
"connection_count=%u\n", uint32_t(connection_count));
150 fprintf(stderr, _(
"It is possible that drizzled could use up to \n"
151 "(read_buffer_size + sort_buffer_size)*thread_count\n"
153 "Hope that's ok; if not, decrease some variables in the "