DISPATCH-343 - Fixed a regression affecting multi-frame presettled deliveries.
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 8b2b114..a9612ea 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -461,8 +461,8 @@
     //
     qdr_delivery_ref_t *ref = DEQ_HEAD(updated_deliveries);
     while (ref) {
-        qdr_del_delivery_ref(&updated_deliveries, ref);
         qdr_delivery_decref(ref->dlv);
+        qdr_del_delivery_ref(&updated_deliveries, ref);
         ref = DEQ_HEAD(updated_deliveries);
     }
 
diff --git a/src/router_node.c b/src/router_node.c
index ff5c58f..10794ac 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -374,9 +374,17 @@
     bool            give_reference = false;
 
     //
+    // It's important to not do any processing without a qdr_delivery.  When pre-settled
+    // multi-frame deliveries arrive, it's possible for the settlement to register before
+    // the whole message arrives.  Such premature settlement indications must be ignored.
+    //
+    if (!delivery)
+        return;
+
+    //
     // If the delivery is settled, remove the linkage between the PN and QDR deliveries.
     //
-    if (pn_delivery_settled(pnd) && !!delivery) {
+    if (pn_delivery_settled(pnd)) {
         pn_delivery_set_context(pnd, 0);
         qdr_delivery_set_context(delivery, 0);
 
@@ -389,10 +397,9 @@
     //
     // Update the disposition of the delivery
     //
-    if (!!delivery)
-        qdr_delivery_update_disposition(router->router_core, delivery,
-                                        pn_delivery_remote_state(pnd), pn_delivery_settled(pnd),
-                                        give_reference);
+    qdr_delivery_update_disposition(router->router_core, delivery,
+                                    pn_delivery_remote_state(pnd), pn_delivery_settled(pnd),
+                                    give_reference);
 
     //
     // If settled, close out the delivery