# HG changeset patch # User jbe # Date 1428791588 -7200 # Node ID 61a2f55b353878124cde9ff82e23117b1ca2ab9e # Parent 20e0d4f51381f09a8452ad58cb06c182cd9da9af Do not announce socket/listener type when communicating with the child process (unnecessary because pointer to listener struct is passed) diff -r 20e0d4f51381 -r 61a2f55b3538 moonbridge.c --- a/moonbridge.c Sat Apr 11 00:20:33 2015 +0200 +++ b/moonbridge.c Sun Apr 12 00:33:08 2015 +0200 @@ -97,12 +97,10 @@ #define MOONBR_MAXSTRERRORLEN 80 /* Status bytes exchanged between master and child processes */ -#define MOONBR_SOCKETTYPE_INTERVAL 'I' -#define MOONBR_SOCKETTYPE_LOCAL 'L' -#define MOONBR_SOCKETTYPE_NETWORK 'N' -#define MOONBR_STATUS_IDLE '1' -#define MOONBR_COMMAND_TERMINATE '2' -#define MOONBR_STATUS_GOODBYE '3' +#define MOONBR_STATUS_IDLE 'I' +#define MOONBR_COMMAND_CONNECT 'C' +#define MOONBR_COMMAND_TERMINATE 'T' +#define MOONBR_STATUS_GOODBYE 'B' /* Constant file descriptors */ #define MOONBR_FD_STDERR 2 @@ -832,15 +830,18 @@ } moonbr_child_receive_control_message(MOONBR_FD_CONTROL, &controlmsg, &fd); if (!( - (controlmsg == MOONBR_COMMAND_TERMINATE && fd == -1) || - (controlmsg == MOONBR_SOCKETTYPE_INTERVAL && fd == -1) || - (controlmsg == MOONBR_SOCKETTYPE_LOCAL && fd != -1) || - (controlmsg == MOONBR_SOCKETTYPE_NETWORK && fd != -1) + (controlmsg == MOONBR_COMMAND_TERMINATE && fd == -1) || + (controlmsg == MOONBR_COMMAND_CONNECT) )) { moonbr_child_log_fatal("Received illegal control message from parent process"); } if (controlmsg == MOONBR_COMMAND_TERMINATE) break; listener = moonbr_child_receive_pointer(MOONBR_FD_CONTROL); + if (listener->proto == MOONBR_PROTO_INTERVAL && fd >= 0) { + moonbr_child_log_fatal("Received unexpected file descriptor from parent process"); + } else if (listener->proto != MOONBR_PROTO_INTERVAL && fd < 0) { + moonbr_child_log_fatal("Missing file descriptor from parent process"); + } if (fd >= 0) moonbr_io_pushhandle(L, fd); lua_rawgetp(L, LUA_REGISTRYINDEX, moonbr_luakey_connect_func(pool)); if (fd < 0) { @@ -1468,7 +1469,7 @@ moonbr_log(LOG_INFO, "Dispatching interval timer \"%s\" of pool #%i to PID %i", listener->proto_specific.interval.name, listener->pool->poolnum, (int)worker->pid); } worker->restart_interval_listener = listener; - moonbr_send_control_message(worker, MOONBR_SOCKETTYPE_INTERVAL, -1, listener); + moonbr_send_control_message(worker, MOONBR_COMMAND_CONNECT, -1, listener); /* do not push listener to queue of idle listeners yet */ break; case MOONBR_PROTO_LOCAL: @@ -1497,7 +1498,7 @@ if (moonbr_stat) { moonbr_log(LOG_INFO, "Dispatching local socket connection on path \"%s\" for pool #%i to PID %i", listener->proto_specific.local.path, listener->pool->poolnum, (int)worker->pid); } - moonbr_send_control_message(worker, MOONBR_SOCKETTYPE_LOCAL, peerfd, listener); + moonbr_send_control_message(worker, MOONBR_COMMAND_CONNECT, peerfd, listener); if (close(peerfd) && errno != EINTR) { moonbr_log(LOG_ERR, "Could not close incoming socket connection in parent process: %s", strerror(errno)); moonbr_terminate_error(); @@ -1532,7 +1533,7 @@ if (moonbr_stat) { moonbr_log(LOG_INFO, "Dispatching TCP/IPv6 connection for pool #%i on port %i to PID %i", listener->pool->poolnum, listener->proto_specific.tcp.port, (int)worker->pid); } - moonbr_send_control_message(worker, MOONBR_SOCKETTYPE_NETWORK, peerfd, listener); + moonbr_send_control_message(worker, MOONBR_COMMAND_CONNECT, peerfd, listener); if (close(peerfd) && errno != EINTR) { moonbr_log(LOG_ERR, "Could not close incoming socket connection in parent process: %s", strerror(errno)); moonbr_terminate_error(); @@ -1567,7 +1568,7 @@ if (moonbr_stat) { moonbr_log(LOG_INFO, "Dispatching TCP/IPv4 connection for pool #%i on port %i to PID %i", listener->pool->poolnum, listener->proto_specific.tcp.port, (int)worker->pid); } - moonbr_send_control_message(worker, MOONBR_SOCKETTYPE_NETWORK, peerfd, listener); + moonbr_send_control_message(worker, MOONBR_COMMAND_CONNECT, peerfd, listener); if (close(peerfd) && errno != EINTR) { moonbr_log(LOG_ERR, "Could not close incoming socket connection in parent process: %s", strerror(errno)); moonbr_terminate_error();