From: George Wang <x...@redhat.com>

system(3) will raise SIGCHLD signal to parent process, and most
test cases will call tst_sig to poison all signals including the
SIGCHLD. So add system(3) wrapper function to temporarily disable
the poisoned handler for SIGCHLD, which will make the test cases
happy.
Replace system(3) with tst_system() to ignore SIGCHLG signal handler
poisoned earlier.

Signed-off-by: George Wang <x...@redhat.com>
---
 include/test.h    |  5 +++++
 lib/tst_mkfs.c    |  4 +++-
 lib/tst_run_cmd.c | 17 +++++++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/include/test.h b/include/test.h
index 775ba39..326b686 100644
--- a/include/test.h
+++ b/include/test.h
@@ -300,6 +300,11 @@ void tst_run_cmd(void (cleanup_fn)(void),
                const char *stdout_path,
                const char *stderr_path);
 
+/* Wrapper function for system(3), ignorcing SIGCLD signal.
+ * @command: the command to be run.
+ */
+int tst_system(const char *command);
+
 /* lib/tst_mkfs.c
  *
  * @dev: path to a device
diff --git a/lib/tst_mkfs.c b/lib/tst_mkfs.c
index 5eb3392..39b0c4a 100644
--- a/lib/tst_mkfs.c
+++ b/lib/tst_mkfs.c
@@ -45,7 +45,9 @@ void tst_mkfs(void (cleanup_fn)(void), const char *dev,
                /*
                 * The -f option was added to btrfs-progs v3.12
                 */
-               if (system("mkfs.btrfs 2>&1 | grep '\\-f ' >/dev/null") == 0) {
+               if (0 == tst_system(
+                                       "mkfs.btrfs 2>&1 | grep '\\-f ' 
>/dev/null")
+                       ) {
                        tst_resm(TINFO, "Appending '-f' flag to mkfs.%s",
                                fs_type);
                        argv[pos++] = "-f";
diff --git a/lib/tst_run_cmd.c b/lib/tst_run_cmd.c
index 4eb32e6..5a02db0 100644
--- a/lib/tst_run_cmd.c
+++ b/lib/tst_run_cmd.c
@@ -125,3 +125,20 @@ void tst_run_cmd(void (cleanup_fn)(void),
                        "close() on %s failed at %s:%d",
                        stderr_path, __FILE__, __LINE__);
 }
+
+int tst_system(const char *command)
+{
+       int ret = 0;
+
+       /*
+        *Temporarily disable SIGCHLD of user defined handler, so the
+        *system(3) function will not cause unexpected SIGCHLD signal
+        *callback function for test cases.
+        */
+       void *old_handler = signal(SIGCHLD, SIG_DFL);
+
+       ret = system(command);
+
+       signal(SIGCHLD, old_handler);
+       return ret;
+}
-- 
1.8.4.2


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to