diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2012-05-15 09:41:27 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2012-05-15 09:41:57 +0530 |
commit | 439bf404b8fa125cf950dc1aa37838702c5353ea (patch) | |
tree | da5913033bcfa18987da0aabf69ad99b751772a3 /nptl/tst-cancel-self-cleanup.c | |
parent | 2949684c162a4413e42249d6b2ad554cb468b5be (diff) | |
download | glibc-439bf404b8fa125cf950dc1aa37838702c5353ea.tar.gz glibc-439bf404b8fa125cf950dc1aa37838702c5353ea.tar.xz glibc-439bf404b8fa125cf950dc1aa37838702c5353ea.zip |
Allow a single-threaded program to cancel itself
There is nothing in the POSIX specification to disallow a single-threaded program from cancelling itself, so we forcibly enable multiple_threads to allow the next available cancellation point in the thread to run. Also added additional tests to cover various cancellation scenarios.
Diffstat (limited to 'nptl/tst-cancel-self-cleanup.c')
-rw-r--r-- | nptl/tst-cancel-self-cleanup.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/nptl/tst-cancel-self-cleanup.c b/nptl/tst-cancel-self-cleanup.c new file mode 100644 index 0000000000..9b15f555dc --- /dev/null +++ b/nptl/tst-cancel-self-cleanup.c @@ -0,0 +1,23 @@ +/* Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +static void +cleanup (void *cleanup_should_fail) +{ + printf ("Main thread got cancelled and is being cleaned up now\n"); + exit (*(int *)cleanup_should_fail); +} |