This is an automated email from the ASF dual-hosted git repository.

tross pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git

commit 45332d36a1091d872cf857178432e04631af8456
Author: Ted Ross <tr...@redhat.com>
AuthorDate: Fri Mar 22 09:42:41 2019 -0400

    DISPATCH-1299 - Update safe-pointer use in the lookup client to use the 
newer API.
    
    (cherry picked from commit 1ee6aa76e2bdcbdcd4fc9d9f9fe7a7f0bd7a97a5)
---
 .../modules/address_lookup_client/lookup_client.c  | 53 ++++++++++++----------
 1 file changed, 28 insertions(+), 25 deletions(-)

diff --git a/src/router_core/modules/address_lookup_client/lookup_client.c 
b/src/router_core/modules/address_lookup_client/lookup_client.c
index 1f9abd8..c71673f 100644
--- a/src/router_core/modules/address_lookup_client/lookup_client.c
+++ b/src/router_core/modules/address_lookup_client/lookup_client.c
@@ -43,13 +43,11 @@ static void on_request_done(qdr_core_t    *core,
 
 typedef struct qcm_addr_lookup_request_t {
     DEQ_LINKS(struct qcm_addr_lookup_request_t);
-    qdr_connection_t  *conn;
-    qdr_link_t        *link;
-    uint32_t           conn_sequence;
-    uint32_t           link_sequence;
-    qd_direction_t     dir;
-    qdr_terminus_t    *source;
-    qdr_terminus_t    *target;
+    qdr_connection_t_sp  conn_sp;
+    qdr_link_t_sp        link_sp;
+    qd_direction_t       dir;
+    qdr_terminus_t      *source;
+    qdr_terminus_t      *target;
 } qcm_addr_lookup_request_t;
 
 DEQ_DECLARE(qcm_addr_lookup_request_t, qcm_addr_lookup_request_list_t);
@@ -404,13 +402,19 @@ static void qdr_link_react_to_first_attach_CT(qdr_core_t  
     *core,
 
 static void qcm_addr_lookup_local_search(qcm_lookup_client_t *client, 
qcm_addr_lookup_request_t *request)
 {
-    bool            link_route;
-    bool            unavailable;
-    bool            core_endpoint;
+    bool              link_route;
+    bool              unavailable;
+    bool              core_endpoint;
+    qdr_connection_t *conn = safe_deref_qdr_connection_t(request->conn_sp);
+    qdr_link_t       *link = safe_deref_qdr_link_t(request->link_sp);
+
+    if (conn == 0 || link == 0)
+        return;
+    
     qdr_terminus_t *term = request->dir == QD_INCOMING ? request->target : 
request->source;
     qdr_address_t  *addr = qdr_lookup_terminus_address_CT(client->core,
                                                           request->dir,
-                                                          request->conn,
+                                                          conn,
                                                           term,
                                                           true,
                                                           true,
@@ -418,9 +422,9 @@ static void 
qcm_addr_lookup_local_search(qcm_lookup_client_t *client, qcm_addr_l
                                                           &unavailable,
                                                           &core_endpoint);
     qdr_link_react_to_first_attach_CT(client->core,
-                                      request->conn,
+                                      conn,
                                       addr,
-                                      request->link,
+                                      link,
                                       request->dir,
                                       request->source,
                                       request->target,
@@ -516,15 +520,12 @@ static void qcm_addr_lookup_CT(void             *context,
         //
         qcm_addr_lookup_request_t *request = new_qcm_addr_lookup_request_t();
         DEQ_ITEM_INIT(request);
-        request->conn   = conn;
-        request->link   = link;
+        set_safe_ptr_qdr_connection_t(conn, &request->conn_sp);
+        set_safe_ptr_qdr_link_t(link, &request->link_sp);
         request->dir    = dir;
         request->source = source;
         request->target = target;
 
-        request->conn_sequence = qd_alloc_sequence(conn);
-        request->link_sequence = qd_alloc_sequence(link);
-
         DEQ_INSERT_TAIL(client->pending_requests, request);
         qcm_addr_lookup_process_pending_requests_CT(client);
         return;
@@ -606,13 +607,15 @@ static uint64_t on_reply(qdr_core_t    *core,
     bool                         is_link_route;
     bool                         has_destinations;
 
+    qdr_connection_t *conn = safe_deref_qdr_connection_t(request->conn_sp);
+    qdr_link_t       *link = safe_deref_qdr_link_t(request->link_sp);
+
     //
-    // If the pointer sequences mismatch for either the connection or link,
-    // exit without processing because either the connection or link has
-    // been freed while the request was in-flight.
+    // If the connection or link pointers are NULL, exit without processing
+    // because either the connection or link has been freed while the
+    // request was in-flight.
     //
-    if (request->conn_sequence != qd_alloc_sequence(request->conn) ||
-        request->link_sequence != qd_alloc_sequence(request->link)) {
+    if (conn == 0 || link == 0) {
         qdr_terminus_free(request->source);
         qdr_terminus_free(request->target);
         return 0;
@@ -633,13 +636,13 @@ static uint64_t on_reply(qdr_core_t    *core,
             //
             // The address is for a link route, but there are no destinations 
upstream.  Fail with no-route.
             //
-            qdr_link_outbound_detach_CT(core, request->link, 0, 
QDR_CONDITION_NO_ROUTE_TO_DESTINATION, true);
+            qdr_link_outbound_detach_CT(core, link, 0, 
QDR_CONDITION_NO_ROUTE_TO_DESTINATION, true);
 
         else
             //
             // The address is for a link route and there are destinations 
upstream.  Directly forward the attach.
             //
-            qdr_forward_link_direct_CT(core, client->edge_conn, request->link, 
request->source, request->target, 0, 0);
+            qdr_forward_link_direct_CT(core, client->edge_conn, link, 
request->source, request->target, 0, 0);
 
     } else {
         //


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to