Author: carnold
Date: Mon Mar 24 22:07:25 2008
New Revision: 640703
URL: http://svn.apache.org/viewvc?rev=640703&view=rev
Log:
LOGCXX-256: SocketHubAppender fails after accepting connection
Modified:
logging/log4cxx/trunk/src/changes/changes.xml
logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp
logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp
logging/log4cxx/trunk/src/test/cpp/net/sockethubappendertestcase.cpp
Modified: logging/log4cxx/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/changes/changes.xml?rev=640703&r1=640702&r2=640703&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/changes/changes.xml (original)
+++ logging/log4cxx/trunk/src/changes/changes.xml Mon Mar 24 22:07:25 2008
@@ -223,6 +223,7 @@
<action issue="LOGCXX-252">Add documentation for use of operator<< in
logging requests</action>
<action issue="LOGCXX-253">Transcoder compilation error with utf-8
charset</action>
<action issue="LOGCXX-254">Add build option for static C RTL</action>
+<action issue="LOGCXX-256">SocketHubAppender fails after accepting
connection</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/sockethubappender.cpp
URL:
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp?rev=640703&r1=640702&r2=640703&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp Mon Mar 24
22:07:25 2008
@@ -148,6 +148,7 @@
try
{
event->write(**it, p);
+ (*it)->flush(p);
it++;
}
catch(std::exception& e)
@@ -177,6 +178,7 @@
catch (SocketException& e)
{
LogLog::error(LOG4CXX_STR("exception setting timeout, shutting
down server socket."), e);
+ delete serverSocket;
return NULL;
}
@@ -191,6 +193,7 @@
catch (InterruptedIOException&)
{
// timeout occurred, so just loop
+ Thread::sleep(1000);
}
catch (SocketException& e)
{
@@ -226,6 +229,7 @@
LogLog::error(LOG4CXX_STR("exception creating
output stream on socket."), e);
}
}
+ stopRunning = (stopRunning || pThis->closed);
}
delete serverSocket;
return NULL;
Modified: logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp
URL:
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp?rev=640703&r1=640702&r2=640703&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp Mon Mar 24 22:07:25 2008
@@ -171,6 +171,9 @@
apr_socket_t *clientSocket = 0;
apr_status_t status =
apr_socket_accept(&clientSocket, socket, s->memoryPool.getAPRPool());
+ if (APR_STATUS_IS_EAGAIN(status)) {
+ throw InterruptedIOException();
+ }
if (status != APR_SUCCESS) {
throw SocketException(status);
}
@@ -284,11 +287,9 @@
/** Creates either a stream or a datagram socket. */
void SocketImpl::create(bool stream)
{
- apr_socket_t* newSocket;
apr_status_t status =
- apr_socket_create(&newSocket, APR_INET, stream ? SOCK_STREAM : SOCK_DGRAM,
+ apr_socket_create(&socket, APR_INET, stream ? SOCK_STREAM : SOCK_DGRAM,
APR_PROTO_TCP, memoryPool.getAPRPool());
- socket = newSocket;
if (status != APR_SUCCESS) {
throw SocketException(status);
}
Modified: logging/log4cxx/trunk/src/test/cpp/net/sockethubappendertestcase.cpp
URL:
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/net/sockethubappendertestcase.cpp?rev=640703&r1=640702&r2=640703&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/net/sockethubappendertestcase.cpp
(original)
+++ logging/log4cxx/trunk/src/test/cpp/net/sockethubappendertestcase.cpp Mon
Mar 24 22:07:25 2008
@@ -17,8 +17,11 @@
#include <log4cxx/net/sockethubappender.h>
#include "../appenderskeletontestcase.h"
+#include <log4cxx/helpers/thread.h>
+#include <apr.h>
using namespace log4cxx;
+using namespace log4cxx::net;
using namespace log4cxx::helpers;
#if APR_HAS_THREADS
@@ -33,6 +36,7 @@
//
LOGUNIT_TEST(testDefaultThreshold);
LOGUNIT_TEST(testSetOptionThreshold);
+ LOGUNIT_TEST(testHello);
LOGUNIT_TEST_SUITE_END();
@@ -41,6 +45,18 @@
AppenderSkeleton* createAppenderSkeleton() const {
return new log4cxx::net::SocketHubAppender();
+ }
+
+ void testHello() {
+ SocketHubAppenderPtr hubAppender(new SocketHubAppender());
+ Pool p;
+ hubAppender->activateOptions(p);
+ LoggerPtr root(Logger::getRootLogger());
+ root->addAppender(hubAppender);
+ for(int i = 0; i < 100; i++) {
+ LOG4CXX_INFO(root, "Hello, World " << i);
+ }
+ hubAppender->close();
}
};