From 47e5b12eb8106b3a8d2a4bc85a54d45a063428ed Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Wed, 29 Apr 2015 18:25:04 +0300 Subject: [PATCH] Added a function that frees the skygw_file_t memory but doesn't close it. --- log_manager/log_manager.cc | 5 ++++- utils/skygw_utils.cc | 28 ++++++++++++++++++++++++++++ utils/skygw_utils.h | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/log_manager/log_manager.cc b/log_manager/log_manager.cc index acce7326c..19d644900 100644 --- a/log_manager/log_manager.cc +++ b/log_manager/log_manager.cc @@ -2741,7 +2741,10 @@ static void filewriter_done( for (i=LOGFILE_FIRST; i<=LOGFILE_LAST; i++) { id = (logfile_id_t)i; - skygw_file_close(fw->fwr_file[id], true); + if(use_stdout) + skygw_file_close_stdout(fw->fwr_file[id], true); + else + skygw_file_close(fw->fwr_file[id], true); } fw->fwr_state = DONE; case DONE: diff --git a/utils/skygw_utils.cc b/utils/skygw_utils.cc index 101393c1b..a2f37fc01 100644 --- a/utils/skygw_utils.cc +++ b/utils/skygw_utils.cc @@ -1989,6 +1989,34 @@ return_file: return file; } + +void skygw_file_close_stdout( + skygw_file_t* file, + bool shutdown) +{ + int fd; + int err; + + if (file != NULL) + { + CHK_FILE(file); + + if (!file_write_footer(file, shutdown)) + { + fprintf(stderr, + "* Writing footer to log file %s failed.\n", + file->sf_fname); + perror("Write fike footer\n"); + } + fd = fileno(file->sf_file); + fsync(fd); + + ss_dfprintf(stderr, "Closed %s\n", file->sf_fname); + free(file->sf_fname); + free(file); + } +} + void skygw_file_close( skygw_file_t* file, bool shutdown) diff --git a/utils/skygw_utils.h b/utils/skygw_utils.h index b4cd3cb45..9370c91cd 100644 --- a/utils/skygw_utils.h +++ b/utils/skygw_utils.h @@ -219,6 +219,7 @@ EXTERN_C_BLOCK_END skygw_file_t* skygw_file_init(char* fname, char* symlinkname); skygw_file_t* skygw_file_init_stdout(char* fname, char* symlinkname); void skygw_file_close(skygw_file_t* file, bool shutdown); +void skygw_file_close_stdout(skygw_file_t*, bool); int skygw_file_write( skygw_file_t* file, void* data,