This commit is contained in:
Witold Kręcicki
2018-11-24 18:06:50 +00:00
parent e67418b47f
commit baa2fe97a0
2 changed files with 16 additions and 5 deletions
+6
View File
@@ -1038,6 +1038,12 @@ isc_socketmgr_renderjson(isc_socketmgr_t *mgr, json_object *stats);
typedef isc_result_t
(*isc_socketmgrcreatefunc_t)(isc_mem_t *mctx, isc_socketmgr_t **managerp);
typedef isc_result_t
(*isc_socketevent_factory_t)(void* arg, isc_socketevent_t **ret);
isc_result_t
isc_socket_udpsubscribe(isc_socket_t *sock, isc_socketevent_factory_t evf, void* arg);
ISC_LANG_ENDDECLS
#endif /* ISC_SOCKET_H */
+10 -5
View File
@@ -3136,6 +3136,15 @@ internal_recv(isc__socket_t *sock) {
LOCK(&sock->lock);
dev = sock->recv_event;
if (dev == NULL && sock->recv_subscriber != NULL) {
result = sock->recv_subscriber(sock->recv_subscriber_arg,
&sock->recv_event);
if (result == ISC_R_QUOTA) {
// Unsubscribe
sock->recv_subscriber = NULL;
}
}
dev = sock->recv_event;
if (dev == NULL) {
goto finish;
}
@@ -3144,10 +3153,6 @@ internal_recv(isc__socket_t *sock) {
isc_msgcat, ISC_MSGSET_SOCKET, ISC_MSG_INTERNALRECV,
"internal_recv: event %p -> task %p", dev, dev->ev_sender);
/*
* Try to do as much I/O as possible on this socket. There are no
* limits here, currently.
*/
result = doio_recv(sock, dev);
if (result == DOIO_EOF) {
dev->result = ISC_R_EOF;
@@ -3157,7 +3162,7 @@ internal_recv(isc__socket_t *sock) {
}
finish:
if (sock->recv_event == NULL) {
if (sock->recv_event == NULL && sock->recv_subscriber == NULL) {
unwatch_fd(&sock->manager->threads[sock->threadid], sock->fd,
SELECT_POKE_READ);
}