From: Vsevolod Stakhov Date: Mon, 19 Oct 2020 11:36:10 +0000 (+0100) Subject: [Minor] Switch to buffered IO + fix memory leak on reload X-Git-Tag: 2.7~222 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5a9e00e56e3bacefbfa52d9e099e195069fd50fb;p=thirdparty%2Frspamd.git [Minor] Switch to buffered IO + fix memory leak on reload --- diff --git a/src/libserver/dynamic_cfg.c b/src/libserver/dynamic_cfg.c index e3ec391071..ab59b38dc4 100644 --- a/src/libserver/dynamic_cfg.c +++ b/src/libserver/dynamic_cfg.c @@ -340,10 +340,17 @@ dump_dynamic_config (struct rspamd_config *cfg) return FALSE; } + struct ucl_emitter_functions *emitter_functions; + FILE *fp; + + fp = fdopen (fd, "w"); + emitter_functions = ucl_object_emit_file_funcs (fp); + if (!ucl_object_emit_full (cfg->current_dynamic_conf, UCL_EMIT_JSON, - ucl_object_emit_fd_funcs (fd), NULL)) { + emitter_functions, NULL)) { msg_err ("cannot emit ucl object: %s", strerror (errno)); - close (fd); + ucl_object_emit_funcs_free (emitter_functions); + fclose (fp); return FALSE; } @@ -352,8 +359,10 @@ dump_dynamic_config (struct rspamd_config *cfg) /* Rename old config */ if (rename (pathbuf, cfg->dynamic_conf) == -1) { msg_err ("rename error: %s", strerror (errno)); - close (fd); + fclose (fp); + ucl_object_emit_funcs_free (emitter_functions); unlink (pathbuf); + return FALSE; } /* Set permissions */ @@ -362,7 +371,9 @@ dump_dynamic_config (struct rspamd_config *cfg) msg_warn ("chmod failed: %s", strerror (errno)); } - close (fd); + fclose (fp); + ucl_object_emit_funcs_free (emitter_functions); + return TRUE; }