};
typedef enum isc__netievent_type {
- netievent_streamdnscancel,
-
netievent_settlsctx,
netievent_sockstop, /* for multilayer sockets */
} isc__netievent_type;
void
isc__nm_streamdns_cleanup_data(isc_nmsocket_t *sock);
-void
-isc__nm_async_streamdnscancel(isc__networker_t *worker, isc__netievent_t *ev0);
-
void
isc__nm_streamdns_cancelread(isc_nmhandle_t *handle);
NETIEVENT_SOCKET_REQ_RESULT_TYPE(sendcb);
-NETIEVENT_SOCKET_HANDLE_TYPE(streamdnscancel);
-
NETIEVENT_SOCKET_TLSCTX_TYPE(settlsctx);
NETIEVENT_SOCKET_TYPE(sockstop);
NETIEVENT_SOCKET_REQ_RESULT_DECL(sendcb);
-NETIEVENT_SOCKET_HANDLE_DECL(streamdnscancel);
-
NETIEVENT_SOCKET_TLSCTX_DECL(settlsctx);
NETIEVENT_SOCKET_DECL(sockstop);
isc__networker_t *worker = ievent->worker;
switch (ievent->type) {
- NETIEVENT_CASE(streamdnscancel);
-
NETIEVENT_CASE(settlsctx);
NETIEVENT_CASE(sockstop);
default:
isc__networker_unref(worker);
}
-NETIEVENT_SOCKET_HANDLE_DEF(streamdnscancel);
-
NETIEVENT_SOCKET_TLSCTX_DEF(settlsctx);
NETIEVENT_SOCKET_DEF(sockstop);
isc__nmsocket_stop(sock);
}
+static void
+streamdns_cancelread_cb(void *arg) {
+ isc_nmsocket_t *sock = arg;
+ REQUIRE(VALID_NMSOCK(sock));
+
+ streamdns_failed_read_cb(sock, ISC_R_EOF, false);
+ isc__nmsocket_detach(&sock);
+}
+
void
isc__nm_streamdns_cancelread(isc_nmhandle_t *handle) {
isc_nmsocket_t *sock = NULL;
sock = handle->sock;
- isc__netievent_streamdnscancel_t *ievent =
- isc__nm_get_netievent_streamdnscancel(sock->worker,
- handle->sock, handle);
- isc__nm_enqueue_ievent(sock->worker, (isc__netievent_t *)ievent);
-}
-
-void
-isc__nm_async_streamdnscancel(isc__networker_t *worker, isc__netievent_t *ev0) {
- isc__netievent_streamdnscancel_t *ievent =
- (isc__netievent_streamdnscancel_t *)ev0;
- isc_nmsocket_t *sock = ievent->sock;
-
- UNUSED(worker);
-
- REQUIRE(VALID_NMSOCK(sock));
- REQUIRE(sock->tid == isc_tid());
-
- streamdns_failed_read_cb(sock, ISC_R_EOF, false);
+ isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL });
+ isc_async_run(sock->worker->loop, streamdns_cancelread_cb, sock);
}
void