summaryrefslogtreecommitdiff
path: root/cpp/lib/common/sys/apr/APRAcceptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/lib/common/sys/apr/APRAcceptor.cpp')
-rw-r--r--cpp/lib/common/sys/apr/APRAcceptor.cpp36
1 files changed, 12 insertions, 24 deletions
diff --git a/cpp/lib/common/sys/apr/APRAcceptor.cpp b/cpp/lib/common/sys/apr/APRAcceptor.cpp
index 6853833797..1bd23819f4 100644
--- a/cpp/lib/common/sys/apr/APRAcceptor.cpp
+++ b/cpp/lib/common/sys/apr/APRAcceptor.cpp
@@ -32,20 +32,16 @@ class APRAcceptor : public Acceptor
{
public:
APRAcceptor(int16_t port, int backlog, int threads, bool trace);
- virtual int16_t getPort() const;
- virtual void run(qpid::sys::SessionHandlerFactory* factory);
+ virtual int getPort() const;
+ virtual void run(qpid::sys::SessionHandlerFactory& factory);
virtual void shutdown();
private:
- void shutdownImpl();
-
- private:
int16_t port;
bool trace;
LFProcessor processor;
apr_socket_t* socket;
volatile bool running;
- Mutex shutdownLock;
};
// Define generic Acceptor::create() to return APRAcceptor.
@@ -69,13 +65,13 @@ Acceptor::~Acceptor() {}
CHECK_APR_SUCCESS(apr_socket_listen(socket, backlog));
}
-int16_t APRAcceptor::getPort() const {
+int APRAcceptor::getPort() const {
apr_sockaddr_t* address;
CHECK_APR_SUCCESS(apr_socket_addr_get(&address, APR_LOCAL, socket));
return address->port;
}
-void APRAcceptor::run(SessionHandlerFactory* factory) {
+void APRAcceptor::run(SessionHandlerFactory& factory) {
running = true;
processor.start();
std::cout << "Listening on port " << getPort() << "..." << std::endl;
@@ -90,32 +86,24 @@ void APRAcceptor::run(SessionHandlerFactory* factory) {
CHECK_APR_SUCCESS(apr_socket_opt_set(client, APR_SO_SNDBUF, 32768));
CHECK_APR_SUCCESS(apr_socket_opt_set(client, APR_SO_RCVBUF, 32768));
LFSessionContext* session = new LFSessionContext(APRPool::get(), client, &processor, trace);
- session->init(factory->create(session));
+ session->init(factory.create(session));
}else{
- Mutex::ScopedLock locker(shutdownLock);
- if(running) {
- if(status != APR_EINTR){
- std::cout << "ERROR: " << get_desc(status) << std::endl;
- }
- shutdownImpl();
+ running = false;
+ if(status != APR_EINTR){
+ std::cout << "ERROR: " << get_desc(status) << std::endl;
}
}
}
+ shutdown();
}
void APRAcceptor::shutdown() {
- Mutex::ScopedLock locker(shutdownLock);
if (running) {
- shutdownImpl();
+ running = false;
+ processor.stop();
+ CHECK_APR_SUCCESS(apr_socket_close(socket));
}
}
-void APRAcceptor::shutdownImpl() {
- Mutex::ScopedLock locker(shutdownLock);
- running = false;
- processor.stop();
- CHECK_APR_SUCCESS(apr_socket_close(socket));
-}
-
}}