Re: Problem delivering signals while blocked in recvfrom

2004-05-24 Thread GOTO Masanori
At Mon, 17 May 2004 16:54:45 +1200,
David Preece wrote:
 As per the subject, I have a single threaded process blocked collecting 
 UDP packets in recvfrom and I'm attempting to send it SIGHUP. No matter 
 what I do I get a segfault within the libc6. I've tried both the GNU 
 and BSD styles of signal handling, and within those have set flags for 
 both fail the recvfrom and resume it, to no avail.
 
 There's not a lot of complication involved in the crash:
 
 GNU gdb 6.1-debian
 Copyright 2004 Free Software Foundation, Inc.
 GDB is free software, covered by the GNU General Public License, and 
 you are
 welcome to change it and/or distribute copies of it under certain 
 conditions.
 Type show copying to see the conditions.
 There is absolutely no warranty for GDB.  Type show warranty for 
 details.
 This GDB was configured as i386-linux...Using host libthread_db 
 library /lib/libthread_db.so.1.
 
 (gdb) run
 Starting program: /home/davep/pscope/tcom/flowlogd/flowlogd/flowlogd
 
 Program received signal SIGHUP, Hangup.
 0x4039c276 in recvfrom () from /lib/libc.so.6

I don't have any problem with this sample program with both
linuxthreads and nptl...

Regards,
-- gotom


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Problem delivering signals while blocked in recvfrom

2004-05-24 Thread GOTO Masanori
At Mon, 17 May 2004 16:54:45 +1200,
David Preece wrote:
 As per the subject, I have a single threaded process blocked collecting 
 UDP packets in recvfrom and I'm attempting to send it SIGHUP. No matter 
 what I do I get a segfault within the libc6. I've tried both the GNU 
 and BSD styles of signal handling, and within those have set flags for 
 both fail the recvfrom and resume it, to no avail.
 
 There's not a lot of complication involved in the crash:
 
 GNU gdb 6.1-debian
 Copyright 2004 Free Software Foundation, Inc.
 GDB is free software, covered by the GNU General Public License, and 
 you are
 welcome to change it and/or distribute copies of it under certain 
 conditions.
 Type show copying to see the conditions.
 There is absolutely no warranty for GDB.  Type show warranty for 
 details.
 This GDB was configured as i386-linux...Using host libthread_db 
 library /lib/libthread_db.so.1.
 
 (gdb) run
 Starting program: /home/davep/pscope/tcom/flowlogd/flowlogd/flowlogd
 
 Program received signal SIGHUP, Hangup.
 0x4039c276 in recvfrom () from /lib/libc.so.6

I don't have any problem with this sample program with both
linuxthreads and nptl...

Regards,
-- gotom




Problem delivering signals while blocked in recvfrom

2004-05-17 Thread David Preece
Hi,
As per the subject, I have a single threaded process blocked collecting 
UDP packets in recvfrom and I'm attempting to send it SIGHUP. No matter 
what I do I get a segfault within the libc6. I've tried both the GNU 
and BSD styles of signal handling, and within those have set flags for 
both fail the recvfrom and resume it, to no avail.

There's not a lot of complication involved in the crash:

GNU gdb 6.1-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and 
you are
welcome to change it and/or distribute copies of it under certain 
conditions.
Type show copying to see the conditions.
There is absolutely no warranty for GDB.  Type show warranty for 
details.
This GDB was configured as i386-linux...Using host libthread_db 
library /lib/libthread_db.so.1.

(gdb) run
Starting program: /home/davep/pscope/tcom/flowlogd/flowlogd/flowlogd
Program received signal SIGHUP, Hangup.
0x4039c276 in recvfrom () from /lib/libc.so.6

There's a simple test case too. Compile and run this (c++), then send 
it a SIGHUP. I know I've not put a handler in at all yet, it doesn't 
need it in order to demonstrate the crash.


#include stdio.h
#include sys/types.h
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include string.h //for bzero
#include signal.h
int main (int argc, char * const argv[])
{
//create and bind
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
sockaddr_in servaddr;
bzero(servaddr,sizeof(sockaddr_in));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(1234);
bind(sockfd,(sockaddr*)servaddr,sizeof(sockaddr_in));
//get a packet
char packet[8192];
sockaddr_in cliaddr;
socklen_t fromlen=sizeof(sockaddr_in);
recvfrom(sockfd,packet,8191,0,(sockaddr*)cliaddr,fromlen);
printf(Would be nice if recvfrom returned, eh?\n);
};

Am I missing something here? Any ideas what I can do?
Regards,
David Preece



Problem delivering signals while blocked in recvfrom

2004-05-16 Thread David Preece
Hi,
As per the subject, I have a single threaded process blocked collecting 
UDP packets in recvfrom and I'm attempting to send it SIGHUP. No matter 
what I do I get a segfault within the libc6. I've tried both the GNU 
and BSD styles of signal handling, and within those have set flags for 
both fail the recvfrom and resume it, to no avail.

There's not a lot of complication involved in the crash:

GNU gdb 6.1-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and 
you are
welcome to change it and/or distribute copies of it under certain 
conditions.
Type show copying to see the conditions.
There is absolutely no warranty for GDB.  Type show warranty for 
details.
This GDB was configured as i386-linux...Using host libthread_db 
library /lib/libthread_db.so.1.

(gdb) run
Starting program: /home/davep/pscope/tcom/flowlogd/flowlogd/flowlogd
Program received signal SIGHUP, Hangup.
0x4039c276 in recvfrom () from /lib/libc.so.6

There's a simple test case too. Compile and run this (c++), then send 
it a SIGHUP. I know I've not put a handler in at all yet, it doesn't 
need it in order to demonstrate the crash.


#include stdio.h
#include sys/types.h
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include string.h //for bzero
#include signal.h
int main (int argc, char * const argv[])
{
//create and bind
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
sockaddr_in servaddr;
bzero(servaddr,sizeof(sockaddr_in));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(1234);
bind(sockfd,(sockaddr*)servaddr,sizeof(sockaddr_in));
//get a packet
char packet[8192];
sockaddr_in cliaddr;
socklen_t fromlen=sizeof(sockaddr_in);
recvfrom(sockfd,packet,8191,0,(sockaddr*)cliaddr,fromlen);
printf(Would be nice if recvfrom returned, eh?\n);
};

Am I missing something here? Any ideas what I can do?
Regards,
David Preece
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]