Skip to contentSkip to conversation

Remove the signal-waiting logic from create_sig_proc()

PATCH In review Jiri Palecek 2 participants 2 messages Jun 8, 2009 – Jun 9, 2009

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Remove the signal-waiting logic from create_sig_proc()

In create_sig_proc, the child process waits for the parent to wake it with a signal. This doesn't actually solve anything, and the implementation with pause() syscall is inherently racy (the race results in a deadlock). This patch removes it; it doesn't make the function race-free (it's possible the child will send the signal before the parent had chance to run), but this is the best you can get.

Regards
Jiri Palecek

---
 testcases/kernel/syscalls/utils/common_j_h.c |   10 ----------
 1 files changed, 0 insertions(+), 10 deletions(-)
testcases/kernel/syscalls/utils/common_j_h.c +0 -10
index cda3198..d122ff9 100644
@@ -102,23 +102,14 @@ int cleanup_euid(uid_t old_uid)
 /*
  * Generate a child process which will send a signal
  */
-static void sighandler_for_sig_proc(int sig)
-{
-	if (sig == SIGUSR2)
-		return;
-	return;
-}
-
 pid_t create_sig_proc(unsigned long usec, int sig)
 {
 	pid_t pid, cpid;
 
-	signal(SIGUSR2, sighandler_for_sig_proc);
 	pid = getpid();
 	cpid = fork();
 	switch (cpid) {
 	case 0:
-		pause();
 		usleep(usec);
 		kill(pid, sig);
 		_exit(0);
@@ -127,7 +118,6 @@ pid_t create_sig_proc(unsigned long usec, int sig)
 		EPRINTF("fork failed.\n");
 		return cpid;
 	default:
-		kill(cpid, SIGUSR2);
 		return cpid;
 	}
 }
Signature · 13 lines
1.6.2.4


------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises 
looking to deploy the next generation of Solaris that includes the latest 
innovations from Sun and the OpenSource community. Download a copy and 
enjoy capabilities such as Networking, Storage and Virtualization. 
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list
#1 lore raw
Quoted 8 lines · Jiri Palecek

In create_sig_proc, the child process waits for the parent to wake it
with a signal. This doesn't actually solve anything, and the implementation with pause() syscall is inherently racy (the race results in a deadlock). This patch removes it; it doesn't make the function race-free (it's possible the child will send the signal before the parent had chance to run), but this is the best you can get.

Quoted 4 lines

Regards
Jiri Palecek

Thanks.

Regards--
Subrata

Quoted 33 lines
---
 testcases/kernel/syscalls/utils/common_j_h.c |   10 ----------
 1 files changed, 0 insertions(+), 10 deletions(-)
testcases/kernel/syscalls/utils/common_j_h.c +0 -9
index cda3198..d122ff9 100644
@@ -102,23 +102,14 @@ int cleanup_euid(uid_t old_uid)
 /*
  * Generate a child process which will send a signal
  */
-static void sighandler_for_sig_proc(int sig)
-{
-	if (sig == SIGUSR2)
-		return;
-	return;
-}
-
 pid_t create_sig_proc(unsigned long usec, int sig)
 {
 	pid_t pid, cpid;
 
-	signal(SIGUSR2, sighandler_for_sig_proc);
 	pid = getpid();
 	cpid = fork();
 	switch (cpid) {
 	case 0:
-		pause();
 		usleep(usec);
 		kill(pid, sig);
 		_exit(0);

testcases/kernel/syscalls/utils/common_j_h.c pid_t create_sig_proc(unsigned long usec, int sig) · line 123

Quoted 7 lines
testcases/kernel/syscalls/utils/common_j_h.c +0 -1
@@ -127,7 +118,6 @@ pid_t create_sig_proc(unsigned long usec, int sig)
 		EPRINTF("fork failed.\n");
 		return cpid;
 	default:
-		kill(cpid, SIGUSR2);
 		return cpid;
 	}
 }

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list