Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Aug 2010 04:15:05 +0000 (UTC)
From:      David Xu <davidxu@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r211522 - head/lib/libthr/thread
Message-ID:  <201008200415.o7K4F5ll025821@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008200415.o7K4F5ll025821>