From: Ken Foskey <foskey@optushome.com.au>
To: linux-kernel@vger.kernel.org
Subject: K 2.6 test6 strange signal behaviour
Date: Mon, 20 Oct 2003 23:01:26 +1000 [thread overview]
Message-ID: <1066654886.5930.57.camel@gandalf.foskey.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 870 bytes --]
I have a problem with signals.
I get multiple signals from a single execution of the program. I have
attached a stripped source. Here is the critical snippet, you can see
the signal handler being set before each call:
signal( SIGSEGV, SignalHdl );
signal( SIGBUS, SignalHdl );
fprintf( stderr, "Running \n" );
result = func( eT, p );
fprintf( stderr, "Finished \n" );
signal( SIGSEGV, SIG_DFL );
signal( SIGBUS, SIG_DFL );
When I run the code, that does 2 derefs of NULL you will see 2 instances
of "Running" and the handler is not invoked at all for the second time.
./solar:
Getting from NULL
Setting Jump
Running
Signal 11 caught
After jump
Setting to NULL
Setting Jump
Running
Segmentation fault
I am running debian version of K 2.6 test6. This has occurred on all
versions of K2.6 though, not specific.
--
Thanks
KenF
OpenOffice.org developer
[-- Attachment #2: solar.c --]
[-- Type: text/x-c, Size: 2448 bytes --]
#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
/*************************************************************************
|* Typdeclarations for memory access test functions
*************************************************************************/
typedef int (*TestFunc)( void* );
/*************************************************************************
*************************************************************************/
static jmp_buf check_env;
static int bSignal;
static void SignalHdl( int sig )
{
bSignal = 1;
fprintf( stderr, "Signal %d caught\n", sig );
longjmp( check_env, sig );
}
/*************************************************************************
*************************************************************************/
void check( TestFunc func, void* p )
{
int result;
fprintf( stderr, "Setting Jump\n" );
if ( !setjmp( check_env ) )
{
signal( SIGSEGV, SignalHdl );
signal( SIGBUS, SignalHdl );
fprintf( stderr, "Running \n" );
result = func( p );
fprintf( stderr, "Finished \n" );
signal( SIGSEGV, SIG_DFL );
signal( SIGBUS, SIG_DFL );
}
fprintf( stderr, "After jump \n" );
}
/*************************************************************************
*************************************************************************/
static int GetAtAddress( void* p )
{
return *((char*)p);
}
/*************************************************************************
*************************************************************************/
static int SetAtAddress( void* p )
{
return *((char*)p) = 0;
}
/*************************************************************************
*************************************************************************/
void CheckGetAccess( void* p )
{
check( (TestFunc)GetAtAddress, p );
}
/*************************************************************************
*************************************************************************/
void CheckSetAccess( void* p )
{
check( (TestFunc)SetAtAddress, p );
}
/*************************************************************************
*************************************************************************/
int main( int argc, char* argv[] )
{
{
char* p = NULL;
fprintf( stderr, "Getting from NULL\n" );
CheckGetAccess( p );
fprintf( stderr, "Setting to NULL\n" );
CheckSetAccess( p );
fprintf( stderr, "After Setting to NULL\n" );
}
exit( 0 );
}
next reply other threads:[~2003-10-20 13:06 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-20 13:01 Ken Foskey [this message]
2003-10-20 13:48 ` Richard B. Johnson
2003-10-20 19:26 ` Ken Foskey
2003-10-20 20:38 ` Richard B. Johnson
2003-10-20 20:28 ` Andrew Morton
2003-10-21 1:56 ` Ken Foskey
2003-11-05 8:11 ` Alex Riesen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1066654886.5930.57.camel@gandalf.foskey.org \
--to=foskey@optushome.com.au \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®