|
From: Willmann, L. J <Ler...@bo...> - 2004-11-10 21:47:02
|
OK here they are:
1) \log4cc\tests\testmain.cpp
At the end of main() add
log4cpp::Category::getRoot().shutdown(); //does needed cleanup
2) \log4cpp\include\log4cpp\NDC.hh
Right after=20
static NDC& getNDC();
Add
static void releaseNDC(); //Releases the singleton NDC
3) \log4cpp\src\NDC.cpp
Right after function getNDC()
Add
void NDC::releaseNDC()
{
NDC* nDC =3D _nDC.get();
if (nDC)
{
_nDC.reset();
}
}
4)\log4cpp\include\log4cpp\Appender.hh
Change function=20
static void _deleteAllAppenders();
From private to public. I needed to call it to do some cleanup.
5)\log4cpp\src\Appender.cpp
Change:
void Appender::_deleteAllAppenders() {
threading::ScopedLock lock(_appenderMapMutex);
AppenderMap& allAppenders =3D _getAllAppenders();
for(AppenderMap::iterator i =3D allAppenders.begin(); i !=3D
allAppenders.end(); ) {
Appender *app =3D (*i).second;
i++; // increment iterator before delete or iterator will be
invalid.
delete (app);
}
} =20
To:
void Appender::_deleteAllAppenders() {
threading::ScopedLock lock(_appenderMapMutex);
AppenderMap& allAppenders =3D _getAllAppenders();
for(AppenderMap::iterator i =3D allAppenders.begin(); i !=3D
allAppenders.end(); ) {
Appender *app =3D (*i).second;
i++; // increment iterator before delete or iterator will be
invalid.
delete (app);
}
delete _allAppenders; //Need to cleanup the Appenders
_allAppenders =3D NULL;
} =20
6)\log4cpp\include\log4cpp\HierarchyMaintainer.hh
Add to public interface
static void releaseDefaultMaintainer();
7) \log4cpp\src\HierarchyMaintainer.cpp
Add: - got to delete the _defaultMaintainer when done with it.
void HierarchyMaintainer::releaseDefaultMaintainer()
{
if(_defaultMaintainer) delete _defaultMaintainer;
_defaultMaintainer =3D NULL;
}
Change:
From:
void HierarchyMaintainer::deleteAllCategories() {
threading::ScopedLock lock(_categoryMutex);
{
for(CategoryMap::const_iterator i =3D _categoryMap.begin(); =
i
!=3D _categoryMap.end(); i++) {
delete ((*i).second);
}
}
}
To: This is just a different way to do cleanup of std - you forgot to do
the erase() after the delete.
void HierarchyMaintainer::deleteAllCategories() {
threading::ScopedLock lock(_categoryMutex);
{
CategoryMap::iterator i =3D _categoryMap.begin();
=20
while( i !=3D _categoryMap.end() )
{
delete ((*i).second);
_categoryMap.erase(i);
i =3D _categoryMap.begin();
=20
}
}
}
}
8) \Log4cpp\src\Category.cpp
Change:
void Category::shutdown() {
HierarchyMaintainer::getDefaultMaintainer().shutdown();
}
To: - now deletes the maintainer, the NDC and the Appenders ? Mthe
apenders may be extranious
void Category::shutdown() {
HierarchyMaintainer::releaseDefaultMaintainer();
NDC::releaseNDC();
Appender::_deleteAllAppenders();
}
-----Original Message-----
From: Gary Granger [mailto:gr...@uc...]=20
Sent: Wednesday, November 10, 2004 11:53 AM
To: Willmann, Leroy J
Cc: log...@li...
Subject: Re: [Log4cpp-devel] I have some bug fixes.
Perhaps you could post them to this list? I might be interested in
using them even if they don't get into CVS.
Thanks,
gary
|