-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathlog4cpp.patch
117 lines (108 loc) · 5.59 KB
/
log4cpp.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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(); ) {