svn commit: r213096 - head/lib/libthr/thread
David Xu
davidxu at FreeBSD.org
Fri Sep 24 07:52:07 UTC 2010
Author: davidxu
Date: Fri Sep 24 07:52:07 2010
New Revision: 213096
URL: http://svn.freebsd.org/changeset/base/213096
Log:
In most cases, cancel_point and cancel_async needn't be checked again,
because cancellation is almostly checked at cancellation points.
Modified:
head/lib/libthr/thread/thr_cancel.c
head/lib/libthr/thread/thr_fork.c
head/lib/libthr/thread/thr_private.h
Modified: head/lib/libthr/thread/thr_cancel.c
==============================================================================
--- head/lib/libthr/thread/thr_cancel.c Fri Sep 24 07:29:29 2010 (r213095)
+++ head/lib/libthr/thread/thr_cancel.c Fri Sep 24 07:52:07 2010 (r213096)
@@ -131,9 +131,7 @@ _pthread_testcancel(void)
{
struct pthread *curthread = _get_curthread();
- curthread->cancel_point = 1;
testcancel(curthread);
- curthread->cancel_point = 0;
}
void
@@ -159,7 +157,7 @@ _thr_cancel_enter2(struct pthread *curth
void
_thr_cancel_leave(struct pthread *curthread, int maycancel)
{
+ curthread->cancel_point = 0;
if (maycancel)
testcancel(curthread);
- curthread->cancel_point = 0;
}
Modified: head/lib/libthr/thread/thr_fork.c
==============================================================================
--- head/lib/libthr/thread/thr_fork.c Fri Sep 24 07:29:29 2010 (r213095)
+++ head/lib/libthr/thread/thr_fork.c Fri Sep 24 07:52:07 2010 (r213096)
@@ -248,7 +248,8 @@ _fork(void)
_thr_rwlock_unlock(&_thr_atfork_lock);
curthread->no_cancel = cancelsave;
/* test async cancel */
- _thr_testcancel(curthread);
+ if (curthread->cancel_async)
+ _thr_testcancel(curthread);
}
errno = errsave;
Modified: head/lib/libthr/thread/thr_private.h
==============================================================================
--- head/lib/libthr/thread/thr_private.h Fri Sep 24 07:29:29 2010 (r213095)
+++ head/lib/libthr/thread/thr_private.h Fri Sep 24 07:52:07 2010 (r213096)
@@ -357,7 +357,6 @@ struct pthread {
#define SHOULD_CANCEL(thr) \
((thr)->cancel_pending && (thr)->cancel_enable && \
- ((thr)->cancel_point || (thr)->cancel_async) && \
(thr)->no_cancel == 0)
/* Cancellation is enabled */
More information about the svn-src-all
mailing list