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/12 22:51:42 UTC
svn commit: r636527 - in /logging/log4cxx/trunk/src: changes/ main/cpp/
main/include/log4cxx/helpers/ main/include/log4cxx/net/ test/cpp/net/
Author: carnold
Date: Wed Mar 12 14:51:39 2008
New Revision: 636527
URL: http://svn.apache.org/viewvc?rev=636527&view=rev
Log:
LOGCXX-246: Config refresh hangs a client application that uses TelnetAppender
Modified:
logging/log4cxx/trunk/src/changes/changes.xml
logging/log4cxx/trunk/src/main/cpp/filewatchdog.cpp
logging/log4cxx/trunk/src/main/cpp/telnetappender.cpp
logging/log4cxx/trunk/src/main/cpp/threadcxx.cpp
logging/log4cxx/trunk/src/main/include/log4cxx/helpers/thread.h
logging/log4cxx/trunk/src/main/include/log4cxx/net/telnetappender.h
logging/log4cxx/trunk/src/test/cpp/net/telnetappendertestcase.cpp
Modified: logging/log4cxx/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/changes/changes.xml?rev=636527&r1=636526&r2=636527&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/changes/changes.xml (original)
+++ logging/log4cxx/trunk/src/changes/changes.xml Wed Mar 12 14:51:39 2008
@@ -216,6 +216,7 @@
<action issue="LOGCXX-241">Non-ascii named files have names mangled</action>
<action issue="LOGCXX-242">Eliminate log4cxx proxies for APR types</action>
<action issue="LOGCXX-243">Problem Compile in Doxy</action>
+<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>
</release>
Modified: logging/log4cxx/trunk/src/main/cpp/filewatchdog.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/filewatchdog.cpp?rev=636527&r1=636526&r2=636527&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/filewatchdog.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/filewatchdog.cpp Wed Mar 12 14:51:39 2008
@@ -38,7 +38,8 @@
}
FileWatchdog::~FileWatchdog() {
- thread.stop();
+ apr_atomic_set32(&interrupted, 0xFFFF);
+ thread.join();
}
void FileWatchdog::checkAndConfigure()
@@ -73,8 +74,11 @@
while(!interrupted)
{
apr_sleep(APR_INT64_C(1000) * pThis->delay);
- pThis->checkAndConfigure();
interrupted = apr_atomic_read32(&pThis->interrupted);
+ if (!interrupted) {
+ pThis->checkAndConfigure();
+ interrupted = apr_atomic_read32(&pThis->interrupted);
+ }
}
return NULL;
}
Modified: logging/log4cxx/trunk/src/main/cpp/telnetappender.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/telnetappender.cpp?rev=636527&r1=636526&r2=636527&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/telnetappender.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/telnetappender.cpp Wed Mar 12 14:51:39 2008
@@ -98,7 +98,6 @@
synchronized sync(mutex);
if (closed) return;
closed = true;
- sh.stop();
SocketPtr nullSocket;
for(ConnectionList::iterator iter = connections.begin();
@@ -116,6 +115,8 @@
} catch(Exception&) {
}
}
+
+ sh.join();
activeConnections = 0;
}
@@ -228,7 +229,11 @@
pThis->writeStatus(newClient, oss, p);
}
} catch(Exception& e) {
- LogLog::error(LOG4CXX_STR("Encountered error while in SocketHandler loop."), e);
+ if (!pThis->closed) {
+ LogLog::error(LOG4CXX_STR("Encountered error while in SocketHandler loop."), e);
+ } else {
+ return NULL;
+ }
}
}
Modified: logging/log4cxx/trunk/src/main/cpp/threadcxx.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/threadcxx.cpp?rev=636527&r1=636526&r2=636527&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/threadcxx.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/threadcxx.cpp Wed Mar 12 14:51:39 2008
@@ -104,17 +104,6 @@
}
#endif
-void Thread::stop() {
-#if APR_HAS_THREADS
- if (thread != NULL) {
- apr_status_t stat = apr_thread_exit((apr_thread_t*) thread, 0);
- thread = NULL;
- if (stat != APR_SUCCESS) {
- throw ThreadException(stat);
- }
- }
-#endif
-}
void Thread::join() {
#if APR_HAS_THREADS
Modified: logging/log4cxx/trunk/src/main/include/log4cxx/helpers/thread.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/helpers/thread.h?rev=636527&r1=636526&r2=636527&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/helpers/thread.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/helpers/thread.h Wed Mar 12 14:51:39 2008
@@ -58,7 +58,6 @@
* Runs the specified method on a newly created thread.
*/
void run(Runnable start, void* data);
- void stop();
void join();
inline bool isActive() { return thread != 0; }
Modified: logging/log4cxx/trunk/src/main/include/log4cxx/net/telnetappender.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/net/telnetappender.h?rev=636527&r1=636526&r2=636527&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/net/telnetappender.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/net/telnetappender.h Wed Mar 12 14:51:39 2008
@@ -144,6 +144,8 @@
size_t activeConnections;
static void* LOG4CXX_THREAD_FUNC acceptConnections(helpers::log4cxx_thread_t* thread, void* data);
}; // class TelnetAppender
+
+ LOG4CXX_PTR_DEF(TelnetAppender);
} // namespace net
} // namespace log4cxx
Modified: logging/log4cxx/trunk/src/test/cpp/net/telnetappendertestcase.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/net/telnetappendertestcase.cpp?rev=636527&r1=636526&r2=636527&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/net/telnetappendertestcase.cpp (original)
+++ logging/log4cxx/trunk/src/test/cpp/net/telnetappendertestcase.cpp Wed Mar 12 14:51:39 2008
@@ -16,10 +16,14 @@
*/
#include <log4cxx/net/telnetappender.h>
+#include <log4cxx/ttcclayout.h>
#include "../appenderskeletontestcase.h"
+#include <apr_thread_proc.h>
+#include <apr_time.h>
using namespace log4cxx;
using namespace log4cxx::helpers;
+using namespace log4cxx::net;
#if APR_HAS_THREADS
/**
@@ -33,14 +37,29 @@
//
LOGUNIT_TEST(testDefaultThreshold);
LOGUNIT_TEST(testSetOptionThreshold);
+ LOGUNIT_TEST(testActivateClose);
LOGUNIT_TEST_SUITE_END();
+ enum { TEST_PORT = 1723 };
public:
AppenderSkeleton* createAppenderSkeleton() const {
return new log4cxx::net::TelnetAppender();
+ }
+
+ void testActivateClose() {
+ TelnetAppenderPtr appender(new TelnetAppender());
+ appender->setLayout(new TTCCLayout());
+ appender->setPort(TEST_PORT);
+ Pool p;
+ appender->activateOptions(p);
+ //
+ // TODO: without the Thread::sleep, SocketImpl will NPE when trying to accept
+ // connections on a closed socket.
+ Thread::sleep(1000);
+ appender->close();
}
};