You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by jo...@apache.org on 2014/02/17 20:50:37 UTC

svn commit: r1569099 - in /incubator/log4cxx/trunk/src/main: cpp/aprinitializer.cpp cpp/domconfigurator.cpp cpp/propertyconfigurator.cpp include/log4cxx/helpers/aprinitializer.h

Author: joseph
Date: Mon Feb 17 19:50:37 2014
New Revision: 1569099

URL: http://svn.apache.org/r1569099
Log:
LOGCXX-390
LOGCXX-342

Modified:
    incubator/log4cxx/trunk/src/main/cpp/aprinitializer.cpp
    incubator/log4cxx/trunk/src/main/cpp/domconfigurator.cpp
    incubator/log4cxx/trunk/src/main/cpp/propertyconfigurator.cpp
    incubator/log4cxx/trunk/src/main/include/log4cxx/helpers/aprinitializer.h

Modified: incubator/log4cxx/trunk/src/main/cpp/aprinitializer.cpp
URL: http://svn.apache.org/viewvc/incubator/log4cxx/trunk/src/main/cpp/aprinitializer.cpp?rev=1569099&r1=1569098&r2=1569099&view=diff
==============================================================================
--- incubator/log4cxx/trunk/src/main/cpp/aprinitializer.cpp (original)
+++ incubator/log4cxx/trunk/src/main/cpp/aprinitializer.cpp Mon Feb 17 19:50:37 2014
@@ -59,7 +59,7 @@ APRInitializer::~APRInitializer() {
         synchronized sync(mutex);
         apr_threadkey_private_delete(tlsKey);
 #endif
-        for(std::vector<FileWatchdog*>::iterator iter = watchdogs.begin();
+        for(std::list<FileWatchdog*>::iterator iter = watchdogs.begin();
             iter != watchdogs.end();
             iter++) {
             delete *iter;
@@ -95,3 +95,19 @@ void APRInitializer::registerCleanup(Fil
     instance.watchdogs.push_back(watchdog);
 }
 
+void APRInitializer::unregisterCleanup(FileWatchdog* watchdog) {
+    APRInitializer& instance(getInstance());
+#if APR_HAS_THREADS
+    synchronized sync(instance.mutex);
+#endif
+    for(std::list<FileWatchdog*>::iterator iter = instance.watchdogs.begin();
+        iter != instance.watchdogs.end();
+        iter++) {
+		if(*iter == watchdog)
+		{
+			instance.watchdogs.erase(iter);
+			return;
+		}
+    }
+}
+

Modified: incubator/log4cxx/trunk/src/main/cpp/domconfigurator.cpp
URL: http://svn.apache.org/viewvc/incubator/log4cxx/trunk/src/main/cpp/domconfigurator.cpp?rev=1569099&r1=1569098&r2=1569099&view=diff
==============================================================================
--- incubator/log4cxx/trunk/src/main/cpp/domconfigurator.cpp (original)
+++ incubator/log4cxx/trunk/src/main/cpp/domconfigurator.cpp Mon Feb 17 19:50:37 2014
@@ -821,7 +821,11 @@ void DOMConfigurator::configureAndWatch(
 {
         File file(filename);
 #if APR_HAS_THREADS
-		if( xdog ) delete xdog;
+		if( xdog )
+		{
+			APRInitializer::unregisterCleanup(xdog);
+			delete xdog;
+		}
         xdog = new XMLWatchdog(file);
         APRInitializer::registerCleanup(xdog);
         xdog->setDelay(delay);
@@ -836,7 +840,11 @@ void DOMConfigurator::configureAndWatch(
 {
         File file(filename);
 #if APR_HAS_THREADS
-		if( xdog ) delete xdog;
+		if( xdog )
+		{
+			APRInitializer::unregisterCleanup(xdog);
+			delete xdog;
+		}
         xdog = new XMLWatchdog(file);
         APRInitializer::registerCleanup(xdog);
         xdog->setDelay(delay);
@@ -852,7 +860,11 @@ void DOMConfigurator::configureAndWatch(
 {
         File file(filename);
 #if APR_HAS_THREADS
-		if( xdog ) delete xdog;
+		if( xdog )
+		{
+			APRInitializer::unregisterCleanup(xdog);
+			delete xdog;
+		}
         xdog = new XMLWatchdog(file);
         APRInitializer::registerCleanup(xdog);
         xdog->setDelay(delay);
@@ -868,7 +880,11 @@ void DOMConfigurator::configureAndWatch(
 {
         File file(filename);
 #if APR_HAS_THREADS
-		if( xdog ) delete xdog;
+		if( xdog )
+		{
+			APRInitializer::unregisterCleanup(xdog);
+			delete xdog;
+		}
         xdog = new XMLWatchdog(file);
         APRInitializer::registerCleanup(xdog);
         xdog->setDelay(delay);

Modified: incubator/log4cxx/trunk/src/main/cpp/propertyconfigurator.cpp
URL: http://svn.apache.org/viewvc/incubator/log4cxx/trunk/src/main/cpp/propertyconfigurator.cpp?rev=1569099&r1=1569098&r2=1569099&view=diff
==============================================================================
--- incubator/log4cxx/trunk/src/main/cpp/propertyconfigurator.cpp (original)
+++ incubator/log4cxx/trunk/src/main/cpp/propertyconfigurator.cpp Mon Feb 17 19:50:37 2014
@@ -141,7 +141,10 @@ void PropertyConfigurator::configureAndW
         const File& configFilename, long delay)
 {
 	if(pdog)
+	{
+	    APRInitializer::unregisterCleanup(pdog);	
 		delete pdog;
+	}
     pdog = new PropertyWatchdog(configFilename);
     APRInitializer::registerCleanup(pdog);
     pdog->setDelay(delay);

Modified: incubator/log4cxx/trunk/src/main/include/log4cxx/helpers/aprinitializer.h
URL: http://svn.apache.org/viewvc/incubator/log4cxx/trunk/src/main/include/log4cxx/helpers/aprinitializer.h?rev=1569099&r1=1569098&r2=1569099&view=diff
==============================================================================
--- incubator/log4cxx/trunk/src/main/include/log4cxx/helpers/aprinitializer.h (original)
+++ incubator/log4cxx/trunk/src/main/include/log4cxx/helpers/aprinitializer.h Mon Feb 17 19:50:37 2014
@@ -22,7 +22,7 @@
 #error "aprinitializer.h should only be included by log4cxx implementation"
 #endif
 
-#include <vector>
+#include <list>
 
 extern "C" {
 typedef struct apr_thread_mutex_t apr_thread_mutex_t;
@@ -51,6 +51,7 @@ namespace log4cxx
      *    allocated on heap and not deleted elsewhere.
      */
     static void registerCleanup(FileWatchdog* watchdog);
+	static void unregisterCleanup(FileWatchdog* watchdog);
 
     private:
       APRInitializer();
@@ -58,7 +59,7 @@ namespace log4cxx
       APRInitializer& operator=(const APRInitializer&);
       apr_pool_t* p;
       apr_thread_mutex_t* mutex;
-      std::vector<FileWatchdog*> watchdogs; 
+      std::list<FileWatchdog*> watchdogs; 
       apr_time_t startTime;
       apr_threadkey_t* tlsKey;
       static APRInitializer& getInstance();