summaryrefslogtreecommitdiffstats
path: root/lib/libkse/thread/thr_join.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2003-12-09 02:20:56 +0000
committerdavidxu <davidxu@FreeBSD.org>2003-12-09 02:20:56 +0000
commit22c52834eb703c132b4e7c6bd591610f1129d32d (patch)
tree336614966b1df2677098ac89ea3a03fc82f7141b /lib/libkse/thread/thr_join.c
parent84e2c4c55b82cc4f62ab90c4141beffce4e30412 (diff)
downloadFreeBSD-src-22c52834eb703c132b4e7c6bd591610f1129d32d.zip
FreeBSD-src-22c52834eb703c132b4e7c6bd591610f1129d32d.tar.gz
Rename _thr_enter_cancellation_point to _thr_cancel_enter, rename
_thr_leave_cancellation_point to _thr_cancel_leave, add a parameter to _thr_cancel_leave to indicate whether cancellation point should be checked, this gives us an option to not check cancallation point if a syscall successfully returns to avoid any leaks, current I have creat(), open() and fcntl(F_DUPFD) to not check cancellation point after they sucessfully returned. Replace some members in structure kse with bit flags to same some memory. Conditionally compile THR_ASSERT to nothing if _PTHREAD_INVARIANTS is not defined. Inline some small functions in thr_cancel.c. Use __predict_false in thr_kern.c for some executed only once code. Reviewd by: deischen
Diffstat (limited to 'lib/libkse/thread/thr_join.c')
-rw-r--r--lib/libkse/thread/thr_join.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/libkse/thread/thr_join.c b/lib/libkse/thread/thr_join.c
index 592aa3a..9f940da 100644
--- a/lib/libkse/thread/thr_join.c
+++ b/lib/libkse/thread/thr_join.c
@@ -45,19 +45,19 @@ _pthread_join(pthread_t pthread, void **thread_return)
kse_critical_t crit;
int ret = 0;
- _thr_enter_cancellation_point(curthread);
+ _thr_cancel_enter(curthread);
/* Check if the caller has specified an invalid thread: */
if (pthread == NULL || pthread->magic != THR_MAGIC) {
/* Invalid thread: */
- _thr_leave_cancellation_point(curthread);
+ _thr_cancel_leave(curthread, 1);
return (EINVAL);
}
/* Check if the caller has specified itself: */
if (pthread == curthread) {
/* Avoid a deadlock condition: */
- _thr_leave_cancellation_point(curthread);
+ _thr_cancel_leave(curthread, 1);
return (EDEADLK);
}
@@ -67,7 +67,7 @@ _pthread_join(pthread_t pthread, void **thread_return)
*/
if ((ret = _thr_ref_add(curthread, pthread, /*include dead*/1)) != 0) {
/* Return an error: */
- _thr_leave_cancellation_point(curthread);
+ _thr_cancel_leave(curthread, 1);
return (ESRCH);
}
@@ -155,7 +155,7 @@ _pthread_join(pthread_t pthread, void **thread_return)
*thread_return = curthread->join_status.ret;
}
}
- _thr_leave_cancellation_point(curthread);
+ _thr_cancel_leave(curthread, 1);
/* Return the completion status: */
return (ret);
OpenPOWER on IntegriCloud