From 22c52834eb703c132b4e7c6bd591610f1129d32d Mon Sep 17 00:00:00 2001 From: davidxu Date: Tue, 9 Dec 2003 02:20:56 +0000 Subject: 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 --- lib/libkse/thread/thr_open.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib/libkse/thread/thr_open.c') diff --git a/lib/libkse/thread/thr_open.c b/lib/libkse/thread/thr_open.c index ec60ba4..8ac625d 100644 --- a/lib/libkse/thread/thr_open.c +++ b/lib/libkse/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; } -- cgit v1.1