Update Socket#recvfrom to use rb_io_blocking_region.

This commit is contained in:
Samuel Williams 2024-10-09 21:55:20 +13:00
parent 04ddb7e808
commit 438ef21a9b
Notes: git 2024-10-09 10:49:11 +00:00

View File

@ -107,6 +107,7 @@ rsock_send_blocking(void *data)
} }
struct recvfrom_arg { struct recvfrom_arg {
rb_io_t *fptr;
int fd, flags; int fd, flags;
VALUE str; VALUE str;
size_t length; size_t length;
@ -151,7 +152,7 @@ recvfrom_locktmp(VALUE v)
{ {
struct recvfrom_arg *arg = (struct recvfrom_arg *)v; struct recvfrom_arg *arg = (struct recvfrom_arg *)v;
return rb_thread_io_blocking_region(recvfrom_blocking, arg, arg->fd); return rb_io_blocking_region(arg->fptr, recvfrom_blocking, arg);
} }
int int
@ -192,6 +193,7 @@ rsock_s_recvfrom(VALUE socket, int argc, VALUE *argv, enum sock_recv_type from)
rb_raise(rb_eIOError, "recv for buffered IO"); rb_raise(rb_eIOError, "recv for buffered IO");
} }
arg.fptr = fptr;
arg.fd = fptr->fd; arg.fd = fptr->fd;
arg.alen = (socklen_t)sizeof(arg.buf); arg.alen = (socklen_t)sizeof(arg.buf);
arg.str = str; arg.str = str;