From owner-svn-src-head@FreeBSD.ORG Fri Aug 20 04:15:05 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B606610656A3; Fri, 20 Aug 2010 04:15:05 +0000 (UTC) (envelope-from davidxu@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A61648FC12; Fri, 20 Aug 2010 04:15:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o7K4F5Z0025823; Fri, 20 Aug 2010 04:15:05 GMT (envelope-from davidxu@svn.freebsd.org) Received: (from davidxu@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o7K4F5ll025821; Fri, 20 Aug 2010 04:15:05 GMT (envelope-from davidxu@svn.freebsd.org) Message-Id: <201008200415.o7K4F5ll025821@svn.freebsd.org> From: David Xu Date: Fri, 20 Aug 2010 04:15:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r211522 - head/lib/libthr/thread X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Aug 2010 04:15:05 -0000 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); }