svn commit: r211522 - head/lib/libthr/thread

David Xu davidxu at FreeBSD.org
Fri Aug 20 04:15:05 UTC 2010


Author: davidxu
Date: Fri Aug 20 04:15:05 2010
New Revision: 211522
URL: http://svn.freebsd.org/changeset/base/211522

Log:
  According to specification, function fcntl() is a cancellation point only
  when cmd argument is F_SETLKW.

Modified:
  head/lib/libthr/thread/thr_syscalls.c

Modified: head/lib/libthr/thread/thr_syscalls.c
==============================================================================
--- head/lib/libthr/thread/thr_syscalls.c	Fri Aug 20 01:23:17 2010	(r211521)
+++ head/lib/libthr/thread/thr_syscalls.c	Fri Aug 20 04:15:05 2010	(r211522)
@@ -242,8 +242,6 @@ __fcntl(int fd, int cmd,...)
 	int	ret;
 	va_list	ap;
 	
-	_thr_cancel_enter(curthread);
-
 	va_start(ap, cmd);
 	switch (cmd) {
 	case F_DUPFD:
@@ -257,6 +255,17 @@ __fcntl(int fd, int cmd,...)
 	case F_GETFL:
 		ret = __sys_fcntl(fd, cmd);
 		break;
+
+	case F_OSETLKW:
+	case F_SETLKW:
+		_thr_cancel_enter(curthread);
+#ifdef SYSCALL_COMPAT
+		ret = __fcntl_compat(fd, cmd, va_arg(ap, void *));
+#else
+		ret = __sys_fcntl(fd, cmd, va_arg(ap, void *));
+#endif
+		_thr_cancel_leave(curthread);
+		break;
 	default:
 #ifdef SYSCALL_COMPAT
 		ret = __fcntl_compat(fd, cmd, va_arg(ap, void *));
@@ -266,8 +275,6 @@ __fcntl(int fd, int cmd,...)
 	}
 	va_end(ap);
 
-	_thr_cancel_leave(curthread);
-
 	return (ret);
 }
 


More information about the svn-src-all mailing list