(file) Return to HTTPAcceptor.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/HTTPAcceptor.cpp between version 1.111 and 1.125

version 1.111, 2008/01/17 09:24:50 version 1.125, 2008/08/28 17:24:36
Line 99 
Line 99 
  
     ~HTTPAcceptorRep()     ~HTTPAcceptorRep()
     {     {
           closeSocket();
         delete address;         delete address;
     }     }
   
       void closeSocket()
       {
           Socket::close(socket);
       }
   
     struct sockaddr* address;     struct sockaddr* address;
  
     SocketLength address_size;     SocketLength address_size;
Line 134 
Line 141 
      _sslContextObjectLock(sslContextObjectLock),      _sslContextObjectLock(sslContextObjectLock),
      _idleConnectionTimeoutSeconds(0)      _idleConnectionTimeoutSeconds(0)
 { {
      PEGASUS_ASSERT(!_sslcontext == !_sslContextObjectLock);
    Socket::initializeInterface();    Socket::initializeInterface();
  
    /*    /*
Line 204 
Line 212 
             SocketMessage* socketMessage = (SocketMessage*)message;             SocketMessage* socketMessage = (SocketMessage*)message;
  
             // If this is a connection request:             // If this is a connection request:
               PEGASUS_ASSERT(socketMessage->socket == _rep->socket);
   
               PEGASUS_ASSERT(socketMessage->events & SocketMessage::READ);
  
             if (socketMessage->socket == _rep->socket &&  
                 socketMessage->events & SocketMessage::READ)  
             {  
                 _acceptConnection();                 _acceptConnection();
             }  
             else  
             {  
                 // ATTN! this can't happen!  
                 PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
                     "HTTPAcceptor::handleEnqueue: Invalid SOCKET_MESSAGE "  
                         "received.");  
            }  
  
            break;            break;
        }        }
Line 246 
Line 246 
        }        }
  
        default:        default:
            // ATTN: need unexpected message error!             PEGASUS_ASSERT(false);
            PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
                "HTTPAcceptor::handleEnqueue: Invalid MESSAGE received.");  
            break;            break;
     }     }
  
Line 259 
Line 257 
 void HTTPAcceptor::handleEnqueue() void HTTPAcceptor::handleEnqueue()
 { {
     Message* message = dequeue();     Message* message = dequeue();
   
     if (!message)  
     {  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::handleEnqueue(): No message on queue.");  
         return;  
     }  
   
     handleEnqueue(message);     handleEnqueue(message);
 } }
  
Line 276 
Line 266 
     {     {
         MessageLoaderParms parms("Common.HTTPAcceptor.ALREADY_BOUND",         MessageLoaderParms parms("Common.HTTPAcceptor.ALREADY_BOUND",
             "HTTPAcceptor already bound");             "HTTPAcceptor already bound");
   
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::bind: HTTPAcceptor already bound.");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 301 
Line 288 
     orig_ccsid = _SETCCSID(-1);     orig_ccsid = _SETCCSID(-1);
     if (orig_ccsid == -1)     if (orig_ccsid == -1)
     {     {
         PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
             String("HTTPAcceptor::_bind: Can not get current PASE CCSID."));              "HTTPAcceptor::_bind: Can not get current PASE CCSID.");
         orig_ccsid = 1208;         orig_ccsid = 1208;
     }     }
     PaseCcsid ccsid(819, orig_ccsid);     PaseCcsid ccsid(819, orig_ccsid);
Line 388 
Line 375 
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_CREATE_SOCKET",         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_CREATE_SOCKET",
             "Failed to create socket");             "Failed to create socket");
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind _rep->socket < 0");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 401 
Line 386 
     int sock_flags;     int sock_flags;
     if ((sock_flags = fcntl(_rep->socket, F_GETFD, 0)) < 0)     if ((sock_flags = fcntl(_rep->socket, F_GETFD, 0)) < 0)
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
             "HTTPAcceptor::_bind: fcntl(F_GETFD) failed");             "HTTPAcceptor::_bind: fcntl(F_GETFD) failed");
     }     }
     else     else
Line 409 
Line 394 
         sock_flags |= FD_CLOEXEC;         sock_flags |= FD_CLOEXEC;
         if (fcntl(_rep->socket, F_SETFD, sock_flags) < 0)         if (fcntl(_rep->socket, F_SETFD, sock_flags) < 0)
         {         {
             PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,              PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
                 "HTTPAcceptor::_bind: fcntl(F_SETFD) failed");                 "HTTPAcceptor::_bind: fcntl(F_SETFD) failed");
         }         }
     }     }
Line 426 
Line 411 
     if (setsockopt(_rep->socket, SOL_SOCKET, SO_REUSEADDR,     if (setsockopt(_rep->socket, SOL_SOCKET, SO_REUSEADDR,
             (char *)&opt, sizeof(opt)) < 0)             (char *)&opt, sizeof(opt)) < 0)
     {     {
         Socket::close(_rep->socket);  
         delete _rep;         delete _rep;
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_SET_SOCKET_OPTION",         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_SET_SOCKET_OPTION",
             "Failed to set socket option");             "Failed to set socket option");
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind: Failed to set socket option.");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 442 
Line 424 
     //     //
     if (::bind(_rep->socket, _rep->address, _rep->address_size) < 0)     if (::bind(_rep->socket, _rep->address, _rep->address_size) < 0)
     {     {
         Socket::close(_rep->socket);          MessageLoaderParms parms(
               "Common.HTTPAcceptor.FAILED_BIND_SOCKET_DETAIL",
               "Failed to bind socket on port $0: $1.",
               _portNumber, PEGASUS_SYSTEM_NETWORK_ERRORMSG_NLS);
   
         delete _rep;         delete _rep;
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_BIND_SOCKET",  
             "Failed to bind socket");  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind: Failed to bind socket.");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 474 
Line 456 
     //     //
 #if !defined(PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET) && \ #if !defined(PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET) && \
      (defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || \      (defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || \
       defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM))        defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || \
         defined(PEGASUS_OS_PASE))
     if (_connectionType == LOCAL_CONNECTION)     if (_connectionType == LOCAL_CONNECTION)
     {     {
         if (::chmod(PEGASUS_LOCAL_DOMAIN_SOCKET_PATH,         if (::chmod(PEGASUS_LOCAL_DOMAIN_SOCKET_PATH,
Line 482 
Line 465 
                 S_IRGRP | S_IWGRP | S_IXGRP |                 S_IRGRP | S_IWGRP | S_IXGRP |
                 S_IROTH | S_IWOTH | S_IXOTH ) < 0 )                 S_IROTH | S_IWOTH | S_IXOTH ) < 0 )
         {         {
             Socket::close(_rep->socket);              MessageLoaderParms parms(
                   "Common.HTTPAcceptor.FAILED_SET_LDS_FILE_OPTION",
                   "Failed to set permission on local domain socket {0}: {1}.",
                   PEGASUS_LOCAL_DOMAIN_SOCKET_PATH,
                   PEGASUS_SYSTEM_ERRORMSG_NLS );
   
             delete _rep;             delete _rep;
             _rep = 0;             _rep = 0;
             MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_BIND_SOCKET",  
                 "Failed to bind socket");  
             PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
                 "HTTPAcceptor::_bind: Failed to set domain socket "  
                     "permissions.");  
             throw BindFailedException(parms);             throw BindFailedException(parms);
         }         }
     }     }
Line 499 
Line 482 
  
     //int const _maxConnectionQueueLength = 15;     //int const _maxConnectionQueueLength = 15;
  
     if (listen(_rep->socket, _maxConnectionQueueLength) < 0)      if (::listen(_rep->socket, _maxConnectionQueueLength) < 0)
     {     {
         Socket::close(_rep->socket);          MessageLoaderParms parms(
               "Common.HTTPAcceptor.FAILED_LISTEN_SOCKET",
               "Failed to listen on socket {0}: {1}.",
               (int)_rep->socket,PEGASUS_SYSTEM_NETWORK_ERRORMSG_NLS );
   
         delete _rep;         delete _rep;
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms("Common.HTTPAcceptor.FAILED_BIND_SOCKET",  
             "Failed to bind socket");  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind: Failed to bind socket(1).");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
  
Line 519 
Line 502 
             getQueueId(),             getQueueId(),
             MonitorEntry::TYPE_ACCEPTOR)))             MonitorEntry::TYPE_ACCEPTOR)))
     {     {
         Socket::close(_rep->socket);  
         delete _rep;         delete _rep;
         _rep = 0;         _rep = 0;
         MessageLoaderParms parms(         MessageLoaderParms parms(
             "Common.HTTPAcceptor.FAILED_SOLICIT_SOCKET_MESSAGES",             "Common.HTTPAcceptor.FAILED_SOLICIT_SOCKET_MESSAGES",
             "Failed to solicit socket messaeges");             "Failed to solicit socket messaeges");
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_bind: Failed to solicit socket messages(2).");  
         throw BindFailedException(parms);         throw BindFailedException(parms);
     }     }
 } }
Line 545 
Line 525 
         //_monitor->unsolicitSocketMessages(_rep->socket);         //_monitor->unsolicitSocketMessages(_rep->socket);
  
         // close the socket         // close the socket
         Socket::close(_rep->socket);          _rep->closeSocket();
         // Unlink Local Domain Socket Bug# 3312         // Unlink Local Domain Socket Bug# 3312
         if (_connectionType == LOCAL_CONNECTION)         if (_connectionType == LOCAL_CONNECTION)
         {         {
 #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
             PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL2,              PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL3,
                 "HTTPAcceptor::closeConnectionSocket Unlinking local "                 "HTTPAcceptor::closeConnectionSocket Unlinking local "
                     "connection.");                     "connection.");
             ::unlink(             ::unlink(
Line 562 
Line 542 
     }     }
     else     else
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL2,
             "HTTPAcceptor::closeConnectionSocket failure _rep is null.");             "HTTPAcceptor::closeConnectionSocket failure _rep is null.");
     }     }
 } }
Line 578 
Line 558 
     }     }
     else     else
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
             "HTTPAcceptor::reopenConnectionSocket failure _rep is null.");             "HTTPAcceptor::reopenConnectionSocket failure _rep is null.");
     }     }
 } }
Line 594 
Line 574 
         // unregister the socket         // unregister the socket
         _monitor->unsolicitSocketMessages(_rep->socket);         _monitor->unsolicitSocketMessages(_rep->socket);
         // close the socket         // close the socket
         Socket::close(_rep->socket);          _rep->closeSocket();
         // Unlink Local Domain Socket Bug# 3312          // Unlink Local Domain Socket
         if (_connectionType == LOCAL_CONNECTION)         if (_connectionType == LOCAL_CONNECTION)
         {         {
 #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
             PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL2,              PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL3,
                 "HTTPAcceptor::reconnectConnectionSocket Unlinking local "                 "HTTPAcceptor::reconnectConnectionSocket Unlinking local "
                     "connection." );                     "connection." );
             ::unlink(             ::unlink(
Line 613 
Line 593 
     }     }
     else     else
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
             "HTTPAcceptor::reconnectConnectionSocket failure _rep is null.");             "HTTPAcceptor::reconnectConnectionSocket failure _rep is null.");
     }     }
 } }
Line 663 
Line 643 
     if (_rep)     if (_rep)
     {     {
         _portNumber = 0;         _portNumber = 0;
         Socket::close(_rep->socket);          _rep->closeSocket();
  
         if (_connectionType == LOCAL_CONNECTION)         if (_connectionType == LOCAL_CONNECTION)
         {         {
Line 680 
Line 660 
     }     }
     else     else
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL1,
             "HTTPAcceptor::unbind failure _rep is null." );             "HTTPAcceptor::unbind failure _rep is null." );
     }     }
 } }
Line 766 
Line 746 
         // TCPIP is down reconnect this acceptor         // TCPIP is down reconnect this acceptor
         if (getSocketError() == PEGASUS_NETWORK_TCPIP_STOPPED)         if (getSocketError() == PEGASUS_NETWORK_TCPIP_STOPPED)
         {         {
             PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,              PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
                 "Socket has an IO error. TCP/IP down. Try to reconnect.");                 "Socket has an IO error. TCP/IP down. Try to reconnect.");
  
             reconnectConnectionSocket();             reconnectConnectionSocket();
  
             return;             return;
         }         }
           PEG_TRACE((
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,              TRC_DISCARDED_DATA,
             "HTTPAcceptor - accept() failure.  errno: $0", errno);              Tracer::LEVEL1,
               "HTTPAcceptor: accept() failed.  errno: %u",
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,              errno));
             "HTTPAcceptor: accept() failed");  
         return;         return;
     }     }
   
       // Use an AutoPtr to ensure the socket handle is closed on exception
       AutoPtr<SocketHandle, CloseSocketHandle> socketPtr(&socket);
   
   #ifndef PEGASUS_OS_TYPE_WINDOWS
     // We need to ensure that the socket number is not higher than     // We need to ensure that the socket number is not higher than
     // what fits into FD_SETSIZE, because we else won't be able to select on it     // what fits into FD_SETSIZE, because we else won't be able to select on it
     // and won't ever communicate correct on that socket.     // and won't ever communicate correct on that socket.
Line 789 
Line 773 
         // the remote connection is invalid, destroy client address.         // the remote connection is invalid, destroy client address.
         delete accept_address;         delete accept_address;
  
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,  
             "HTTPAcceptor out of available sockets. "  
                 "Closing connection to the new client.");  
   
         PEG_TRACE(         PEG_TRACE(
             (TRC_DISCARDED_DATA,             (TRC_DISCARDED_DATA,
              Tracer::LEVEL2,               Tracer::LEVEL1,
              "accept() returned too large socket number %d.",               "HTTPAcceptor out of available sockets."
                    "accept() returned too large socket number %u."
                    "Closing connection to the new client.",
              socket));              socket));
  
         // close the connection  
         Socket::close(socket);  
         return;         return;
     }     }
   #endif
  
     String ipAddress;     String ipAddress;
  
Line 824 
Line 804 
                 0,                 0,
                 NI_NUMERICHOST)))                 NI_NUMERICHOST)))
         {         {
             Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,              PEG_TRACE((
                 "HTTPAcceptor - getnameinfo() failure.  rc: $0", rc);                  TRC_DISCARDED_DATA,
                   Tracer::LEVEL1,
             PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,                  "HTTPAcceptor: getnameinfo() failed.  rc: %d",
                 "HTTPAcceptor: getnameinfo() failed");                  rc));
             delete accept_address;             delete accept_address;
             Socket::close(socket);  
             return;             return;
         }         }
         ipAddress = ipBuffer;         ipAddress = ipBuffer;
Line 851 
Line 830 
     int sock_flags;     int sock_flags;
     if ((sock_flags = fcntl(socket, F_GETFD, 0)) < 0)     if ((sock_flags = fcntl(socket, F_GETFD, 0)) < 0)
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
             "HTTPAcceptor: fcntl(F_GETFD) failed");             "HTTPAcceptor: fcntl(F_GETFD) failed");
     }     }
     else     else
Line 859 
Line 838 
         sock_flags |= FD_CLOEXEC;         sock_flags |= FD_CLOEXEC;
         if (fcntl(socket, F_SETFD, sock_flags) < 0)         if (fcntl(socket, F_SETFD, sock_flags) < 0)
         {         {
             PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,              PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
                 "HTTPAcceptor: fcntl(F_SETFD) failed");                 "HTTPAcceptor: fcntl(F_SETFD) failed");
         }         }
     }     }
 #endif #endif
  
  
     PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 0,      PEG_TRACE((
         "HTTPAcceptor - accept() success.  Socket: $1" ,socket));          TRC_HTTP,
           Tracer::LEVEL3,
           "HTTPAcceptor - accept() success.  Socket: %u",
           socket));
  
     SharedPtr<MP_Socket> mp_socket(new MP_Socket(     SharedPtr<MP_Socket> mp_socket(new MP_Socket(
         socket, _sslcontext, _sslContextObjectLock, ipAddress));         socket, _sslcontext, _sslContextObjectLock, ipAddress));
       // mp_socket now has responsibility for closing the socket handle
       socketPtr.release();
  
     mp_socket->disableBlocking();     mp_socket->disableBlocking();
     mp_socket->setSocketWriteTimeout(_socketWriteTimeout);     mp_socket->setSocketWriteTimeout(_socketWriteTimeout);
Line 881 
Line 865 
  
     if (socketAcceptStatus < 0)     if (socketAcceptStatus < 0)
     {     {
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
             "HTTPAcceptor: SSL_accept() failed");             "HTTPAcceptor: SSL_accept() failed");
         mp_socket->close();  
         return;         return;
     }     }
  
     // Create a new connection and add it to the connection list:     // Create a new connection and add it to the connection list:
  
     HTTPConnection* connection = new HTTPConnection(_monitor, mp_socket,      AutoPtr<HTTPConnection> connection(new HTTPConnection(
         ipAddress, this, static_cast<MessageQueue *>(_outputMessageQueue));          _monitor,
           mp_socket,
           ipAddress,
           this,
           _outputMessageQueue));
  
     if (_idleConnectionTimeoutSeconds)     if (_idleConnectionTimeoutSeconds)
     {     {
Line 901 
Line 888 
  
     if (socketAcceptStatus == 0)     if (socketAcceptStatus == 0)
     {     {
         PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL1,
             "HTTPAcceptor: SSL_accept() pending");             "HTTPAcceptor: SSL_accept() pending");
         connection->_acceptPending = true;         connection->_acceptPending = true;
         Time::gettimeofday(&connection->_acceptPendingStartTime);         Time::gettimeofday(&connection->_acceptPendingStartTime);
Line 915 
Line 902 
             SocketMessage::READ | SocketMessage::EXCEPTION,             SocketMessage::READ | SocketMessage::EXCEPTION,
             connection->getQueueId(), MonitorEntry::TYPE_CONNECTION)) )             connection->getQueueId(), MonitorEntry::TYPE_CONNECTION)) )
     {     {
         // ATTN-DE-P2-2003100503::TODO::Need to enhance code to return          PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL1,
         // an error message to Client application.  
         PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,  
             "HTTPAcceptor::_acceptConnection: Attempt to allocate entry in "             "HTTPAcceptor::_acceptConnection: Attempt to allocate entry in "
                 "_entries table failed.");                 "_entries table failed.");
         delete connection;  
         Socket::close(socket);  
         return;         return;
     }     }
  
     // Save the socket for cleanup later:  
     connection->_entry_index = index;     connection->_entry_index = index;
     AutoMutex autoMut(_rep->_connection_mut);     AutoMutex autoMut(_rep->_connection_mut);
     _rep->connections.append(connection);      _rep->connections.append(connection.get());
       connection.release();
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.111  
changed lines
  Added in v.1.125

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2