[PATCH 1/1] fix tlock.c to use sigaction() over deprecated signal(). Fixes sync issues when client is loaded. (Particularly test12)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Jonathan Dascenzo <Jonathan.Dascenzo@xxxxxxxxxx>

---
 lock/tlock.c |   30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/lock/tlock.c b/lock/tlock.c
index 8a7d0cc..39a6ad9 100644
--- a/lock/tlock.c
+++ b/lock/tlock.c
@@ -272,20 +272,24 @@ testexit(nok)
 	int nok;
 {
 
+	struct sigaction act;
 	close_testfile(DO_UNLINK);
 	if (nok) {
 		testreport(1);
 	}
 	if (who == PARENT) {
-		signal(SIGCLD, SIG_DFL);
+		act.sa_handler = SIG_DFL;
+		sigaction(SIGCLD, &act, NULL);
 		if (nok) {
-			signal(SIGINT, SIG_IGN);
+			act.sa_handler = SIG_IGN;
+			sigaction(SIGINT, &act, NULL);
 			kill(childpid, SIGINT);
 		}
 		wait((int *)0);
 	} else {
 		if (nok) {
-			signal(SIGINT, SIG_IGN);
+			act.sa_handler = SIG_IGN;
+			sigaction(SIGINT, &act, NULL);
 			kill(parentpid, SIGINT);
 		}
 	}
@@ -1450,7 +1454,9 @@ test12()
 			close_testfile(DO_UNLINK);
 		} else {
 			/* subchild */
-			signal(SIGINT, SIG_DFL);
+			struct sigaction act;
+			act.sa_handler = SIG_DFL;
+			sigaction(SIGINT, &act, NULL);
 			test(12, 0, F_TLOCK, (off_t)0, (off_t)0, PASS, FATAL);
 			for (;;)
 				sleep(1);
@@ -1667,13 +1673,19 @@ main(argc, argv)
 	/*
 	 * Fork child...
 	 */
+	struct sigaction act; 
+	act.sa_handler = SIG_DFL;
 	if ((childpid = fork()) == 0) {
 		who = CHILD;
-		signal(SIGINT, parentsig);
+		sigaction(SIGINT, &act, NULL);
+		act.sa_handler = parentsig;
+		sigaction(SIGINT, &act, NULL);
 	} else {
 		who = PARENT;
-		signal(SIGINT, childsig);
-		signal(SIGCLD, childdied);
+		act.sa_handler = childsig;
+		sigaction(SIGINT, &act, NULL);
+		act.sa_handler = childdied;
+		sigaction(SIGCLD, &act, NULL);
 	}
 
 	/*
@@ -1692,7 +1704,9 @@ main(argc, argv)
 	if (who == CHILD) {
 		childwait();
 	} else {
-		signal(SIGCLD, SIG_DFL);
+		struct sigaction;
+		act.sa_handler = SIG_DFL;
+		sigaction(SIGCLD, &act, NULL);
 		childfree(0);
 	}
 	testexit(0);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux