void HTTPAcceptor::destroyConnections() { if (_rep) { // For each connection created by this object: AutoMutex autoMut(_rep->_connection_mut); for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++) { HTTPConnection* connection = _rep->connections[i]; SocketHandle socket = connection->getSocket(); // Unsolicit SocketMessages: _monitor->unsolicitSocketMessages(socket); // Destroy the connection (causing it to close): while (connection->refcount.get()) { } delete connection; } _rep->connections.clear(); } }
void HTTPAcceptor::handleEnqueue(Message *message) { if (!message) return; PEGASUS_ASSERT(_rep != 0); switch (message->getType()) { case SOCKET_MESSAGE: { SocketMessage* socketMessage = (SocketMessage*)message; // If this is a connection request: PEGASUS_ASSERT(socketMessage->socket == _rep->socket); PEGASUS_ASSERT(socketMessage->events & SocketMessage::READ); _acceptConnection(); break; } case CLOSE_CONNECTION_MESSAGE: { CloseConnectionMessage* closeConnectionMessage = (CloseConnectionMessage*)message; AutoMutex autoMut(_rep->_connection_mut); for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++) { HTTPConnection* connection = _rep->connections[i]; SocketHandle socket = connection->getSocket(); if (socket == closeConnectionMessage->socket) { _monitor->unsolicitSocketMessages(socket); _rep->connections.remove(i); delete connection; break; } } break; } default: PEGASUS_ASSERT(false); break; } delete message; }