From 4807eeef2184ce0eb66fbb38c49664df56d548fc Mon Sep 17 00:00:00 2001 From: Wen Hui Date: Mon, 19 Oct 2020 08:32:18 -0400 Subject: [PATCH] fix double fclose in aofrewrite (#7919) minor fix for a bug which happen on error handling code and doesn't look like it could have caused any real harm (fd number wouldn't have been reused yet) (cherry picked from commit ee8cb472a781e42ec7b10c6a88d258a3399ca34f) --- src/aof.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/aof.c b/src/aof.c index 67c06c44f..6e2ef5ca0 100644 --- a/src/aof.c +++ b/src/aof.c @@ -1426,7 +1426,7 @@ werr: * are inserted using a single command. */ int rewriteAppendOnlyFile(char *filename) { rio aof; - FILE *fp; + FILE *fp = NULL; char tmpfile[256]; char byte; @@ -1503,9 +1503,10 @@ int rewriteAppendOnlyFile(char *filename) { goto werr; /* Make sure data will not remain on the OS's output buffers */ - if (fflush(fp) == EOF) goto werr; - if (fsync(fileno(fp)) == -1) goto werr; - if (fclose(fp) == EOF) goto werr; + if (fflush(fp)) goto werr; + if (fsync(fileno(fp))) goto werr; + if (fclose(fp)) { fp = NULL; goto werr; } + fp = NULL; /* Use RENAME to make sure the DB file is changed atomically only * if the generate DB file is ok. */ @@ -1521,7 +1522,7 @@ int rewriteAppendOnlyFile(char *filename) { werr: serverLog(LL_WARNING,"Write error writing append only file on disk: %s", strerror(errno)); - fclose(fp); + if (fp) fclose(fp); unlink(tmpfile); stopSaving(0); return C_ERR;