summaryrefslogtreecommitdiffstats
path: root/lib/libpthread/thread/thr_open.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/libpthread/thread/thr_open.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/libpthread/thread/thr_open.c')
-rw-r--r--lib/libpthread/thread/thr_open.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/libpthread/thread/thr_open.c b/lib/libpthread/thread/thr_open.c
index ec60ba4..8ac625d 100644
--- a/lib/libpthread/thread/thr_open.c
+++ b/lib/libpthread/thread/thr_open.c
@@ -50,7 +50,7 @@ __open(const char *path, int flags,...)
int mode = 0;
va_list ap;
- _thr_enter_cancellation_point(curthread);
+ _thr_cancel_enter(curthread);
/* Check if the file is being created: */
if (flags & O_CREAT) {
@@ -61,7 +61,11 @@ __open(const char *path, int flags,...)
}
ret = __sys_open(path, flags, mode);
- _thr_leave_cancellation_point(curthread);
+ /*
+ * To avoid possible file handle leak,
+ * only check cancellation point if it is failure
+ */
+ _thr_cancel_leave(curthread, (ret == -1));
return ret;
}
OpenPOWER on IntegriCloud