12-22-2011
Locking the list is not an option.
If the list is locked and another signal comes in while the list is locked, the 2nd signal handler will go into a deadlock, because the 1st signal handler waits till the 2nd one finishes, hence the list is never freed.
So writing my caught signal info into a pipe works? How much data can a pipe hold? And how do I know how much I have to read from the pipe when n signal handlers wrote something into it?
/edit:
I just realized that write() doesn't work either, because it can be interrupted before writing something, in which case it throws an error.
Last edited by littlegnome; 12-22-2011 at 08:40 AM..
3 More Discussions You Might Find Interesting
1. Programming
Hi All,
Rather than re-invent the wheel, I am trying to find a mature C library that provides generic support for lists, trees, etc.
I understand C doesn't formally support "generics", but am aware of a few solutions like GLib and SGLib.
Can anyone kindly recommend what they think is best?... (1 Reply)
Discussion started by: tristan12
1 Replies
2. Programming
Hello,
I wonder if I can write my userdefined data structures(ex: a list) to a shared memory segment?
I know, the shm functions get (void*) parameter so I should be able to read and write a list into the shared memory.
may someone inform and clarify me about that, please? (1 Reply)
Discussion started by: xyzt
1 Replies
3. Shell Programming and Scripting
Here is what i need to do.
@data #has all column wise data so say info for col 1 location for all rows would be in this array
$array = \@data
But i need to create a file which should contain these information in a format for all columns even if i have got no values from some of the index... (0 Replies)
Discussion started by: dinjo_jo
0 Replies
LEARN ABOUT NETBSD
raise_default_signal
RAISE_DEFAULT_SIGNAL(3) BSD Library Functions Manual RAISE_DEFAULT_SIGNAL(3)
NAME
raise_default_signal -- raise the default signal handler
LIBRARY
System Utilities Library (libutil, -lutil)
SYNOPSIS
#include <util.h>
int
raise_default_signal(int sig);
DESCRIPTION
The raise_default_signal() function raises the default signal handler for the signal sig. This function may be used by a user-defined signal
handler router to ensure that a parent process receives the correct notification of a process termination by a signal. This can be used to
avoid a common programming mistake when terminating a process from a custom SIGINT or SIGQUIT signal handler.
The operations performed are:
1. Block all signals, using sigprocmask(2).
2. Set the signal handler for signal sig to the default signal handler (SIG_DFL).
3. raise(3) signal sig.
4. Unblock signal sig to deliver it.
5. Restore the original signal mask and handler, even if there was a failure.
See signal(7) for a table of signals and default actions.
The raise_default_signal() function should be async-signal-safe.
RETURN VALUES
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and the global variable errno is set to indicate
the error.
ERRORS
The raise_default_signal() function may fail and set errno for any of the errors specified for the functions sigemptyset(3), sigfillset(3),
sigaddset(3), sigprocmask(2), sigaction(2), or raise(3).
SEE ALSO
sigaction(2), sigprocmask(2), raise(3), signal(7)
HISTORY
The raise_default_signal() function first appeared in NetBSD 5.0.
BSD
September 25, 2007 BSD