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&lt;&lt; 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();
         }
 };
 


Reply via email to