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. --- hurd/thread-cancel.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'hurd/thread-cancel.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