]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
xxx wpk/transferwork
authorU-DESKTOP-5UMITBO\wpk <you@example.com>
Wed, 15 Jan 2020 11:16:03 +0000 (12:16 +0100)
committerU-DESKTOP-5UMITBO\wpk <you@example.com>
Wed, 15 Jan 2020 11:16:03 +0000 (12:16 +0100)
lib/isc/netmgr/netmgr-int.h
lib/isc/netmgr/tcp.c
lib/isc/netmgr/uv-compat.c

index 1930927a5e196efa2a1343b8be3c0b6497594d30..cf9478f171f71952cec9eb7af2ea9f0bcd2f0a14 100644 (file)
@@ -245,10 +245,11 @@ typedef isc__netievent_t isc__netievent_shutdown_t;
 typedef isc__netievent_t isc__netievent_stop_t;
 
 typedef union {
-               isc__netievent_t                  ni;
-               isc__netievent__socket_t          nis;
-               isc__netievent__socket_req_t      nisr;
-               isc__netievent_udpsend_t          nius;
+               isc__netievent_t                        ni;
+               isc__netievent__socket_t                nis;
+               isc__netievent__socket_req_t            nisr;
+               isc__netievent_udpsend_t                nius;
+               isc__netievent__socket_streaminfo_t     niss;
 } isc__netievent_storage_t;
 
 /*
index b884772e7b260fbdacd46c00dd7cf6939f19c8f3..84d312616b21ec8b9370de3a9ad3dbd0e457aaa9 100644 (file)
@@ -295,7 +295,8 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
 
                event = isc__nm_get_ievent(csock->mgr,
                                           netievent_tcpchildlisten);
-               isc_uv_export(&sock->uv_handle.stream, &event->streaminfo);
+               int r = isc_uv_export(&sock->uv_handle.stream, &event->streaminfo);
+               RUNTIME_CHECK(r == 0);
                event->sock = csock;
                if (csock->tid == isc_nm_tid()) {
                        isc__nm_async_tcpchildlisten(&sock->mgr->workers[i],
@@ -334,11 +335,17 @@ isc__nm_async_tcpchildlisten(isc__networker_t *worker, isc__netievent_t *ev0) {
 
        uv_tcp_init(&worker->loop, (uv_tcp_t *) &sock->uv_handle.tcp);
        uv_handle_set_data(&sock->uv_handle.handle, sock);
-       isc_uv_import(&sock->uv_handle.stream, &ievent->streaminfo);
+       r = isc_uv_import(&sock->uv_handle.stream, &ievent->streaminfo);
+       if (r != 0) {
+               isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
+                             ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
+                             "uv_import failed: %s",
+                             isc_result_totext(isc__nm_uverr2result(r)));
+               return;
+       }
 
        r = uv_listen((uv_stream_t *) &sock->uv_handle.tcp, sock->backlog,
                      tcp_connection_cb);
-
        if (r != 0) {
                isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
                              ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
@@ -768,6 +775,9 @@ tcp_connection_cb(uv_stream_t *server, int status) {
        isc_result_t result;
 
        UNUSED(status);
+       isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
+                     ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
+                     "TCP connection cb");
 
        result = accept_connection(ssock);
        if (result != ISC_R_SUCCESS) {
index 101c3c7201cc03a1af81cc6d64774b287fcca0b9..b7b22a45de423bc268891b7008d282d69279e070 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include <unistd.h>
+#include <isc/log.h>
 #include "uv-compat.h"
 
 /*
@@ -35,21 +36,42 @@ typedef struct {
 int
 uv__tcp_xfer_import(uv_tcp_t *tcp, uv__ipc_socket_xfer_type_t xfer_type,
                    uv__ipc_socket_xfer_info_t *xfer_info);
+
 int
-uv__tcp_xfer_export(uv_tcp_t *handle, int pid,
-                   uv__ipc_socket_xfer_info_t *xfer_info);
+uv__tcp_xfer_export(uv_tcp_t* handle,
+                    int target_pid,
+                    uv__ipc_socket_xfer_type_t* xfer_type,
+                    uv__ipc_socket_xfer_info_t* xfer_info);
 
 int
 isc_uv_export(uv_stream_t *stream, isc_uv_stream_info_t *info) {
+       uv__ipc_socket_xfer_info_t xfer_info;
+       uv__ipc_socket_xfer_type_t xfer_type;
+       isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
+                     ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
+                     "uv_export sizeofs 1 %d 2 %d", sizeof(isc_uv_stream_info_t), sizeof(uv__ipc_socket_xfer_info_t));
        if (stream->type != UV_TCP) {
+               isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
+                             ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
+                             "uv_export failed: stream not tcp");
                return (-1);
        }
-       if (uv__tcp_xfer_export((uv_tcp_t *) stream, GetCurrentProcessId(),
-                               &info->socket_info) == -1) {
-               return (-1);
+       int r = uv__tcp_xfer_export((uv_tcp_t *) stream, GetCurrentProcessId(), &xfer_type, &xfer_info);
+       if (r != 0) {
+               isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
+                             ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
+                             "uv_export failed: result %d", r);
+               return (r);
+       }
+       if (xfer_info.delayed_error != 0) {
+               isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
+                             ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
+                             "uv_export failed: delayed error %d", xfer_info.delayed_error);
+               return (xfer_info.delayed_error);
        }
-
        info->type = UV_TCP;
+       info->socket_info = xfer_info.socket_info;
+       return (0);
 }
 
 int
@@ -59,6 +81,7 @@ isc_uv_import(uv_stream_t *stream, isc_uv_stream_info_t *info) {
        if (stream->type != UV_TCP || info->type != UV_TCP) {
                return (-1);
        }
+       xfer_info.delayed_error = 0;
        xfer_info.socket_info = info->socket_info;
 
        return (uv__tcp_xfer_import((uv_tcp_t *) stream,