diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386/fallocate.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/fallocate.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/fallocate.c b/sysdeps/unix/sysv/linux/i386/fallocate.c index 1434a833f9..33e20753d1 100644 --- a/sysdeps/unix/sysv/linux/i386/fallocate.c +++ b/sysdeps/unix/sysv/linux/i386/fallocate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ #include <errno.h> #include <fcntl.h> -#include <sysdep.h> +#include <sysdep-cancel.h> extern int __call_fallocate (int fd, int mode, __off64_t offset, __off64_t len) @@ -30,7 +30,17 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - int err = __call_fallocate (fd, mode, offset, len); + int err; + if (SINGLE_THREAD_P) + err = __call_fallocate (fd, mode, offset, len); + else + { + int oldtype = LIBC_CANCEL_ASYNC (); + + err = __call_fallocate (fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + } if (__builtin_expect (err, 0)) { __set_errno (err); |