mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-05 12:40:55 +08:00
hurd: Make send* cancellation points
* sysdeps/mach/hurd/send.c (__send): Make the __socket_send call a cancellation point. * sysdeps/mach/hurd/sendto.c (__sendto): Likewise. * sysdeps/mach/hurd/sendmsg.c (__libc_sendmsg): Likewise.
This commit is contained in:
parent
45fce058fe
commit
0c46891442
@ -20,6 +20,7 @@
|
||||
#include <hurd.h>
|
||||
#include <hurd/socket.h>
|
||||
#include <hurd/fd.h>
|
||||
#include <sysdep-cancel.h>
|
||||
|
||||
/* Send N bytes of BUF to socket FD. Returns the number sent or -1. */
|
||||
ssize_t
|
||||
@ -27,11 +28,14 @@ __send (int fd, const void *buf, size_t n, int flags)
|
||||
{
|
||||
error_t err;
|
||||
size_t wrote;
|
||||
int cancel_oldtype;
|
||||
|
||||
cancel_oldtype = LIBC_CANCEL_ASYNC();
|
||||
err = HURD_DPORT_USE (fd, __socket_send (port, MACH_PORT_NULL,
|
||||
flags, buf, n,
|
||||
NULL, MACH_MSG_TYPE_COPY_SEND, 0,
|
||||
NULL, 0, &wrote));
|
||||
LIBC_CANCEL_RESET (cancel_oldtype);
|
||||
|
||||
if (err == MIG_BAD_ID || err == EOPNOTSUPP)
|
||||
/* The file did not grok the socket protocol. */
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <hurd/fd.h>
|
||||
#include <hurd/ifsock.h>
|
||||
#include <hurd/socket.h>
|
||||
#include <sysdep-cancel.h>
|
||||
#include "hurd/hurdsocket.h"
|
||||
|
||||
/* Send a message described MESSAGE on socket FD.
|
||||
@ -184,6 +185,7 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags)
|
||||
if (! err)
|
||||
{
|
||||
/* Send the data. */
|
||||
int cancel_oldtype = LIBC_CANCEL_ASYNC();
|
||||
err = __socket_send (port, aport,
|
||||
flags, data.ptr, len,
|
||||
ports,
|
||||
@ -192,6 +194,7 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags)
|
||||
message->msg_control,
|
||||
message->msg_controllen,
|
||||
&amount);
|
||||
LIBC_CANCEL_RESET (cancel_oldtype);
|
||||
__mach_port_deallocate (__mach_task_self (),
|
||||
aport);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <hurd/fd.h>
|
||||
#include <hurd/ifsock.h>
|
||||
#include <hurd/socket.h>
|
||||
#include <sysdep-cancel.h>
|
||||
#include "hurd/hurdsocket.h"
|
||||
|
||||
/* Send N bytes of BUF on socket FD to peer at address ADDR (which is
|
||||
@ -82,11 +83,13 @@ __sendto (int fd,
|
||||
if (! err)
|
||||
{
|
||||
/* Send the data. */
|
||||
int cancel_oldtype = LIBC_CANCEL_ASYNC();
|
||||
err = __socket_send (port, aport,
|
||||
flags, buf, n,
|
||||
NULL,
|
||||
MACH_MSG_TYPE_COPY_SEND, 0,
|
||||
NULL, 0, &wrote);
|
||||
LIBC_CANCEL_RESET (cancel_oldtype);
|
||||
}
|
||||
err;
|
||||
}));
|
||||
|
Loading…
Reference in New Issue
Block a user