Avoid double close on repl_transfer_fd (#1349)
The code is ok before 2de544cfcc6d1aa7cf6d0c75a6116f7fc27b6fd6, but now we will set server.repl_transfer_fd right after dfd was initiated, and in here we have a double close error since dfd and server.repl_transfer_fd are the same fd. Also move the declaration of dfd/maxtries to a small scope to avoid the confusion since they are only used in this code. Signed-off-by: Binbin <binloveplay1314@qq.com>
This commit is contained in:
parent
d6e9ff1f85
commit
94d7d5ebcd
@ -3332,7 +3332,6 @@ error:
|
|||||||
* establish a connection with the primary. */
|
* establish a connection with the primary. */
|
||||||
void syncWithPrimary(connection *conn) {
|
void syncWithPrimary(connection *conn) {
|
||||||
char tmpfile[256], *err = NULL;
|
char tmpfile[256], *err = NULL;
|
||||||
int dfd = -1, maxtries = 5;
|
|
||||||
int psync_result;
|
int psync_result;
|
||||||
|
|
||||||
/* If this event fired after the user turned the instance into a primary
|
/* If this event fired after the user turned the instance into a primary
|
||||||
@ -3601,6 +3600,7 @@ void syncWithPrimary(connection *conn) {
|
|||||||
|
|
||||||
/* Prepare a suitable temp file for bulk transfer */
|
/* Prepare a suitable temp file for bulk transfer */
|
||||||
if (!useDisklessLoad()) {
|
if (!useDisklessLoad()) {
|
||||||
|
int dfd = -1, maxtries = 5;
|
||||||
while (maxtries--) {
|
while (maxtries--) {
|
||||||
snprintf(tmpfile, 256, "temp-%d.%ld.rdb", (int)server.unixtime, (long int)getpid());
|
snprintf(tmpfile, 256, "temp-%d.%ld.rdb", (int)server.unixtime, (long int)getpid());
|
||||||
dfd = open(tmpfile, O_CREAT | O_WRONLY | O_EXCL, 0644);
|
dfd = open(tmpfile, O_CREAT | O_WRONLY | O_EXCL, 0644);
|
||||||
@ -3657,7 +3657,6 @@ no_response_error: /* Handle receiveSynchronousResponse() error when primary has
|
|||||||
/* Fall through to regular error handling */
|
/* Fall through to regular error handling */
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (dfd != -1) close(dfd);
|
|
||||||
connClose(conn);
|
connClose(conn);
|
||||||
server.repl_transfer_s = NULL;
|
server.repl_transfer_s = NULL;
|
||||||
if (server.repl_rdb_transfer_s) {
|
if (server.repl_rdb_transfer_s) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user