diff options
Diffstat (limited to 'cpp/lib/common/sys/apr/APRAcceptor.cpp')
-rw-r--r-- | cpp/lib/common/sys/apr/APRAcceptor.cpp | 36 |
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)); -} - }} |