[svn] commit: r2281 - /branches/trac221/src/bin/auth/asio_link.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Jun 25 04:19:48 UTC 2010
Author: jinmei
Date: Fri Jun 25 04:19:47 2010
New Revision: 2281
Log:
use shared_ptr for UDP/TCPServers instead of a helper holder class for exception safeness purposes.
Modified:
branches/trac221/src/bin/auth/asio_link.cc
Modified: branches/trac221/src/bin/auth/asio_link.cc
==============================================================================
--- branches/trac221/src/bin/auth/asio_link.cc (original)
+++ branches/trac221/src/bin/auth/asio_link.cc Fri Jun 25 04:19:47 2010
@@ -21,6 +21,8 @@
#include <asio.hpp>
#include <boost/bind.hpp>
+
+#include <boost/shared_ptr.hpp>
#include <dns/buffer.h>
#include <dns/message.h>
@@ -445,37 +447,19 @@
const IOService::IOCallBack* custom_callback_;
};
-// This is a helper structure just to make the construction of IOServiceImpl
-// exception safe. If the constructor of {UDP/TCP}Server throws an exception,
-// the destructor of this class will automatically perform the necessary
-// cleanup.
-struct ServerSet {
- ServerSet() : udp4_server(NULL), udp6_server(NULL),
- tcp4_server(NULL), tcp6_server(NULL)
- {}
- ~ServerSet() {
- delete udp4_server;
- delete udp6_server;
- delete tcp4_server;
- delete tcp6_server;
- }
- UDPServer* udp4_server;
- UDPServer* udp6_server;
- TCPServer* tcp4_server;
- TCPServer* tcp6_server;
-};
-
class IOServiceImpl {
public:
IOServiceImpl(AuthSrv* auth_server, const char* port,
const bool use_ipv4, const bool use_ipv6);
- ~IOServiceImpl();
asio::io_service io_service_;
AuthSrv* auth_server_;
- UDPServer* udp4_server_;
- UDPServer* udp6_server_;
- TCPServer* tcp4_server_;
- TCPServer* tcp6_server_;
+
+ typedef boost::shared_ptr<UDPServer> UDPServerPtr;
+ typedef boost::shared_ptr<TCPServer> TCPServerPtr;
+ UDPServerPtr udp4_server_;
+ UDPServerPtr udp6_server_;
+ TCPServerPtr tcp4_server_;
+ TCPServerPtr tcp6_server_;
// This member is used only for testing at the moment.
IOService::IOCallBack callback_;
@@ -483,42 +467,24 @@
IOServiceImpl::IOServiceImpl(AuthSrv* auth_server, const char* const port,
const bool use_ipv4, const bool use_ipv6) :
- auth_server_(auth_server), udp4_server_(NULL), udp6_server_(NULL),
- tcp4_server_(NULL), tcp6_server_(NULL)
+ auth_server_(auth_server),
+ udp4_server_(UDPServerPtr()), udp6_server_(UDPServerPtr()),
+ tcp4_server_(TCPServerPtr()), tcp6_server_(TCPServerPtr())
{
- ServerSet servers;
short portnum = atoi(port);
if (use_ipv4) {
- servers.udp4_server = new UDPServer(auth_server, io_service_,
- AF_INET, portnum);
- udp4_server_ = servers.udp4_server;
- servers.tcp4_server = new TCPServer(auth_server, io_service_,
- AF_INET, portnum);
- tcp4_server_ = servers.tcp4_server;
+ udp4_server_ = UDPServerPtr(new UDPServer(auth_server, io_service_,
+ AF_INET, portnum));
+ tcp4_server_ = TCPServerPtr(new TCPServer(auth_server, io_service_,
+ AF_INET, portnum));
}
if (use_ipv6) {
- servers.udp6_server = new UDPServer(auth_server, io_service_,
- AF_INET6, portnum);
- udp6_server_ = servers.udp6_server;
- servers.tcp6_server = new TCPServer(auth_server, io_service_,
- AF_INET6, portnum);
- tcp6_server_ = servers.tcp6_server;
- }
-
- // Now we don't have to worry about exception, and need to make sure that
- // the server objects won't be accidentally cleaned up.
- servers.udp4_server = NULL;
- servers.udp6_server = NULL;
- servers.tcp4_server = NULL;
- servers.tcp6_server = NULL;
-}
-
-IOServiceImpl::~IOServiceImpl() {
- delete udp4_server_;
- delete udp6_server_;
- delete tcp4_server_;
- delete tcp6_server_;
+ udp6_server_ = UDPServerPtr(new UDPServer(auth_server, io_service_,
+ AF_INET6, portnum));
+ tcp6_server_ = TCPServerPtr(new TCPServer(auth_server, io_service_,
+ AF_INET6, portnum));
+ }
}
IOService::IOService(AuthSrv* auth_server, const char* const port,
More information about the bind10-changes
mailing list