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();