Package: log4cxx
Severity: normal

Hi,

the bug reported in #578649 is most likeley due to Jira issue

https://issues.apache.org/jira/browse/LOGCXX-322

I am seeing this problem here too, and a preliminary patch
solving this for me was published here

http://mail-archives.apache.org/mod_mbox/logging-log4cxx-dev/200901.mbox/%3c1232120052.30824.62.ca...@bjhlinux%3e

Attaching a ready-to-plug-in dpatch patch file.

Please consider adding this patch to the Debian package.

Thx,

Stephan

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-bpo.5-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
#! /bin/sh /usr/share/dpatch/dpatch-run
## 130-bugfix-LOGCXX-322.dpatch by Stephan Sürken <stephan.suer...@1und1.de>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: This is from a patch for Jira issue
## DP:   https://issues.apache.org/jira/browse/LOGCXX-322
## DP: published in the mailing list thread
## DP:   http://mail-archives.apache.org/mod_mbox/logging-log4cxx-dev/200901.mbox/%3c1232120052.30824.62.ca...@bjhlinux%3e
## DP: It's not yet (2010 Jul) accepted into svn, but it does fixes possible serious segfaults on program exit.

@DPATCH@
diff -urNad log4cxx-0.10.0~/src/main/cpp/aprinitializer.cpp log4cxx-0.10.0/src/main/cpp/aprinitializer.cpp
--- log4cxx-0.10.0~/src/main/cpp/aprinitializer.cpp	2008-04-01 00:34:09.000000000 +0200
+++ log4cxx-0.10.0/src/main/cpp/aprinitializer.cpp	2010-07-06 16:04:28.000000000 +0200
@@ -42,7 +42,7 @@
 }
 
 APRInitializer::~APRInitializer() {
-    apr_terminate();
+    //apr_terminate();
     isDestructed = true;
 }
 
diff -urNad log4cxx-0.10.0~/src/main/cpp/level.cpp log4cxx-0.10.0/src/main/cpp/level.cpp
--- log4cxx-0.10.0~/src/main/cpp/level.cpp	2008-04-01 00:34:09.000000000 +0200
+++ log4cxx-0.10.0/src/main/cpp/level.cpp	2010-07-06 16:04:34.000000000 +0200
@@ -30,44 +30,44 @@
 IMPLEMENT_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(Level, LevelClass)
 
 LevelPtr Level::getOff() {
-   static LevelPtr level(new Level(Level::OFF_INT, LOG4CXX_STR("OFF"), 0));
-   return level;
+   static LevelPtr *level = new LevelPtr(new Level(Level::OFF_INT, LOG4CXX_STR("OFF"), 0));
+   return *level;
 }
 
 LevelPtr Level::getFatal() {
-   static LevelPtr level(new Level(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0));
-   return level;
+   static LevelPtr *level = new LevelPtr((new Level(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0)));
+   return *level;
 }
 
 LevelPtr Level::getError() {
-   static LevelPtr level(new Level(Level::ERROR_INT, LOG4CXX_STR("ERROR"), 3));
-   return level;
+   static LevelPtr *level = new LevelPtr((new Level(Level::ERROR_INT, LOG4CXX_STR("ERROR"), 3)));
+   return *level;
 }
 
 LevelPtr Level::getWarn() {
-   static LevelPtr level(new Level(Level::WARN_INT, LOG4CXX_STR("WARN"), 4));
-   return level;
+   static LevelPtr *level = new LevelPtr((new Level(Level::WARN_INT, LOG4CXX_STR("WARN"), 4)));
+   return *level;
 }
 
 LevelPtr Level::getInfo() {
-   static LevelPtr level(new Level(Level::INFO_INT, LOG4CXX_STR("INFO"), 6));
-   return level;
+   static LevelPtr *level = new LevelPtr((new Level(Level::INFO_INT, LOG4CXX_STR("INFO"), 6)));
+   return *level;
 }
 
 LevelPtr Level::getDebug() {
-   static LevelPtr level(new Level(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7));
-   return level;
+   static LevelPtr *level = new LevelPtr((new Level(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7)));
+   return *level;
 }
 
 LevelPtr Level::getTrace() {
-   static LevelPtr level(new Level(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7));
-   return level;
+   static LevelPtr *level = new LevelPtr((new Level(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7)));
+   return *level;
 }
 
 
 LevelPtr Level::getAll() {
-   static LevelPtr level(new Level(Level::ALL_INT, LOG4CXX_STR("ALL"), 7));
-   return level;
+   static LevelPtr *level = new LevelPtr((new Level(Level::ALL_INT, LOG4CXX_STR("ALL"), 7)));
+   return *level;
 }
 
 
diff -urNad log4cxx-0.10.0~/src/main/cpp/logmanager.cpp log4cxx-0.10.0/src/main/cpp/logmanager.cpp
--- log4cxx-0.10.0~/src/main/cpp/logmanager.cpp	2008-04-01 00:34:09.000000000 +0200
+++ log4cxx-0.10.0/src/main/cpp/logmanager.cpp	2010-07-06 16:04:21.000000000 +0200
@@ -57,7 +57,8 @@
    //     call to initialize APR and trigger "start" of logging clock
    //
    APRInitializer::initialize();
-   static spi::RepositorySelectorPtr selector;
+   static spi::RepositorySelectorPtr * pselector = new spi::RepositorySelectorPtr;
+   static spi::RepositorySelectorPtr & selector = * pselector;
    return selector;
 }
 

Reply via email to