-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
118 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
diff -Naur log4cpp.orig/configure log4cpp/configure | ||
--- log4cpp.orig/configure 2017-07-13 01:39:43.000000000 -0400 | ||
+++ log4cpp/configure 2020-09-16 14:08:00.000000000 -0400 | ||
@@ -15321,11 +15321,12 @@ | ||
$as_echo_n "(cached) " >&6 | ||
else | ||
if test "$cross_compiling" = yes; then : | ||
- ac_cv_func_snprintf=no | ||
+ ac_cv_func_snprintf=yes | ||
else | ||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext | ||
/* end confdefs.h. */ | ||
#include <stdio.h> | ||
+#include <stdlib.h> | ||
int main () { int l = snprintf(NULL,0,"%d",100); exit (!((3 <= l) || (-1 == l))); } | ||
|
||
_ACEOF | ||
diff -Naur log4cpp.orig/src/Appender.cpp log4cpp/src/Appender.cpp | ||
--- log4cpp.orig/src/Appender.cpp 2017-07-13 01:39:11.000000000 -0400 | ||
+++ log4cpp/src/Appender.cpp 2020-09-16 14:07:49.000000000 -0400 | ||
@@ -13,15 +13,18 @@ | ||
|
||
namespace log4cpp { | ||
static int appenders_nifty_counter; // zero initialized at load time | ||
- static char appenderMapStorage_buf[sizeof(Appender::AppenderMapStorage)]; // memory for the nifty-counter singleton object | ||
- Appender::AppenderMapStorage &Appender::_appenderMapStorageInstance = reinterpret_cast<Appender::AppenderMapStorage&> (appenderMapStorage_buf); // memory for placement new | ||
- | ||
+ //static char appenderMapStorage_buf[sizeof(Appender::AppenderMapStorage)*10]; // memory for the nifty-counter singleton object | ||
+ Appender::AppenderMapStorage *_appenderMapStorageInstanceInternal; | ||
+/* | ||
+ Appender::AppenderMapStorage &Appender::_appenderMapStorageInstance = _appenderMapStorageInstanceInternal;// = reinterpret_cast<Appender::AppenderMapStorage&> (appenderMapStorage_buf); // memory for placement new | ||
+*/ | ||
Appender::AppenderMapStorage::AppenderMapStorage() { | ||
_allAppenders = new AppenderMap(); | ||
} | ||
Appender::AppenderMapStorage::~AppenderMapStorage() { | ||
_deleteAllAppenders(); | ||
- delete _allAppenders; | ||
+ delete _allAppenders; | ||
+ _allAppenders = nullptr; | ||
} | ||
|
||
Appender::AppenderMapStorageInitializer::AppenderMapStorageInitializer() { | ||
@@ -31,7 +34,9 @@ | ||
#pragma push_macro("new") | ||
#define new new | ||
#endif // MSVC_MEMORY_LEAK_CHECK | ||
- new (&_appenderMapStorageInstance) AppenderMapStorage(); // placement new | ||
+ //printf("Size %d %d\n", sizeof(Appender::AppenderMapStorage), sizeof(appenderMapStorage_buf)); | ||
+ _appenderMapStorageInstanceInternal = new AppenderMapStorage(); | ||
+ //new (&_appenderMapStorageInstance) AppenderMapStorage(); // placement new | ||
#ifdef MSVC_MEMORY_LEAK_CHECK | ||
#pragma pop_macro("new") | ||
#endif // MSVC_MEMORY_LEAK_CHECK | ||
@@ -39,17 +44,19 @@ | ||
} | ||
Appender::AppenderMapStorageInitializer::~AppenderMapStorageInitializer() { | ||
if (--appenders_nifty_counter == 0) { | ||
- (&_appenderMapStorageInstance)->~AppenderMapStorage (); | ||
+ delete _appenderMapStorageInstanceInternal; | ||
+ _appenderMapStorageInstanceInternal = nullptr; | ||
+ //(&_appenderMapStorageInstance)->~AppenderMapStorage (); | ||
} | ||
} | ||
|
||
/* assume _appenderMapMutex locked */ | ||
Appender::AppenderMap& Appender::_getAllAppenders() { | ||
- return *_appenderMapStorageInstance._allAppenders; | ||
+ return *_appenderMapStorageInstanceInternal->_allAppenders; | ||
} | ||
|
||
Appender* Appender::getAppender(const std::string& name) { | ||
- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); | ||
+ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); | ||
AppenderMap& allAppenders = Appender::_getAllAppenders(); | ||
AppenderMap::iterator i = allAppenders.find(name); | ||
return (allAppenders.end() == i) ? NULL : ((*i).second); | ||
@@ -57,18 +64,18 @@ | ||
|
||
void Appender::_addAppender(Appender* appender) { | ||
//REQUIRE(_allAppenders.find(appender->getName()) == _getAllAppenders().end()) | ||
- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); | ||
+ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); | ||
_getAllAppenders()[appender->getName()] = appender; | ||
} | ||
|
||
void Appender::_removeAppender(Appender* appender) { | ||
- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); | ||
+ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); | ||
//private called from destructor only, but may be triggered by client code in several treads | ||
_getAllAppenders().erase(appender->getName()); | ||
} | ||
|
||
bool Appender::reopenAll() { | ||
- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); | ||
+ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); | ||
bool result = true; | ||
AppenderMap& allAppenders = _getAllAppenders(); | ||
for(AppenderMap::iterator i = allAppenders.begin(); i != allAppenders.end(); i++) { | ||
@@ -79,7 +86,7 @@ | ||
} | ||
|
||
void Appender::closeAll() { | ||
- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); | ||
+ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); | ||
AppenderMap& allAppenders = _getAllAppenders(); | ||
for(AppenderMap::iterator i = allAppenders.begin(); i != allAppenders.end(); i++) { | ||
((*i).second)->close(); | ||
@@ -90,7 +97,7 @@ | ||
// deleting each appenders will cause a lock on Appender::_appenderMapMutex to be obtained again within destructor. to avoid nested locks: | ||
std::vector<Appender*> appenders; | ||
{ | ||
- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); | ||
+ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); | ||
AppenderMap& allAppenders = _getAllAppenders(); | ||
appenders.reserve(allAppenders.size()); | ||
for(AppenderMap::iterator i = allAppenders.begin(); i != allAppenders.end(); ) { |