diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-02-25 10:26:26 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-02-25 10:29:31 +0300 |
commit | d94a3996a4e9436896873bd1141c7cea9ab6908e (patch) | |
tree | 6e5e79c36ec64e68ff012a09821f1b13f6c7ed9d | |
parent | ae3263e52532997a2149dfff67cec2dbcc9e465a (diff) |
Fix memory leak saving images
-rw-r--r-- | source/blender/editors/space_image/image_ops.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index c56fac9f47c..d6355bb88fe 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -2033,6 +2033,8 @@ static int image_save_options_init(Main *bmain, /* color management */ BKE_color_managed_display_settings_copy(&opts->im_format.display_settings, &scene->display_settings); + + BKE_color_managed_view_settings_free(&opts->im_format.view_settings); BKE_color_managed_view_settings_copy(&opts->im_format.view_settings, &scene->view_settings); } @@ -2357,6 +2359,7 @@ static int image_save_exec(bContext *C, wmOperator *op) ImageUser *iuser = image_user_from_context(C); Scene *scene = CTX_data_scene(C); ImageSaveOptions opts; + bool ok = false; if (BKE_image_has_packedfile(image)) { /* Save packed files to memory. */ @@ -2374,15 +2377,22 @@ static int image_save_exec(bContext *C, wmOperator *op) if (save_image_op(bmain, image, iuser, op, &opts)) { /* report since this can be called from key-shortcuts */ BKE_reportf(op->reports, RPT_INFO, "Saved Image '%s'", opts.filepath); + ok = true; } } else { BKE_reportf( op->reports, RPT_ERROR, "Cannot save image, path '%s' is not writable", opts.filepath); - return OPERATOR_CANCELLED; } - return OPERATOR_FINISHED; + BKE_color_managed_view_settings_free(&opts.im_format.view_settings); + + if (ok) { + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } } static int image_save_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) |