diff options
Diffstat (limited to 'src/networking.c')
-rw-r--r-- | src/networking.c | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/src/networking.c b/src/networking.c index e624dd8f9..da611675c 100644 --- a/src/networking.c +++ b/src/networking.c @@ -1104,6 +1104,7 @@ void acceptTcpHandler(aeEventLoop *el, int fd, void *privdata, int mask) { "Accepting client connection: %s", server.neterr); return; } + anetCloexec(cfd); serverLog(LL_VERBOSE,"Accepted %s:%d", cip, cport); acceptCommonHandler(connCreateAcceptedSocket(cfd),0,cip); } @@ -1124,6 +1125,7 @@ void acceptTLSHandler(aeEventLoop *el, int fd, void *privdata, int mask) { "Accepting client connection: %s", server.neterr); return; } + anetCloexec(cfd); serverLog(LL_VERBOSE,"Accepted %s:%d", cip, cport); acceptCommonHandler(connCreateAcceptedTLS(cfd, server.tls_auth_clients),0,cip); } @@ -1143,6 +1145,7 @@ void acceptUnixHandler(aeEventLoop *el, int fd, void *privdata, int mask) { "Accepting client connection: %s", server.neterr); return; } + anetCloexec(cfd); serverLog(LL_VERBOSE,"Accepted connection to %s", server.unixsocket); acceptCommonHandler(connCreateAcceptedSocket(cfd),CLIENT_UNIX_SOCKET,NULL); } @@ -1707,7 +1710,7 @@ int processInlineBuffer(client *c) { } /* Handle the \r\n case. */ - if (newline && newline != c->querybuf+c->qb_pos && *(newline-1) == '\r') + if (newline != c->querybuf+c->qb_pos && *(newline-1) == '\r') newline--, linefeed_chars++; /* Split the input buffer up to the \r\n */ @@ -2436,8 +2439,10 @@ void clientCommand(client *c) { " Kill connection made from <ip:port>.", "KILL <option> <value> [<option> <value> [...]]", " Kill connections. Options are:", -" * ADDR <ip:port>", -" Kill connection made from <ip:port>", +" * ADDR (<ip:port>|<unixsocket>:0)", +" Kill connections made from the specified address", +" * LADDR (<ip:port>|<unixsocket>:0)", +" Kill connections made to specified local address", " * TYPE (normal|master|replica|pubsub)", " Kill connections by type.", " * USER <username>", @@ -2675,7 +2680,7 @@ NULL c->argc == 4)) { /* CLIENT PAUSE TIMEOUT [WRITE|ALL] */ - long long duration; + mstime_t end; int type = CLIENT_PAUSE_ALL; if (c->argc == 4) { if (!strcasecmp(c->argv[3]->ptr,"write")) { @@ -2689,9 +2694,9 @@ NULL } } - if (getTimeoutFromObjectOrReply(c,c->argv[2],&duration, + if (getTimeoutFromObjectOrReply(c,c->argv[2],&end, UNIT_MILLISECONDS) != C_OK) return; - pauseClients(duration, type); + pauseClients(end, type); addReply(c,shared.ok); } else if (!strcasecmp(c->argv[1]->ptr,"tracking") && c->argc >= 3) { /* CLIENT TRACKING (on|off) [REDIRECT <id>] [BCAST] [PREFIX first] @@ -3355,8 +3360,6 @@ void processEventsWhileBlocked(void) { * Threaded I/O * ========================================================================== */ -int tio_debug = 0; - #define IO_THREADS_MAX_NUM 128 #define IO_THREADS_OP_READ 0 #define IO_THREADS_OP_WRITE 1 @@ -3407,8 +3410,6 @@ void *IOThreadMain(void *myid) { serverAssert(getIOPendingCount(id) != 0); - if (tio_debug) printf("[%ld] %d to handle\n", id, (int)listLength(io_threads_list[id])); - /* Process: note that the main thread will never touch our list * before we drop the pending count to 0. */ listIter li; @@ -3426,8 +3427,6 @@ void *IOThreadMain(void *myid) { } listEmpty(io_threads_list[id]); setIOPendingCount(id, 0); - - if (tio_debug) printf("[%ld] Done\n", id); } } @@ -3482,8 +3481,6 @@ void killIOThreads(void) { } void startThreadedIO(void) { - if (tio_debug) { printf("S"); fflush(stdout); } - if (tio_debug) printf("--- STARTING THREADED IO ---\n"); serverAssert(server.io_threads_active == 0); for (int j = 1; j < server.io_threads_num; j++) pthread_mutex_unlock(&io_threads_mutex[j]); @@ -3494,10 +3491,6 @@ void stopThreadedIO(void) { /* We may have still clients with pending reads when this function * is called: handle them before stopping the threads. */ handleClientsWithPendingReadsUsingThreads(); - if (tio_debug) { printf("E"); fflush(stdout); } - if (tio_debug) printf("--- STOPPING THREADED IO [R%d] [W%d] ---\n", - (int) listLength(server.clients_pending_read), - (int) listLength(server.clients_pending_write)); serverAssert(server.io_threads_active == 1); for (int j = 1; j < server.io_threads_num; j++) pthread_mutex_lock(&io_threads_mutex[j]); @@ -3540,8 +3533,6 @@ int handleClientsWithPendingWritesUsingThreads(void) { /* Start threads if needed. */ if (!server.io_threads_active) startThreadedIO(); - if (tio_debug) printf("%d TOTAL WRITE pending clients\n", processed); - /* Distribute the clients across N different lists. */ listIter li; listNode *ln; @@ -3586,7 +3577,6 @@ int handleClientsWithPendingWritesUsingThreads(void) { pending += getIOPendingCount(j); if (pending == 0) break; } - if (tio_debug) printf("I/O WRITE All threads finshed\n"); /* Run the list of clients again to install the write handler where * needed. */ @@ -3639,8 +3629,6 @@ int handleClientsWithPendingReadsUsingThreads(void) { int processed = listLength(server.clients_pending_read); if (processed == 0) return 0; - if (tio_debug) printf("%d TOTAL READ pending clients\n", processed); - /* Distribute the clients across N different lists. */ listIter li; listNode *ln; @@ -3676,7 +3664,6 @@ int handleClientsWithPendingReadsUsingThreads(void) { pending += getIOPendingCount(j); if (pending == 0) break; } - if (tio_debug) printf("I/O READ All threads finshed\n"); /* Run the list of clients again to process the new buffers. */ while(listLength(server.clients_pending_read)) { |