aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/recv.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach/hurd/recv.c')
-rw-r--r--sysdeps/mach/hurd/recv.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/recv.c b/sysdeps/mach/hurd/recv.c
index 6dd556cc12..b9ed067265 100644
--- a/sysdeps/mach/hurd/recv.c
+++ b/sysdeps/mach/hurd/recv.c
@@ -21,6 +21,7 @@
#include <hurd/fd.h>
#include <hurd/socket.h>
#include <string.h>
+#include <sysdep-cancel.h>
/* Read N bytes into BUF from socket FD.
Returns the number read or -1 for errors. */
@@ -36,13 +37,17 @@ __recv (int fd, void *buf, size_t n, int flags)
mach_msg_type_number_t nports = 0;
char *cdata = NULL;
mach_msg_type_number_t clen = 0;
+ int cancel_oldtype;
+ cancel_oldtype = LIBC_CANCEL_ASYNC();
err = HURD_DPORT_USE (fd, __socket_recv (port, &addrport,
flags, &bufp, &nread,
&ports, &nports,
&cdata, &clen,
&flags,
n));
+ LIBC_CANCEL_RESET (cancel_oldtype);
+
if (err == MIG_BAD_ID || err == EOPNOTSUPP)
/* The file did not grok the socket protocol. */
err = ENOTSOCK;