diff options
Diffstat (limited to 'tools/testing/selftests/powerpc/harness.c')
| -rw-r--r-- | tools/testing/selftests/powerpc/harness.c | 15 | 
1 files changed, 12 insertions, 3 deletions
diff --git a/tools/testing/selftests/powerpc/harness.c b/tools/testing/selftests/powerpc/harness.c index e80c42a584f..8ebc58a0931 100644 --- a/tools/testing/selftests/powerpc/harness.c +++ b/tools/testing/selftests/powerpc/harness.c @@ -30,12 +30,15 @@ int run_test(int (test_function)(void), char *name)  	pid = fork();  	if (pid == 0) { +		setpgid(0, 0);  		exit(test_function());  	} else if (pid == -1) {  		perror("fork");  		return 1;  	} +	setpgid(pid, pid); +  	/* Wake us up in timeout seconds */  	alarm(TIMEOUT);  	terminated = false; @@ -50,17 +53,20 @@ wait:  		if (terminated) {  			printf("!! force killing %s\n", name); -			kill(pid, SIGKILL); +			kill(-pid, SIGKILL);  			return 1;  		} else {  			printf("!! killing %s\n", name); -			kill(pid, SIGTERM); +			kill(-pid, SIGTERM);  			terminated = true;  			alarm(KILL_TIMEOUT);  			goto wait;  		}  	} +	/* Kill anything else in the process group that is still running */ +	kill(-pid, SIGTERM); +  	if (WIFEXITED(status))  		status = WEXITSTATUS(status);  	else { @@ -99,7 +105,10 @@ int test_harness(int (test_function)(void), char *name)  	rc = run_test(test_function, name); -	test_finish(name, rc); +	if (rc == MAGIC_SKIP_RETURN_VALUE) +		test_skip(name); +	else +		test_finish(name, rc);  	return rc;  }  | 
