summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--hurd/thread-cancel.c11
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 <kettenis@gnu.org>
+
+ * 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 <drepper@redhat.com>
* 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);