summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortschoening <tschoening@13f79535-47bb-0310-9956-ffa450edef68>2015-12-15 17:12:30 +0000
committertschoening <tschoening@13f79535-47bb-0310-9956-ffa450edef68>2015-12-15 17:12:30 +0000
commit2d6c0b43623f7b5cf54e8e9e1fd1ab37ef98dcf5 (patch)
treeac3cbdfc8d6d7045de24e3951298655bb21175e5 /src
parent7209fb461cd05ded064a76e84d6d1055b3687575 (diff)
downloadlog4cxx-2d6c0b43623f7b5cf54e8e9e1fd1ab37ef98dcf5.tar.gz
LOGCXX-461: SocketAppender creates memory issue for log4j server.
git-svn-id: http://svn.apache.org/repos/asf/incubator/log4cxx/trunk@1720199 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/main/cpp/objectoutputstream.cpp16
-rw-r--r--src/main/cpp/socketappender.cpp1
-rw-r--r--src/main/include/log4cxx/helpers/objectoutputstream.h20
3 files changed, 25 insertions, 12 deletions
diff --git a/src/main/cpp/objectoutputstream.cpp b/src/main/cpp/objectoutputstream.cpp
index 04c8ce1..f0caf3d 100644
--- a/src/main/cpp/objectoutputstream.cpp
+++ b/src/main/cpp/objectoutputstream.cpp
@@ -33,7 +33,8 @@ IMPLEMENT_LOG4CXX_OBJECT(ObjectOutputStream)
ObjectOutputStream::ObjectOutputStream(OutputStreamPtr outputStream, Pool& p)
: os(outputStream),
utf8Encoder(CharsetEncoder::getUTF8Encoder()),
- objectHandle(0x7E0000),
+ objectHandleDefault(0x7E0000),
+ objectHandle(objectHandleDefault),
classDescriptions(new ClassDescriptionMap())
{
char start[] = { static_cast<char>(0xAC), static_cast<char>(0xED), 0x00, 0x05 };
@@ -56,6 +57,16 @@ void ObjectOutputStream::flush(Pool& p)
os->flush(p);
}
+void ObjectOutputStream::reset(Pool& p)
+{
+ os->flush(p);
+ writeByte(TC_RESET, p);
+ os->flush(p);
+
+ objectHandle = objectHandleDefault;
+ classDescriptions->clear();
+}
+
void ObjectOutputStream::writeObject(const LogString& val, Pool& p)
{
objectHandle++;
@@ -81,7 +92,6 @@ void ObjectOutputStream::writeObject(const LogString& val, Pool& p)
os->write(dataBuf, p);
}
-
void ObjectOutputStream::writeObject(const MDC::Map& val, Pool& p)
{
//
@@ -141,8 +151,6 @@ void ObjectOutputStream::writeUTFString(const std::string& val, Pool& p)
os->write(dataBuf, p);
}
-
-
void ObjectOutputStream::writeByte(char val, Pool& p)
{
ByteBuffer buf(&val, 1);
diff --git a/src/main/cpp/socketappender.cpp b/src/main/cpp/socketappender.cpp
index e3817cd..3115be3 100644
--- a/src/main/cpp/socketappender.cpp
+++ b/src/main/cpp/socketappender.cpp
@@ -116,6 +116,7 @@ void SocketAppender::append(const spi::LoggingEventPtr& event, log4cxx::helpers:
{
event->write(*oos, p);
oos->flush(p);
+ oos->reset(p);
}
catch(std::exception& e)
{
diff --git a/src/main/include/log4cxx/helpers/objectoutputstream.h b/src/main/include/log4cxx/helpers/objectoutputstream.h
index 718307b..515634a 100644
--- a/src/main/include/log4cxx/helpers/objectoutputstream.h
+++ b/src/main/include/log4cxx/helpers/objectoutputstream.h
@@ -43,6 +43,8 @@ namespace log4cxx
void close(Pool& p);
void flush(Pool& p);
+ void reset(Pool& p);
+
void writeObject(const LogString&, Pool& p);
void writeUTFString(const std::string&, Pool& p);
void writeObject(const MDC::Map& mdc, Pool& p);
@@ -55,8 +57,8 @@ namespace log4cxx
Pool& p);
void writeNull(Pool& p);
- enum { STREAM_MAGIC = 0xACED };
- enum { STREAM_VERSION = 5 };
+ enum { STREAM_MAGIC = 0xACED };
+ enum { STREAM_VERSION = 5 };
enum
{
TC_NULL = 0x70,
@@ -67,7 +69,8 @@ namespace log4cxx
TC_ARRAY = 0x75,
TC_CLASS = 0x76,
TC_BLOCKDATA = 0x77,
- TC_ENDBLOCKDATA = 0x78
+ TC_ENDBLOCKDATA = 0x78,
+ TC_RESET = 0x79
};
enum
{
@@ -82,11 +85,12 @@ namespace log4cxx
ObjectOutputStream(const ObjectOutputStream&);
ObjectOutputStream& operator=(const ObjectOutputStream&);
- OutputStreamPtr os;
- log4cxx::helpers::CharsetEncoderPtr utf8Encoder;
- unsigned int objectHandle;
- typedef std::map<std::string, unsigned int> ClassDescriptionMap;
- ClassDescriptionMap* classDescriptions;
+ OutputStreamPtr os;
+ log4cxx::helpers::CharsetEncoderPtr utf8Encoder;
+ const unsigned int objectHandleDefault;
+ unsigned int objectHandle;
+ typedef std::map<std::string, unsigned int> ClassDescriptionMap;
+ ClassDescriptionMap* classDescriptions;
};
LOG4CXX_PTR_DEF(ObjectOutputStream);