Skip to content

Commit

Permalink
Put log4cpp patch in place
Browse files Browse the repository at this point in the history
  • Loading branch information
dkulp committed Nov 8, 2021
1 parent 4bd32ee commit 4c1fdd8
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.macOS
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ unset LDFLAGS

log4cpp:
Download latest src release (current 1.1.3)
patch -p1 < ~/working/xLights-macos/patches/log4cpp.patch
patch -p1 < ~/working/xLights/macOS/patches/log4cpp.patch
export CXXFLAGS="-g -O2 -flto=thin ${OSX_VERSION_MIN} ${XL_TARGETS} -std=c++11 -stdlib=libc++ -fvisibility-inlines-hidden"
export LDFLAGS="-flto=thin ${XL_TARGETS} "
./configure --prefix=/opt/local -host ${BUILD_HOST}
Expand Down
117 changes: 117 additions & 0 deletions patches/log4cpp.patch
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(); ) {

0 comments on commit 4c1fdd8

Please sign in to comment.