You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sw...@apache.org on 2023/12/25 04:23:43 UTC

(logging-log4cxx) 01/01: Prevent potential deadlock on shutdown when using AsyncAppender

This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch asynch_appender_deadlock
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git

commit 6c45592ad1e3976fb2da72e06f03ea91e694447c
Author: Stephen Webb <sw...@gmail.com>
AuthorDate: Mon Dec 25 15:23:22 2023 +1100

    Prevent potential deadlock on shutdown when using AsyncAppender
---
 src/main/cpp/asyncappender.cpp | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index 07083474..c8389840 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -502,13 +502,19 @@ void AsyncAppender::dispatch()
 			}
 			catch (std::exception& ex)
 			{
-				priv->errorHandler->error(LOG4CXX_STR("async dispatcher"), ex, 0, *iter);
-				isActive = false;
+				if (isActive)
+				{
+					priv->errorHandler->error(LOG4CXX_STR("async dispatcher"), ex, 0, *iter);
+					isActive = false;
+				}
 			}
 			catch (...)
 			{
-				priv->errorHandler->error(LOG4CXX_STR("async dispatcher"));
-				isActive = false;
+				if (isActive)
+				{
+					priv->errorHandler->error(LOG4CXX_STR("async dispatcher"));
+					isActive = false;
+				}
 			}
 		}
 	}