From 662de0889a040e3ebeefcfdde547edc8a11f87d7 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 14 Jun 2020 15:50:44 +0000 Subject: hurd: Make write and pwrite64 cancellation points and add _nocancel variants. * sysdeps/mach/hurd/write.c (__libc_write): Call __write_nocancel surrounded by enabling async cancel, to replace implementation moved to... * sysdeps/mach/hurd/write_nocancel.c (__write_nocancel): ... here. * sysdeps/mach/hurd/pwrite64.c (__libc_pwrite64): Call __pwrite64_nocancel surrounded by enabling async cancel, to replace implementation moved to... * sysdeps/mach/hurd/pwrite64_nocancel.c (__pwrite64_nocancel): ... here. * sysdeps/mach/hurd/Makefile (sysdep_routines): Add write_nocancel and pwrite64_nocancel. * sysdeps/mach/hurd/not-cancel.h (__write_nocancel, __pwrite64_nocancel): Replace macros with prototypes with a hidden proto on libc. * sysdeps/mach/hurd/dl-sysdep.c (__write_nocancel): New alias, check that it is not hidden. * sysdeps/mach/hurd/Versions (libc.GLIBC_PRIVATE): Add __write_nocancel. (ld.GLIBC_PRIVATE): Add __write_nocancel. * sysdeps/mach/hurd/i386/localplt.data (__write_nocancel): Add reference. --- sysdeps/mach/hurd/not-cancel.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'sysdeps/mach/hurd/not-cancel.h') diff --git a/sysdeps/mach/hurd/not-cancel.h b/sysdeps/mach/hurd/not-cancel.h index 8a8f5a9d3c..d2c3e20019 100644 --- a/sysdeps/mach/hurd/not-cancel.h +++ b/sysdeps/mach/hurd/not-cancel.h @@ -48,8 +48,12 @@ __typeof (__read) __read_nocancel; /* Non cancellable pread syscall (LFS version). */ __typeof (__pread64) __pread64_nocancel; -#define __write_nocancel(fd, buf, n) \ - __write (fd, buf, n) +/* Non cancellable write syscall. */ +__typeof (__write) __write_nocancel; + +/* Non cancellable pwrite syscall (LFS version). */ +__typeof (__pwrite64) __pwrite64_nocancel; + #define __writev_nocancel_nostatus(fd, iov, n) \ (void) __writev (fd, iov, n) # define __waitpid_nocancel(pid, stat_loc, options) \ @@ -60,6 +64,8 @@ __typeof (__pread64) __pread64_nocancel; #if IS_IN (libc) hidden_proto (__read_nocancel) hidden_proto (__pread64_nocancel) +hidden_proto (__write_nocancel) +hidden_proto (__pwrite64_nocancel) hidden_proto (__close_nocancel_nostatus) #endif -- cgit 1.4.1