Commit 0611bf22 authored by Tor Didriksen's avatar Tor Didriksen

Bug #58426 Crashing tests not failing as they are supposed to on Solaris 10 debug

  
On this platform we seem to get lots of other signals
while waiting for SIGKILL to be delivered.

Solution: use sigsuspend(<all signals blocked>)



dbug/dbug.c:
  New function _db_suicide_() which does kill(myself, -9) and then waits forever.
include/my_dbug.h:
  Let DBUG_SUICE wait forever until the KILL signal is delivered, and process dies.
parent 6330815a
...@@ -2276,6 +2276,25 @@ void _db_flush_() ...@@ -2276,6 +2276,25 @@ void _db_flush_()
} }
#ifndef __WIN__
void _db_suicide_()
{
int retval;
sigset_t new_mask;
sigfillset(&new_mask);
fprintf(stderr, "SIGKILL myself\n");
fflush(stderr);
retval= kill(getpid(), SIGKILL);
assert(retval == 0);
retval= sigsuspend(&new_mask);
fprintf(stderr, "sigsuspend returned %d errno %d \n", retval, errno);
assert(FALSE); /* With full signal mask, we should never return here. */
}
#endif /* ! __WIN__ */
void _db_lock_file_() void _db_lock_file_()
{ {
CODE_STATE *cs=0; CODE_STATE *cs=0;
......
...@@ -160,7 +160,8 @@ extern void _db_flush_(); ...@@ -160,7 +160,8 @@ extern void _db_flush_();
#ifdef __WIN__ #ifdef __WIN__
#define DBUG_SUICIDE() DBUG_ABORT() #define DBUG_SUICIDE() DBUG_ABORT()
#else #else
#define DBUG_SUICIDE() (_db_flush_(), kill(getpid(), SIGKILL), pause()) extern void _db_suicide_();
#define DBUG_SUICIDE() (_db_flush_(), _db_suicide_())
#endif #endif
#else /* No debugger */ #else /* No debugger */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment