Handling two signal handler

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

I have a application which multiple modules. Each module do some task.
I have a signal handler defined in the main.pl which is the starting
point to run the application.
I want to define signal handler in each module which will do specific
task and again raised a signal which will be handled by the global
signal handler.
The signal to be caught are same throughout, not specific to any class
or the global handler.
Scenario :
application.pl   define a a signal handler &globalhandler
      application.pl creates a object out of foo.pm and foo.pm defines
a handle &foo_cleaner
       when the execution is under the context of foo.pm object , a
INT signal caught. It will clean    up the required things populated
by foo.pm and then raised the same signal from foo_cleaner. After
raising the &globalhandler should be called means the global handler
will be caught.
I tried but didnt succeded.

Do you have guys any idea whether there is some way out???
Can i get two handlers with the same signal???

Re: Handling two signal handler

Quoted text here. Click to load it

What do you mean with "the context of foo.pm object"?

Quoted text here. Click to load it

You can have only a single signal handler for each signal. So
if the signal has been dealt with by foo_cleaner() then it's
used up. Raising it again would only lead to foo_cleaner() being
called again as long as it's still installed as the handler for
that signal.

What you can do is to simply call global_handler() from
foo_cleaner(). You can figure out its address by inspecting
the value of $SIG before you install foo_cleaner() as
the new signal handler. I.e. do

my $old_handler = $SIG{ INT };
$SIG{ INT } = \&new_handler;

sub new_handler {
    &$old_handler( @_ );
                             Regards, Jens
  \   Jens Thoms Toerring  ___      jt@toerring.de
   \__________________________      http://toerring.de

Re: Handling two signal handler

On Nov 19, 10:24=A0pm, j...@toerring.de (Jens Thoms Toerring) wrote:
Quoted text here. Click to load it

I tried this before but it is not working in a threaded environment.
In context means , the object is created in a thread, but the signal
handler is installed at the
main application.  Here is the flow.
./main.pl creates a thread -> object of Execution.pm is created in the
thread -> The signal handler should be installed in this context when
the thread created the object of Execution.pm.

i am hunting for the solution, let me know if you found anything,

Re: Handling two signal handler

On Thu, 19 Nov 2009 22:10:31 -0800, sanjeeb wrote:

Quoted text here. Click to load it

Threads and signals don't mix, as noted in the threads documentation.
This makes Perl threads absolutely useless in my opinion. Try a fork
based solution instead.


Site Timeline