From 2d3d740b6fe77f280bc49d93242386abf43230fa Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Tue, 25 Jul 2000 21:43:38 +0000 Subject: * hurd/thread-cancel.c (hurd_thread_cancel): When cancelling the calling thread, set the cancellation flag and return success instead of EINTR. 2000-07-25 Mark Kettenis * hurd/thread-cancel.c (hurd_thread_cancel): When cancelling the calling thread, set the cancellation flag and return success instead of EINTR. --- ChangeLog | 6 ++++++ hurd/thread-cancel.c | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index dffadd0e19..afaf510765 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2000-07-25 Mark Kettenis + + * hurd/thread-cancel.c (hurd_thread_cancel): When cancelling the + calling thread, set the cancellation flag and return success + instead of EINTR. + 2000-07-25 Ulrich Drepper * libio/Makefile: Add rules build, run, and distribute tst-widetext.c. diff --git a/hurd/thread-cancel.c b/hurd/thread-cancel.c index 9791268e33..6eaa62ea09 100644 --- a/hurd/thread-cancel.c +++ b/hurd/thread-cancel.c @@ -1,5 +1,5 @@ /* Thread cancellation support. - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 2000 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 @@ -43,7 +43,14 @@ hurd_thread_cancel (thread_t thread) if (! ss) return EINVAL; if (ss == _hurd_self_sigstate ()) - return EINTR; /* Bozo. */ + { + /* We are cancelling ourselves, so it is easy to succeed + quickly. Since this function is not a cancellation point, we + just leave the flag set pending the next cancellation point + (hurd_check_cancel or RPC) and return success. */ + ss->cancel = 1; + return 0; + } assert (! __spin_lock_locked (&ss->critical_section_lock)); __spin_lock (&ss->critical_section_lock); -- cgit v1.2.3