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>