Signals and threads

Nov 24, 2006 2 Replies

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



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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required