~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/signal_handler.cc

  • Committer: Brian Aker
  • Date: 2010-08-18 16:12:58 UTC
  • mto: This revision was merged to the branch mainline in revision 1720.
  • Revision ID: brian@tangent.org-20100818161258-1vm71da888dfvwsx
Remove the code surrounding stack trace.

Show diffs side-by-side

added added

removed removed

Lines of Context:
76
76
  return;
77
77
}
78
78
 
 
79
static void write_core(int sig)
 
80
{
 
81
  signal(sig, SIG_DFL);
 
82
#ifdef HAVE_gcov
 
83
  /*
 
84
    For GCOV build, crashing will prevent the writing of code coverage
 
85
    information from this process, causing gcov output to be incomplete.
 
86
    So we force the writing of coverage information here before terminating.
 
87
  */
 
88
  extern void __gcov_flush(void);
 
89
  __gcov_flush();
 
90
#endif
 
91
  pthread_kill(pthread_self(), sig);
 
92
#if defined(P_MYID) && !defined(SCO)
 
93
  /* On Solaris, the above kill is not enough */
 
94
  sigsend(P_PID,P_MYID,sig);
 
95
#endif
 
96
}
 
97
 
79
98
void drizzled_handle_segfault(int sig)
80
99
{
81
100
  time_t curr_time;
125
144
                    "bytes of memory\n"
126
145
                    "Hope that's ok; if not, decrease some variables in the "
127
146
                    "equation.\n\n"));
128
 
 
129
 
#ifdef HAVE_STACKTRACE
130
 
  Session *session= current_session;
131
 
 
132
 
  if (! (test_flags.test(TEST_NO_STACKTRACE)))
133
 
  {
134
 
    fprintf(stderr,"session: 0x%lx\n",(long) session);
135
 
    fprintf(stderr,_("Attempting backtrace. You can use the following "
136
 
                     "information to find out\n"
137
 
                     "where drizzled died. If you see no messages after this, "
138
 
                     "something went\n"
139
 
                     "terribly wrong...\n"));
140
 
    print_stacktrace(session ? (unsigned char*) session->thread_stack : (unsigned char*) 0,
141
 
                     my_thread_stack_size);
142
 
  }
143
 
  if (session)
144
 
  {
145
 
    const char *kreason= "UNKNOWN";
146
 
    switch (session->killed) {
147
 
    case Session::NOT_KILLED:
148
 
      kreason= "NOT_KILLED";
149
 
      break;
150
 
    case Session::KILL_BAD_DATA:
151
 
      kreason= "KILL_BAD_DATA";
152
 
      break;
153
 
    case Session::KILL_CONNECTION:
154
 
      kreason= "KILL_CONNECTION";
155
 
      break;
156
 
    case Session::KILL_QUERY:
157
 
      kreason= "KILL_QUERY";
158
 
      break;
159
 
    case Session::KILLED_NO_VALUE:
160
 
      kreason= "KILLED_NO_VALUE";
161
 
      break;
162
 
    }
163
 
    fprintf(stderr, _("Trying to get some variables.\n"
164
 
                      "Some pointers may be invalid and cause the "
165
 
                      "dump to abort...\n"));
166
 
    safe_print_str("session->query", session->query, 1024);
167
 
    fprintf(stderr, "session->thread_id=%"PRIu32"\n", (uint32_t) session->thread_id);
168
 
    fprintf(stderr, "session->killed=%s\n", kreason);
169
 
  }
170
 
  fflush(stderr);
171
 
#endif /* HAVE_STACKTRACE */
172
 
 
173
 
  if (calling_initgroups)
174
 
    fprintf(stderr, _("\nThis crash occurred while the server was calling "
175
 
                      "initgroups(). This is\n"
176
 
                      "often due to the use of a drizzled that is statically "
177
 
                      "linked against glibc\n"
178
 
                      "and configured to use LDAP in /etc/nsswitch.conf. "
179
 
                      "You will need to either\n"
180
 
                      "upgrade to a version of glibc that does not have this "
181
 
                      "problem (2.3.4 or\n"
182
 
                      "later when used with nscd), disable LDAP in your "
183
 
                      "nsswitch.conf, or use a\n"
184
 
                      "drizzled that is not statically linked.\n"));
185
 
 
186
 
  if (internal::thd_lib_detected == THD_LIB_LT && !getenv("LD_ASSUME_KERNEL"))
187
 
    fprintf(stderr,
188
 
            _("\nYou are running a statically-linked LinuxThreads binary "
189
 
              "on an NPTL system.\n"
190
 
              "This can result in crashes on some distributions due "
191
 
              "to LT/NPTL conflicts.\n"
192
 
              "You should either build a dynamically-linked binary, or force "
193
 
              "LinuxThreads\n"
194
 
              "to be used with the LD_ASSUME_KERNEL environment variable. "
195
 
              "Please consult\n"
196
 
              "the documentation for your distribution on how to do that.\n"));
197
 
 
198
 
#ifdef HAVE_WRITE_CORE
199
 
  if (test_flags.test(TEST_CORE_ON_SIGNAL))
200
 
  {
201
 
    fprintf(stderr, _("Writing a core file\n"));
202
 
    fflush(stderr);
203
 
    write_core(sig);
204
 
  }
205
 
#endif
 
147
  write_core(sig);
206
148
 
207
149
  exit(1);
208
150
}