From f03128e66f214d6554ca80c98f48ccf047e3455a Mon Sep 17 00:00:00 2001 From: Olzhas Zhumabek Date: Fri, 14 Feb 2020 17:13:22 +0600 Subject: [PATCH 1/2] Move jpeg_finish_compress out of destr Moving the function out will ensure that no function that can error will be called inside a destructor, thus leaving no chance to get two exceptions in flight or finishing compression even if an error occured --- include/boost/gil/extension/io/jpeg/detail/write.hpp | 3 +++ include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/boost/gil/extension/io/jpeg/detail/write.hpp b/include/boost/gil/extension/io/jpeg/detail/write.hpp index 7e5b25db7d..f862136f2e 100644 --- a/include/boost/gil/extension/io/jpeg/detail/write.hpp +++ b/include/boost/gil/extension/io/jpeg/detail/write.hpp @@ -132,6 +132,9 @@ class writer< Device , 1 ); } + + jpeg_finish_compress ( this->get() ); + } }; diff --git a/include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp b/include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp index 99af56942e..51922392a1 100644 --- a/include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp +++ b/include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp @@ -113,7 +113,6 @@ struct writer_backend< Device ~writer_backend() { - jpeg_finish_compress ( get() ); jpeg_destroy_compress( get() ); } From aa9ce7496f3056ae6dc39c1a27ad3bdf38e69814 Mon Sep 17 00:00:00 2001 From: Olzhas Zhumabek Date: Sat, 15 Feb 2020 12:39:55 +0600 Subject: [PATCH 2/2] Comments and minor stylistical changes Added comments to explain why finish compress was moved out of destructor, and did stylistical changes --- include/boost/gil/extension/io/jpeg/detail/write.hpp | 1 - include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/boost/gil/extension/io/jpeg/detail/write.hpp b/include/boost/gil/extension/io/jpeg/detail/write.hpp index f862136f2e..10dfa465e9 100644 --- a/include/boost/gil/extension/io/jpeg/detail/write.hpp +++ b/include/boost/gil/extension/io/jpeg/detail/write.hpp @@ -134,7 +134,6 @@ class writer< Device } jpeg_finish_compress ( this->get() ); - } }; diff --git a/include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp b/include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp index 51922392a1..4d8c66cf88 100644 --- a/include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp +++ b/include/boost/gil/extension/io/jpeg/detail/writer_backend.hpp @@ -113,6 +113,9 @@ struct writer_backend< Device ~writer_backend() { + // JPEG compression object destruction does not signal errors, + // unlike jpeg_finish_compress called elsewhere, + // so there is no need for the setjmp bookmark here. jpeg_destroy_compress( get() ); }