PDA

View Full Version : Signals and threads


shibu-kundara
25-11-2006, 12:04 AM
Hi

I have a problem using sigaction function in pthread library.
I have 2 thread each one registering

in threadA
act1.sa_handler=func1;
if(sigaction(SIGUSR1,&act1,NULL)) printf("\nSigaction failed! in th1
!!\n");

in threadB
act1.sa_handler=func2;
if(sigaction(SIGUSR1,&act2,NULL)) printf("\nSigaction failed! in th2
!!\n");

but when i send signal SIGUSR1 to threadA , threadA receives the
signal
but the handler func2 is getting called,


Please let me know is there any way to solve this problem?
thanks in advance
thomas

Michael Schnell
25-11-2006, 01:13 AM
shibu-kundara wrote:
> I have a problem using sigaction function in pthread library.
> I have 2 thread each one registering
> but when i send signal SIGUSR1 to threadA , threadA receives the
> signal but the handler func2 is getting called,


See the thread "Communication between threads of same PIDs" in this
forum. Does that help ?

shibu-kundara
25-11-2006, 01:34 AM
Michael Schnell wrote:

> See the thread "Communication between threads of same PIDs" in this
> forum. Does that help ?

thanks for the response,
It does not solve the problem.

In the pthread_library clone call is used , In the man page of clone
its given that
if CLONE_SIGHAND is not defined, the signal handlers will not be shared
between threads.
I recompiled the pthread library with out CLONE_SIGHAND .

I linked the program with the new library , It has been ok in the
do_fork call in the pthread funciton, A new struct of task_struct->sig
is allocated. Also i have seen that the sigaction function call in the
thread modifies and install a new handler in this already allocated
task_struct->sig structure.
Inspite of all this the last sig handler function is getting called
when i send the signal to the first thread. Any clue???

thanks
thomas