Skip to content

Commit

Permalink
remove active_events in udp/win
Browse files Browse the repository at this point in the history
  • Loading branch information
qgymib committed Oct 7, 2023
1 parent 89675e7 commit 1a3a38b
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 14 deletions.
29 changes: 21 additions & 8 deletions ev.c
Original file line number Diff line number Diff line change
Expand Up @@ -11108,8 +11108,8 @@ EV_LOCAL void ev__threadpool_exit_win(ev_loop_t* loop)

////////////////////////////////////////////////////////////////////////////////
// FILE: src/win/udp_win.c
// SIZE: 24125
// SHA-256: e09c230471127844609c8cf1c0b10076939040dea54db5e0a0977dd17da1cff4
// SIZE: 24339
// SHA-256: 445cf9c099247e582f82f192c63e8406fb38fad650120ac6b8b2d93def9b521f
////////////////////////////////////////////////////////////////////////////////
#line 1 "src/win/udp_win.c"
/* AMALGAMATE: #include "ev.h" */
Expand Down Expand Up @@ -11435,10 +11435,23 @@ static int _ev_udp_set_source_membership_ipv6(ev_udp_t* udp,
return 0;
}

static void _ev_udp_smart_deactive(ev_udp_t* udp)
{
size_t io_sz = 0;

io_sz += ev_list_size(&udp->send_list);
io_sz += ev_list_size(&udp->recv_list);

if (io_sz == 0)
{
ev__handle_deactive(&udp->base);
}
}

static void _ev_udp_w_user_callback_win(ev_udp_write_t* req, ssize_t size)
{
ev_udp_t* udp = req->backend.owner;
ev__handle_event_dec(&udp->base);
_ev_udp_smart_deactive(udp);

ev__write_exit(&req->base);
ev__handle_exit(&req->handle, NULL);
Expand All @@ -11449,7 +11462,7 @@ static void _ev_udp_w_user_callback_win(ev_udp_write_t* req, ssize_t size)
static void _ev_udp_r_user_callback_win(ev_udp_read_t* req, const struct sockaddr* addr, ssize_t size)
{
ev_udp_t* udp = req->backend.owner;
ev__handle_event_dec(&udp->base);
_ev_udp_smart_deactive(udp);

ev__read_exit(&req->base);
ev__handle_exit(&req->handle, NULL);
Expand Down Expand Up @@ -11613,7 +11626,7 @@ EV_LOCAL int ev__udp_recv(ev_udp_t* udp, ev_udp_read_t* req)
req->backend.stat = EV_EINPROGRESS;
ev__iocp_init(&req->backend.io, _ev_udp_on_recv_iocp_win, udp);

ev__handle_event_add(&udp->base);
ev__handle_active(&udp->base);

int ret = WSARecv(udp->sock, &buf, 1, &bytes, &flags, &req->backend.io.overlapped, NULL);
if (ret == 0 && (udp->base.data.flags & EV_HANDLE_UDP_BYPASS_IOCP))
Expand All @@ -11628,7 +11641,7 @@ EV_LOCAL int ev__udp_recv(ev_udp_t* udp, ev_udp_read_t* req)
return 0;
}

ev__handle_event_dec(&udp->base);
_ev_udp_smart_deactive(udp);
return ev__translate_sys_error(err);
}

Expand Down Expand Up @@ -11656,7 +11669,7 @@ EV_LOCAL int ev__udp_send(ev_udp_t* udp, ev_udp_write_t* req,

DWORD send_bytes;

ev__handle_event_add(&udp->base);
ev__handle_active(&udp->base);
ret = WSASendTo(udp->sock, (WSABUF*)req->base.bufs, (DWORD)req->base.nbuf,
&send_bytes, 0, addr, addrlen, &req->backend.io.overlapped, NULL);

Expand All @@ -11674,7 +11687,7 @@ EV_LOCAL int ev__udp_send(ev_udp_t* udp, ev_udp_write_t* req,
return 0;
}

ev__handle_event_dec(&udp->base);
_ev_udp_smart_deactive(udp);
return ev__translate_sys_error(err);
}

Expand Down
25 changes: 19 additions & 6 deletions src/win/udp_win.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,10 +321,23 @@ static int _ev_udp_set_source_membership_ipv6(ev_udp_t* udp,
return 0;
}

static void _ev_udp_smart_deactive(ev_udp_t* udp)
{
size_t io_sz = 0;

io_sz += ev_list_size(&udp->send_list);
io_sz += ev_list_size(&udp->recv_list);

if (io_sz == 0)
{
ev__handle_deactive(&udp->base);
}
}

static void _ev_udp_w_user_callback_win(ev_udp_write_t* req, ssize_t size)
{
ev_udp_t* udp = req->backend.owner;
ev__handle_event_dec(&udp->base);
_ev_udp_smart_deactive(udp);

ev__write_exit(&req->base);
ev__handle_exit(&req->handle, NULL);
Expand All @@ -335,7 +348,7 @@ static void _ev_udp_w_user_callback_win(ev_udp_write_t* req, ssize_t size)
static void _ev_udp_r_user_callback_win(ev_udp_read_t* req, const struct sockaddr* addr, ssize_t size)
{
ev_udp_t* udp = req->backend.owner;
ev__handle_event_dec(&udp->base);
_ev_udp_smart_deactive(udp);

ev__read_exit(&req->base);
ev__handle_exit(&req->handle, NULL);
Expand Down Expand Up @@ -499,7 +512,7 @@ EV_LOCAL int ev__udp_recv(ev_udp_t* udp, ev_udp_read_t* req)
req->backend.stat = EV_EINPROGRESS;
ev__iocp_init(&req->backend.io, _ev_udp_on_recv_iocp_win, udp);

ev__handle_event_add(&udp->base);
ev__handle_active(&udp->base);

int ret = WSARecv(udp->sock, &buf, 1, &bytes, &flags, &req->backend.io.overlapped, NULL);
if (ret == 0 && (udp->base.data.flags & EV_HANDLE_UDP_BYPASS_IOCP))
Expand All @@ -514,7 +527,7 @@ EV_LOCAL int ev__udp_recv(ev_udp_t* udp, ev_udp_read_t* req)
return 0;
}

ev__handle_event_dec(&udp->base);
_ev_udp_smart_deactive(udp);
return ev__translate_sys_error(err);
}

Expand Down Expand Up @@ -542,7 +555,7 @@ EV_LOCAL int ev__udp_send(ev_udp_t* udp, ev_udp_write_t* req,

DWORD send_bytes;

ev__handle_event_add(&udp->base);
ev__handle_active(&udp->base);
ret = WSASendTo(udp->sock, (WSABUF*)req->base.bufs, (DWORD)req->base.nbuf,
&send_bytes, 0, addr, addrlen, &req->backend.io.overlapped, NULL);

Expand All @@ -560,7 +573,7 @@ EV_LOCAL int ev__udp_send(ev_udp_t* udp, ev_udp_write_t* req,
return 0;
}

ev__handle_event_dec(&udp->base);
_ev_udp_smart_deactive(udp);
return ev__translate_sys_error(err);
}

Expand Down

0 comments on commit 1a3a38b

Please sign in to comment.