[LTP] [PATCH] Make floating point tests Android-compatible
Erick Reyes
erickreyes@google.com
Fri Mar 23 21:57:15 CET 2018
Hi,
Any chance this can be reviewed? This would add support for 4 tests on
Android.
Thanks
On Wed, Feb 21, 2018 at 11:48 AM, Erick Reyes <erickreyes@google.com> wrote:
> Android does not implement pthread_cancel. The function is replaced
> by a no-op in a compatibility header. In most cases, the only side
> effect is that threads cannot be interrupted and have to exit normally.
> However, floating point tests are calling pthread_cancel and waiting for
> a thread doing pthread_sigwait to be finished (Which will never happen).
>
> This patch implements the same logic using pthread_kill with SIGUSR2
> instead, allowing the tests to run under Android.
>
> Signed-off-by: Erick Reyes <erickreyes@google.com>
> ---
> testcases/misc/math/float/main.c | 20 +++++++++++++++++++-
> 1 file changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/testcases/misc/math/float/main.c b/testcases/misc/math/float/
> main.c
> index d71ca18e6..64d1475e4 100644
> --- a/testcases/misc/math/float/main.c
> +++ b/testcases/misc/math/float/main.c
> @@ -115,6 +115,18 @@ int main(int argc, char *argv[])
> /*int time=1; */
> int i;
>
> + sigset_t signals_set;
> +
> + /*
> + * Use SIGUSR2 to terminate our signal handler
> + */
> + sigemptyset(&signals_set);
> + sigaddset(&signals_set, SIGUSR2);
> +
> + retval = pthread_sigmask(SIG_BLOCK, &signals_set, NULL);
> + if (retval != 0)
> + sys_error("main : pthread_sigmask FAILED", __LINE__);
> +
> /* Generate test ID from invocation name */
> if ((TCID = strrchr(argv[0], '/')) != NULL)
> TCID++;
> @@ -299,7 +311,7 @@ finished:
> SAFE_FREE(pcom);
>
> }
> - pthread_cancel(sig_hand);
> + pthread_kill(sig_hand, SIGUSR2);
> pthread_join(sig_hand, NULL);
> SAFE_FREE(tabcom);
> SAFE_FREE(threads);
> @@ -338,6 +350,7 @@ static void *handle_signals(void *arg)
> sigaddset(&signals_set, SIGQUIT);
> sigaddset(&signals_set, SIGTERM);
> sigaddset(&signals_set, SIGUSR1);
> + sigaddset(&signals_set, SIGUSR2);
> sigaddset(&signals_set, SIGALRM);
> while (1) {
> if (debug)
> @@ -348,6 +361,11 @@ static void *handle_signals(void *arg)
> tst_resm(TINFO, "Signal handler caught signal %d", sig);
>
> switch (sig) {
> + case SIGUSR2:
> + if (debug)
> + tst_resm(TINFO, "Signal handler received termination request, exiting");
> + pthread_exit(NULL);
> + break;
> case SIGALRM:
> case SIGUSR1:
> case SIGINT:
> --
> 2.16.1.291.g4437f3f132-goog
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20180323/baac9241/attachment.html>
More information about the ltp
mailing list