You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by ca...@apache.org on 2008/03/14 03:42:33 UTC
svn commit: r636964 - in /logging/log4cxx/trunk/src: changes/changes.xml
main/cpp/ndc.cpp main/cpp/threadspecificdata.cpp
main/include/log4cxx/helpers/threadspecificdata.h
main/include/log4cxx/ndc.h test/cpp/ndctestcase.cpp
Author: carnold
Date: Thu Mar 13 19:42:32 2008
New Revision: 636964
URL: http://svn.apache.org/viewvc?rev=636964&view=rev
Log:
LOGCXX-251: NDC::cloneStack and NDC::inherit missing in 0.10.0
Modified:
logging/log4cxx/trunk/src/changes/changes.xml
logging/log4cxx/trunk/src/main/cpp/ndc.cpp
logging/log4cxx/trunk/src/main/cpp/threadspecificdata.cpp
logging/log4cxx/trunk/src/main/include/log4cxx/helpers/threadspecificdata.h
logging/log4cxx/trunk/src/main/include/log4cxx/ndc.h
logging/log4cxx/trunk/src/test/cpp/ndctestcase.cpp
Modified: logging/log4cxx/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/changes/changes.xml?rev=636964&r1=636963&r2=636964&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/changes/changes.xml (original)
+++ logging/log4cxx/trunk/src/changes/changes.xml Thu Mar 13 19:42:32 2008
@@ -219,6 +219,7 @@
<action issue="LOGCXX-246">Config refresh hangs a client application that uses TelnetAppender</action>
<action issue="LOGCXX-247">MSVC project has wrong additional include directories</action>
<action issue="LOGCXX-248">ODBCAppender has unicode issues</action>
+<action issue="LOGCXX-251">NDC::cloneStack and NDC::inherit missing in 0.10.0 RC2</action>
</release>
<release version="0.9.7" date="2004-05-10">
<action type="fix">Fixed examples source code in the "Short introduction to log4cxx".</action>
Modified: logging/log4cxx/trunk/src/main/cpp/ndc.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/ndc.cpp?rev=636964&r1=636963&r2=636964&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/ndc.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/ndc.cpp Thu Mar 13 19:42:32 2008
@@ -58,6 +58,26 @@
}
}
+NDC::Stack* NDC::cloneStack()
+{
+ ThreadSpecificData* data = ThreadSpecificData::getCurrentData();
+ if (data != 0) {
+ Stack& stack = data->getStack();
+ if (!stack.empty()) {
+ return new Stack(stack);
+ }
+ }
+ return new Stack();
+}
+
+void NDC::inherit(NDC::Stack * stack) {
+ if (stack != NULL) {
+ ThreadSpecificData::inherit(*stack);
+ delete stack;
+ }
+}
+
+
bool NDC::get(LogString& dest)
{
ThreadSpecificData* data = ThreadSpecificData::getCurrentData();
Modified: logging/log4cxx/trunk/src/main/cpp/threadspecificdata.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/threadspecificdata.cpp?rev=636964&r1=636963&r2=636964&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/threadspecificdata.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/threadspecificdata.cpp Thu Mar 13 19:42:32 2008
@@ -104,6 +104,16 @@
}
}
+void ThreadSpecificData::inherit(const NDC::Stack& src) {
+ ThreadSpecificData* data = getCurrentData();
+ if (data == 0) {
+ data = createCurrentData();
+ }
+ if (data != 0) {
+ data->getStack() = src;
+ }
+}
+
ThreadSpecificData* ThreadSpecificData::createCurrentData() {
Modified: logging/log4cxx/trunk/src/main/include/log4cxx/helpers/threadspecificdata.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/helpers/threadspecificdata.h?rev=636964&r1=636963&r2=636964&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/helpers/threadspecificdata.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/helpers/threadspecificdata.h Thu Mar 13 19:42:32 2008
@@ -48,6 +48,7 @@
static void put(const LogString& key, const LogString& val);
static void push(const LogString& val);
+ static void inherit(const log4cxx::NDC::Stack& stack);
log4cxx::NDC::Stack& getStack();
log4cxx::MDC::Map& getMap();
Modified: logging/log4cxx/trunk/src/main/include/log4cxx/ndc.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/ndc.h?rev=636964&r1=636963&r2=636964&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/ndc.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/ndc.h Thu Mar 13 19:42:32 2008
@@ -128,6 +128,32 @@
*/
static void clear();
+ /**
+ Clone the diagnostic context for the current thread.
+ <p>Internally a diagnostic context is represented as a stack. A
+ given thread can supply the stack (i.e. diagnostic context) to a
+ child thread so that the child can inherit the parent thread's
+ diagnostic context.
+ <p>The child thread uses the #inherit method to
+ inherit the parent's diagnostic context.
+ <p>If not passed to #inherit, returned stack should be deleted by caller.
+ @return Stack A clone of the current thread's diagnostic context, will not be null.
+ */
+ static Stack * cloneStack();
+
+ /**
+ Inherit the diagnostic context of another thread.
+ <p>The parent thread can obtain a reference to its diagnostic
+ context using the #cloneStack method. It should
+ communicate this information to its child so that it may inherit
+ the parent's diagnostic context.
+ <p>The parent's diagnostic context is cloned before being
+ inherited. In other words, once inherited, the two diagnostic
+ contexts can be managed independently.
+ @param stack The diagnostic context of the parent thread,
+ will be deleted during call. If NULL, NDC will not be modified.
+ */
+ static void inherit(Stack * stack);
/**
* Get the current value of the NDC of the
Modified: logging/log4cxx/trunk/src/test/cpp/ndctestcase.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/ndctestcase.cpp?rev=636964&r1=636963&r2=636964&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/ndctestcase.cpp (original)
+++ logging/log4cxx/trunk/src/test/cpp/ndctestcase.cpp Thu Mar 13 19:42:32 2008
@@ -36,6 +36,7 @@
LOGUNIT_TEST_SUITE(NDCTestCase);
LOGUNIT_TEST(testPushPop);
LOGUNIT_TEST(test1);
+ LOGUNIT_TEST(testInherit);
LOGUNIT_TEST_SUITE_END();
public:
@@ -83,6 +84,21 @@
LOG4CXX_WARN(logger, "m3");
LOG4CXX_ERROR(logger, "m4");
LOG4CXX_FATAL(logger, "m5");
+ }
+
+ void testInherit() {
+ NDC::push("hello");
+ NDC::push("world");
+ NDC::Stack* clone = NDC::cloneStack();
+ NDC::clear();
+ NDC::push("discard");
+ NDC::inherit(clone);
+ LogString expected1(LOG4CXX_STR("world"));
+ LOGUNIT_ASSERT_EQUAL(expected1, NDC::pop());
+ LogString expected2(LOG4CXX_STR("hello"));
+ LOGUNIT_ASSERT_EQUAL(expected2, NDC::pop());
+ LogString expected3;
+ LOGUNIT_ASSERT_EQUAL(expected3, NDC::pop());
}
};