]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[master] exit from SyncUDPServer::handleRead immediately if stopped.
authorJINMEI Tatuya <jinmei@isc.org>
Thu, 9 May 2013 06:05:14 +0000 (23:05 -0700)
committerJINMEI Tatuya <jinmei@isc.org>
Thu, 9 May 2013 06:05:14 +0000 (23:05 -0700)
while not really correct, this seems to work as a workaround for the crash
problem reported in #2946.
okayed on jabber.

src/lib/asiodns/sync_udp_server.cc

index 9a066911a66ffff0a45e8194af2e91c2e2774810..989484f4ebd5fa880ba97c9bab28682d28a85633 100644 (file)
@@ -75,6 +75,15 @@ SyncUDPServer::scheduleRead() {
 
 void
 SyncUDPServer::handleRead(const asio::error_code& ec, const size_t length) {
+    // If the server has been stopped, it could even have been destroyed
+    // by the time of this call.  We'll solve this problem in #2946, but
+    // until then we exit as soon as possible without accessing any other
+    // invalidated fields (note that referencing stopped_ is also incorrect,
+    // but experiments showed it often keeps the original value in practice,
+    // so we live with it until the complete fix).
+    if (stopped_) {
+        return;
+    }
     if (ec) {
         using namespace asio::error;
         const asio::error_code::value_type err_val = ec.value();