From a2d00ef67fdf85913e49f8eb8c902a64a2431048 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 12 Jun 2024 19:22:25 +0800 Subject: [PATCH] socket: fix potential double close `_fd` should be reset if `ResetFileDescriptor` is going to return -1, otherwise the fd will be closed in callers like `CheckConnectedAndKeepWrite` or `Server::StartInernal` and socket lifecycle methods like `BeforeRecycled` or `WaitAndReset`. --- src/brpc/socket.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/brpc/socket.cpp b/src/brpc/socket.cpp index 85aa150739..a7a94642c3 100644 --- a/src/brpc/socket.cpp +++ b/src/brpc/socket.cpp @@ -590,6 +590,7 @@ int Socket::ResetFileDescriptor(int fd) { // Make the fd non-blocking. if (butil::make_non_blocking(fd) != 0) { PLOG(ERROR) << "Fail to set fd=" << fd << " to non-blocking"; + _fd.store(-1, butil::memory_order_release); return -1; } // turn off nagling.