Author: rhs
Date: Wed May 29 14:57:25 2013
New Revision: 1487508

URL: http://svn.apache.org/r1487508
Log:
removed redundant back pointers

Modified:
    qpid/proton/trunk/proton-c/src/engine/engine-internal.h
    qpid/proton/trunk/proton-c/src/engine/engine.c

Modified: qpid/proton/trunk/proton-c/src/engine/engine-internal.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine-internal.h?rev=1487508&r1=1487507&r2=1487508&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine-internal.h (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine-internal.h Wed May 29 14:57:25 
2013
@@ -68,7 +68,6 @@ typedef struct {
 } pn_delivery_map_t;
 
 typedef struct {
-  pn_link_t *link;
   // XXX: stop using negative numbers
   uint32_t local_handle;
   uint32_t remote_handle;
@@ -77,7 +76,6 @@ typedef struct {
 } pn_link_state_t;
 
 typedef struct {
-  pn_session_t *session;
   // XXX: stop using negative numbers
   uint16_t local_channel;
   uint16_t remote_channel;

Modified: qpid/proton/trunk/proton-c/src/engine/engine.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine.c?rev=1487508&r1=1487507&r2=1487508&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Wed May 29 14:57:25 2013
@@ -631,7 +631,6 @@ pn_session_t *pn_session(pn_connection_t
 
   // begin transport state
   memset(&ssn->state, 0, sizeof(ssn->state));
-  ssn->state.session = ssn;
   ssn->state.local_channel = (uint16_t)-1;
   ssn->state.remote_channel = (uint16_t)-1;
   pn_delivery_map_init(&ssn->state.incoming, 0, PN_SESSION_WINDOW);
@@ -737,27 +736,21 @@ void pn_transport_init(pn_transport_t *t
   transport->output_pending = 0;
 }
 
-pn_session_state_t *pn_session_get_state(pn_transport_t *transport, 
pn_session_t *ssn)
+pn_session_t *pn_channel_state(pn_transport_t *transport, uint16_t channel)
 {
-  return &ssn->state;
+  return (pn_session_t *) pn_hash_get(transport->remote_channels, channel);
 }
 
-pn_session_state_t *pn_channel_state(pn_transport_t *transport, uint16_t 
channel)
+static void pn_map_channel(pn_transport_t *transport, uint16_t channel, 
pn_session_t *session)
 {
-  pn_session_t *ssn = (pn_session_t *) pn_hash_get(transport->remote_channels, 
channel);
-  return &ssn->state;
+  pn_hash_put(transport->remote_channels, channel, session);
+  session->state.remote_channel = channel;
 }
 
-static void pn_map_channel(pn_transport_t *transport, uint16_t channel, 
pn_session_state_t *state)
+static void pn_unmap_channel(pn_transport_t *transport, pn_session_t *ssn)
 {
-  pn_hash_put(transport->remote_channels, channel, state->session);
-  state->remote_channel = channel;
-}
-
-static void pn_unmap_channel(pn_transport_t *transport, pn_session_state_t 
*state)
-{
-  pn_hash_del(transport->remote_channels, state->remote_channel);
-  state->remote_channel = -2;
+  pn_hash_del(transport->remote_channels, ssn->state.remote_channel);
+  ssn->state.remote_channel = -2;
 }
 
 pn_transport_t *pn_transport()
@@ -891,7 +884,6 @@ pn_link_t *pn_link_new(int type, pn_sess
   link->context = 0;
 
   // begin transport state
-  link->state.link = link;
   link->state.local_handle = -1;
   link->state.remote_handle = -1;
   link->state.delivery_count = 0;
@@ -1048,27 +1040,21 @@ int pn_terminus_copy(pn_terminus_t *term
   return 0;
 }
 
-pn_link_state_t *pn_link_get_state(pn_session_state_t *ssn_state, pn_link_t 
*link)
+static void pn_map_handle(pn_session_t *ssn, uint32_t handle, pn_link_t *link)
 {
-  return &link->state;
+  link->state.remote_handle = handle;
+  pn_hash_put(ssn->state.remote_handles, handle, link);
 }
 
-static void pn_map_handle(pn_session_state_t *ssn_state, uint32_t handle, 
pn_link_state_t *state)
+static void pn_unmap_handle(pn_session_t *ssn, pn_link_t *link)
 {
-  state->remote_handle = handle;
-  pn_hash_put(ssn_state->remote_handles, handle, state->link);
+  pn_hash_del(ssn->state.remote_handles, link->state.remote_handle);
+  link->state.remote_handle = -2;
 }
 
-static void pn_unmap_handle(pn_session_state_t *ssn_state, pn_link_state_t 
*state)
+pn_link_t *pn_handle_state(pn_session_t *ssn, uint32_t handle)
 {
-  pn_hash_del(ssn_state->remote_handles, state->remote_handle);
-  state->remote_handle = -2;
-}
-
-pn_link_state_t *pn_handle_state(pn_session_state_t *ssn_state, uint32_t 
handle)
-{
-  pn_link_t *link = (pn_link_t *) pn_hash_get(ssn_state->remote_handles, 
handle);
-  return &link->state;
+  return (pn_link_t *) pn_hash_get(ssn->state.remote_handles, handle);
 }
 
 pn_link_t *pn_sender(pn_session_t *session, const char *name)
@@ -1419,25 +1405,24 @@ int pn_do_begin(pn_dispatcher_t *disp)
   } else {
     ssn = pn_session(transport->connection);
   }
-  pn_session_state_t *state = pn_session_get_state(transport, ssn);
-  state->incoming_transfer_count = next;
-  pn_map_channel(transport, disp->channel, state);
-  PN_SET_REMOTE(state->session->endpoint.state, PN_REMOTE_ACTIVE);
+  ssn->state.incoming_transfer_count = next;
+  pn_map_channel(transport, disp->channel, ssn);
+  PN_SET_REMOTE(ssn->endpoint.state, PN_REMOTE_ACTIVE);
 
   return 0;
 }
 
-pn_link_state_t *pn_find_link(pn_session_state_t *ssn_state, pn_bytes_t name, 
bool is_sender)
+pn_link_t *pn_find_link(pn_session_t *ssn, pn_bytes_t name, bool is_sender)
 {
   pn_endpoint_type_t type = is_sender ? SENDER : RECEIVER;
 
-  for (size_t i = 0; i < pn_list_size(ssn_state->session->links); i++)
+  for (size_t i = 0; i < pn_list_size(ssn->links); i++)
   {
-    pn_link_t *link = (pn_link_t *) pn_list_get(ssn_state->session->links, i);
+    pn_link_t *link = (pn_link_t *) pn_list_get(ssn->links, i);
     if (link->endpoint.type == type &&
         !strncmp(name.start, pn_string_get(link->name), name.size))
     {
-      return pn_link_get_state(ssn_state, link);
+      return link;
     }
   }
   return NULL;
@@ -1484,27 +1469,23 @@ int pn_do_attach(pn_dispatcher_t *disp)
   strncpy(strname, name.start, name.size);
   strname[name.size] = '\0';
 
-  pn_session_state_t *ssn_state = pn_channel_state(transport, disp->channel);
-  pn_link_state_t *link_state = pn_find_link(ssn_state, name, is_sender);
-  pn_link_t *link;
-  if (!link_state) {
+  pn_session_t *ssn = pn_channel_state(transport, disp->channel);
+  pn_link_t *link = pn_find_link(ssn, name, is_sender);
+  if (!link) {
     if (is_sender) {
-      link = (pn_link_t *) pn_sender(ssn_state->session, strname);
+      link = (pn_link_t *) pn_sender(ssn, strname);
     } else {
-      link = (pn_link_t *) pn_receiver(ssn_state->session, strname);
+      link = (pn_link_t *) pn_receiver(ssn, strname);
     }
-    link_state = pn_link_get_state(ssn_state, link);
-  } else {
-    link = link_state->link;
   }
 
   if (strheap) {
     free(strheap);
   }
 
-  pn_map_handle(ssn_state, handle, link_state);
+  pn_map_handle(ssn, handle, link);
   PN_SET_REMOTE(link->endpoint.state, PN_REMOTE_ACTIVE);
-  pn_terminus_t *rsrc = &link_state->link->remote_source;
+  pn_terminus_t *rsrc = &link->remote_source;
   if (source.start) {
     pn_terminus_set_type(rsrc, PN_SOURCE);
     pn_terminus_set_address_bytes(rsrc, source);
@@ -1515,7 +1496,7 @@ int pn_do_attach(pn_dispatcher_t *disp)
   } else {
     pn_terminus_set_type(rsrc, PN_UNSPECIFIED);
   }
-  pn_terminus_t *rtgt = &link_state->link->remote_target;
+  pn_terminus_t *rtgt = &link->remote_target;
   if (target.start) {
     pn_terminus_set_type(rtgt, PN_TARGET);
     pn_terminus_set_address_bytes(rtgt, target);
@@ -1551,13 +1532,13 @@ int pn_do_attach(pn_dispatcher_t *disp)
   pn_data_rewind(link->remote_target.capabilities);
 
   if (!is_sender) {
-    link_state->delivery_count = idc;
+    link->state.delivery_count = idc;
   }
 
   return 0;
 }
 
-int pn_post_flow(pn_transport_t *transport, pn_session_state_t *ssn_state, 
pn_link_state_t *state);
+int pn_post_flow(pn_transport_t *transport, pn_session_t *ssn, pn_link_t 
*link);
 
 int pn_do_transfer(pn_dispatcher_t *disp)
 {
@@ -1571,22 +1552,21 @@ int pn_do_transfer(pn_dispatcher_t *disp
   int err = pn_scan_args(disp, "D.[I?Iz..o]", &handle, &id_present, &id, &tag,
                          &more);
   if (err) return err;
-  pn_session_state_t *ssn_state = pn_channel_state(transport, disp->channel);
-  pn_link_state_t *link_state = pn_handle_state(ssn_state, handle);
-  pn_link_t *link = link_state->link;
+  pn_session_t *ssn = pn_channel_state(transport, disp->channel);
+  pn_link_t *link = pn_handle_state(ssn, handle);
   pn_delivery_t *delivery;
   if (link->unsettled_tail && !link->unsettled_tail->done) {
     delivery = link->unsettled_tail;
   } else {
-    pn_delivery_map_t *incoming = &ssn_state->incoming;
+    pn_delivery_map_t *incoming = &ssn->state.incoming;
 
     if (!pn_delivery_map_available(incoming)) {
       return pn_do_error(transport, "amqp:session:window-violation", "incoming 
session window exceeded");
     }
 
-    if (!ssn_state->incoming_init) {
+    if (!ssn->state.incoming_init) {
       incoming->next = id;
-      ssn_state->incoming_init = true;
+      ssn->state.incoming_init = true;
     }
 
     delivery = pn_delivery(link, pn_dtag(tag.start, tag.size));
@@ -1600,19 +1580,19 @@ int pn_do_transfer(pn_dispatcher_t *disp
       return err;
     }
 
-    link_state->delivery_count++;
-    link_state->link_credit--;
+    link->state.delivery_count++;
+    link->state.link_credit--;
     link->queued++;
   }
 
   pn_buffer_append(delivery->bytes, disp->payload, disp->size);
   delivery->done = !more;
 
-  ssn_state->incoming_transfer_count++;
-  ssn_state->incoming_window--;
+  ssn->state.incoming_transfer_count++;
+  ssn->state.incoming_window--;
 
-  if (!ssn_state->incoming_window && (int32_t) link_state->local_handle >= 0) {
-    pn_post_flow(transport, ssn_state, link_state);
+  if (!ssn->state.incoming_window && (int32_t) link->state.local_handle >= 0) {
+    pn_post_flow(transport, ssn, link);
   }
 
   return 0;
@@ -1630,17 +1610,16 @@ int pn_do_flow(pn_dispatcher_t *disp)
                          &delivery_count, &link_credit, &drain);
   if (err) return err;
 
-  pn_session_state_t *ssn_state = pn_channel_state(transport, disp->channel);
+  pn_session_t *ssn = pn_channel_state(transport, disp->channel);
 
   if (inext_init) {
-    ssn_state->outgoing_window = inext + iwin - 
ssn_state->outgoing_transfer_count;
+    ssn->state.outgoing_window = inext + iwin - 
ssn->state.outgoing_transfer_count;
   } else {
-    ssn_state->outgoing_window = iwin;
+    ssn->state.outgoing_window = iwin;
   }
 
   if (handle_init) {
-    pn_link_state_t *link_state = pn_handle_state(ssn_state, handle);
-    pn_link_t *link = link_state->link;
+    pn_link_t *link = pn_handle_state(ssn, handle);
     if (link->endpoint.type == SENDER) {
       pn_sequence_t receiver_count;
       if (dcount_init) {
@@ -1649,17 +1628,17 @@ int pn_do_flow(pn_dispatcher_t *disp)
         // our initial delivery count
         receiver_count = 0;
       }
-      pn_sequence_t old = link_state->link_credit;
-      link_state->link_credit = receiver_count + link_credit - 
link_state->delivery_count;
-      link->credit += link_state->link_credit - old;
+      pn_sequence_t old = link->state.link_credit;
+      link->state.link_credit = receiver_count + link_credit - 
link->state.delivery_count;
+      link->credit += link->state.link_credit - old;
       link->drain = drain;
       pn_delivery_t *delivery = pn_link_current(link);
       if (delivery) pn_work_update(transport->connection, delivery);
     } else {
-      pn_sequence_t delta = delivery_count - link_state->delivery_count;
+      pn_sequence_t delta = delivery_count - link->state.delivery_count;
       if (delta > 0) {
-        link_state->delivery_count += delta;
-        link_state->link_credit -= delta;
+        link->state.delivery_count += delta;
+        link->state.link_credit -= delta;
         link->credit -= delta;
       }
     }
@@ -1680,7 +1659,7 @@ int pn_do_disposition(pn_dispatcher_t *d
   if (err) return err;
   if (!last_init) last = first;
 
-  pn_session_state_t *ssn_state = pn_channel_state(transport, disp->channel);
+  pn_session_t *ssn = pn_channel_state(transport, disp->channel);
   pn_disposition_t dispo = (pn_disposition_t) 0;
   if (code_init) {
     switch (code)
@@ -1700,9 +1679,9 @@ int pn_do_disposition(pn_dispatcher_t *d
 
   pn_delivery_map_t *deliveries;
   if (role) {
-    deliveries = &ssn_state->outgoing;
+    deliveries = &ssn->state.outgoing;
   } else {
-    deliveries = &ssn_state->incoming;
+    deliveries = &ssn->state.incoming;
   }
 
   for (pn_sequence_t id = first; id <= last; id++) {
@@ -1740,17 +1719,16 @@ int pn_do_detach(pn_dispatcher_t *disp)
   int err = pn_scan_args(disp, "D.[Io]", &handle, &closed);
   if (err) return err;
 
-  pn_session_state_t *ssn_state = pn_channel_state(transport, disp->channel);
-  if (!ssn_state) {
+  pn_session_t *ssn = pn_channel_state(transport, disp->channel);
+  if (!ssn) {
     return pn_do_error(transport, "amqp:invalid-field", "no such channel: %u", 
disp->channel);
   }
-  pn_link_state_t *link_state = pn_handle_state(ssn_state, handle);
-  pn_link_t *link = link_state->link;
+  pn_link_t *link = pn_handle_state(ssn, handle);
 
   err = pn_scan_error(disp, &link->endpoint.remote_condition, true);
   if (err) return err;
 
-  pn_unmap_handle(ssn_state, link_state);
+  pn_unmap_handle(ssn, link);
 
   if (closed)
   {
@@ -1765,12 +1743,11 @@ int pn_do_detach(pn_dispatcher_t *disp)
 int pn_do_end(pn_dispatcher_t *disp)
 {
   pn_transport_t *transport = (pn_transport_t *) disp->context;
-  pn_session_state_t *ssn_state = pn_channel_state(transport, disp->channel);
-  pn_session_t *session = ssn_state->session;
-  int err = pn_scan_error(disp, &session->endpoint.remote_condition, false);
+  pn_session_t *ssn = pn_channel_state(transport, disp->channel);
+  int err = pn_scan_error(disp, &ssn->endpoint.remote_condition, false);
   if (err) return err;
-  pn_unmap_channel(transport, ssn_state);
-  PN_SET_REMOTE(session->endpoint.state, PN_REMOTE_CLOSED);
+  pn_unmap_channel(transport, ssn);
+  PN_SET_REMOTE(ssn->endpoint.state, PN_REMOTE_CLOSED);
   return 0;
 }
 
@@ -2002,7 +1979,7 @@ int pn_process_ssn_setup(pn_transport_t 
   if (endpoint->type == SESSION && transport->open_sent)
   {
     pn_session_t *ssn = (pn_session_t *) endpoint;
-    pn_session_state_t *state = pn_session_get_state(transport, ssn);
+    pn_session_state_t *state = &ssn->state;
     if (!(endpoint->state & PN_LOCAL_UNINIT) && state->local_channel == 
(uint16_t) -1)
     {
       uint16_t channel = allocate_alias(transport->local_channels);
@@ -2041,8 +2018,8 @@ int pn_process_link_setup(pn_transport_t
                                endpoint->type == RECEIVER))
   {
     pn_link_t *link = (pn_link_t *) endpoint;
-    pn_session_state_t *ssn_state = pn_session_get_state(transport, 
link->session);
-    pn_link_state_t *state = pn_link_get_state(ssn_state, link);
+    pn_session_state_t *ssn_state = &link->session->state;
+    pn_link_state_t *state = &link->state;
     if (((int16_t) ssn_state->local_channel >= 0) &&
         !(endpoint->state & PN_LOCAL_UNINIT) && state->local_handle == 
(uint32_t) -1)
     {
@@ -2079,19 +2056,20 @@ int pn_process_link_setup(pn_transport_t
   return 0;
 }
 
-int pn_post_flow(pn_transport_t *transport, pn_session_state_t *ssn_state, 
pn_link_state_t *state)
+int pn_post_flow(pn_transport_t *transport, pn_session_t *ssn, pn_link_t *link)
 {
-  ssn_state->incoming_window = pn_delivery_map_available(&ssn_state->incoming);
-  bool link = (bool) state;
-  return pn_post_frame(transport->disp, ssn_state->local_channel, 
"DL[?IIII?I?I?In?o]", FLOW,
-                       (int16_t) ssn_state->remote_channel >= 0, 
ssn_state->incoming_transfer_count,
-                       ssn_state->incoming_window,
-                       ssn_state->outgoing.next,
-                       pn_delivery_map_available(&ssn_state->outgoing),
-                       link, state ? state->local_handle : 0,
-                       link, state ? state->delivery_count : 0,
-                       link, state ? state->link_credit : 0,
-                       link, state ? state->link->drain : false);
+  ssn->state.incoming_window = pn_delivery_map_available(&ssn->state.incoming);
+  bool linkq = (bool) link;
+  pn_link_state_t *state = &link->state;
+  return pn_post_frame(transport->disp, ssn->state.local_channel, 
"DL[?IIII?I?I?In?o]", FLOW,
+                       (int16_t) ssn->state.remote_channel >= 0, 
ssn->state.incoming_transfer_count,
+                       ssn->state.incoming_window,
+                       ssn->state.outgoing.next,
+                       pn_delivery_map_available(&ssn->state.outgoing),
+                       linkq, linkq ? state->local_handle : 0,
+                       linkq, linkq ? state->delivery_count : 0,
+                       linkq, linkq ? state->link_credit : 0,
+                       linkq, linkq ? link->drain : false);
 }
 
 int pn_process_flow_receiver(pn_transport_t *transport, pn_endpoint_t 
*endpoint)
@@ -2099,34 +2077,34 @@ int pn_process_flow_receiver(pn_transpor
   if (endpoint->type == RECEIVER && endpoint->state & PN_LOCAL_ACTIVE)
   {
     pn_link_t *rcv = (pn_link_t *) endpoint;
-    pn_session_state_t *ssn_state = pn_session_get_state(transport, 
rcv->session);
-    pn_link_state_t *state = pn_link_get_state(ssn_state, rcv);
-    if ((int16_t) ssn_state->local_channel >= 0 &&
+    pn_session_t *ssn = rcv->session;
+    pn_link_state_t *state = &rcv->state;
+    if ((int16_t) ssn->state.local_channel >= 0 &&
         (int32_t) state->local_handle >= 0 &&
-        ((rcv->drain || state->link_credit != rcv->credit - rcv->queued) || 
!ssn_state->incoming_window)) {
+        ((rcv->drain || state->link_credit != rcv->credit - rcv->queued) || 
!ssn->state.incoming_window)) {
       state->link_credit = rcv->credit - rcv->queued;
-      return pn_post_flow(transport, ssn_state, state);
+      return pn_post_flow(transport, ssn, rcv);
     }
   }
 
   return 0;
 }
 
-int pn_flush_disp(pn_transport_t *transport, pn_session_state_t *ssn_state)
+int pn_flush_disp(pn_transport_t *transport, pn_session_t *ssn)
 {
-  uint64_t code = ssn_state->disp_code;
-  bool settled = ssn_state->disp_settled;
-  if (ssn_state->disp) {
-    int err = pn_post_frame(transport->disp, ssn_state->local_channel, 
"DL[oIIo?DL[]]", DISPOSITION,
-                            ssn_state->disp_type, ssn_state->disp_first, 
ssn_state->disp_last,
+  uint64_t code = ssn->state.disp_code;
+  bool settled = ssn->state.disp_settled;
+  if (ssn->state.disp) {
+    int err = pn_post_frame(transport->disp, ssn->state.local_channel, 
"DL[oIIo?DL[]]", DISPOSITION,
+                            ssn->state.disp_type, ssn->state.disp_first, 
ssn->state.disp_last,
                             settled, (bool)code, code);
     if (err) return err;
-    ssn_state->disp_type = 0;
-    ssn_state->disp_code = 0;
-    ssn_state->disp_settled = 0;
-    ssn_state->disp_first = 0;
-    ssn_state->disp_last = 0;
-    ssn_state->disp = false;
+    ssn->state.disp_type = 0;
+    ssn->state.disp_code = 0;
+    ssn->state.disp_settled = 0;
+    ssn->state.disp_first = 0;
+    ssn->state.disp_last = 0;
+    ssn->state.disp = false;
   }
   return 0;
 }
@@ -2134,7 +2112,8 @@ int pn_flush_disp(pn_transport_t *transp
 int pn_post_disp(pn_transport_t *transport, pn_delivery_t *delivery)
 {
   pn_link_t *link = delivery->link;
-  pn_session_state_t *ssn_state = pn_session_get_state(transport, 
link->session);
+  pn_session_t *ssn = link->session;
+  pn_session_state_t *ssn_state = &ssn->state;
   pn_modified(transport->connection, &link->session->endpoint);
   pn_delivery_state_t *state = &delivery->state;
   assert(state->init);
@@ -2171,7 +2150,7 @@ int pn_post_disp(pn_transport_t *transpo
   }
 
   if (ssn_state->disp) {
-    int err = pn_flush_disp(transport, ssn_state);
+    int err = pn_flush_disp(transport, ssn);
     if (err) return err;
   }
 
@@ -2188,8 +2167,8 @@ int pn_post_disp(pn_transport_t *transpo
 int pn_process_tpwork_sender(pn_transport_t *transport, pn_delivery_t 
*delivery, bool* allocation_blocked)
 {
   pn_link_t *link = delivery->link;
-  pn_session_state_t *ssn_state = pn_session_get_state(transport, 
link->session);
-  pn_link_state_t *link_state = pn_link_get_state(ssn_state, link);
+  pn_session_state_t *ssn_state = &link->session->state;
+  pn_link_state_t *link_state = &link->state;
   if ((int16_t) ssn_state->local_channel >= 0 && (int32_t) 
link_state->local_handle >= 0) {
     pn_delivery_state_t *state = delivery->state.init ? &delivery->state : 
NULL;
     if (!(*allocation_blocked) && !state && 
pn_delivery_map_available(&ssn_state->outgoing)) {
@@ -2242,18 +2221,18 @@ int pn_process_tpwork_receiver(pn_transp
 {
   pn_link_t *link = delivery->link;
   // XXX: need to prevent duplicate disposition sending
-  pn_session_state_t *ssn_state = pn_session_get_state(transport, 
link->session);
-  if ((int16_t) ssn_state->local_channel >= 0 && !delivery->remote_settled && 
delivery->state.init) {
+  pn_session_t *ssn = link->session;
+  if ((int16_t) ssn->state.local_channel >= 0 && !delivery->remote_settled && 
delivery->state.init) {
     int err = pn_post_disp(transport, delivery);
     if (err) return err;
   }
 
   if (delivery->local_settled) {
-    size_t available = pn_delivery_map_available(&ssn_state->incoming);
-    pn_full_settle(&ssn_state->incoming, delivery);
-    if (!ssn_state->incoming_window &&
-        pn_delivery_map_available(&ssn_state->incoming) > available) {
-      int err = pn_post_flow(transport, ssn_state, NULL);
+    size_t available = pn_delivery_map_available(&ssn->state.incoming);
+    pn_full_settle(&ssn->state.incoming, delivery);
+    if (!ssn->state.incoming_window &&
+        pn_delivery_map_available(&ssn->state.incoming) > available) {
+      int err = pn_post_flow(transport, ssn, NULL);
       if (err) return err;
     }
   }
@@ -2298,10 +2277,10 @@ int pn_process_flush_disp(pn_transport_t
 {
   if (endpoint->type == SESSION) {
     pn_session_t *session = (pn_session_t *) endpoint;
-    pn_session_state_t *state = pn_session_get_state(transport, session);
+    pn_session_state_t *state = &session->state;
     if ((int16_t) state->local_channel >= 0 && !transport->close_sent)
     {
-      int err = pn_flush_disp(transport, state);
+      int err = pn_flush_disp(transport, session);
       if (err) return err;
     }
   }
@@ -2314,17 +2293,17 @@ int pn_process_flow_sender(pn_transport_
   if (endpoint->type == SENDER && endpoint->state & PN_LOCAL_ACTIVE)
   {
     pn_link_t *snd = (pn_link_t *) endpoint;
-    pn_session_state_t *ssn_state = pn_session_get_state(transport, 
snd->session);
-    pn_link_state_t *state = pn_link_get_state(ssn_state, snd);
-    if ((int16_t) ssn_state->local_channel >= 0 &&
+    pn_session_t *ssn = snd->session;
+    pn_link_state_t *state = &snd->state;
+    if ((int16_t) ssn->state.local_channel >= 0 &&
         (int32_t) state->local_handle >= 0 &&
         snd->drain && snd->drained) {
-      pn_delivery_t *tail = state->link->unsettled_tail;
+      pn_delivery_t *tail = snd->unsettled_tail;
       if (!tail || !pn_delivery_buffered(tail)) {
         state->delivery_count += state->link_credit;
         state->link_credit = 0;
         snd->drained = false;
-        return pn_post_flow(transport, ssn_state, state);
+        return pn_post_flow(transport, ssn, snd);
       }
     }
   }
@@ -2338,8 +2317,8 @@ int pn_process_link_teardown(pn_transpor
   {
     pn_link_t *link = (pn_link_t *) endpoint;
     pn_session_t *session = link->session;
-    pn_session_state_t *ssn_state = pn_session_get_state(transport, session);
-    pn_link_state_t *state = pn_link_get_state(ssn_state, link);
+    pn_session_state_t *ssn_state = &session->state;
+    pn_link_state_t *state = &link->state;
     if (endpoint->state & PN_LOCAL_CLOSED && (int32_t) state->local_handle >= 
0 &&
         (int16_t) ssn_state->local_channel >= 0 && !transport->close_sent) {
       if (pn_link_is_sender(link) && pn_link_queued(link) &&
@@ -2380,11 +2359,8 @@ bool pn_pointful_buffering(pn_transport_
     if (pn_link_is_sender(link) && pn_link_queued(link) > 0) {
       pn_session_t *ssn = link->session;
       if (session && session == ssn) {
-        pn_session_state_t *ssn_state = pn_session_get_state(transport, 
session);
-        pn_link_state_t *state = pn_link_get_state(ssn_state, link);
-
-        if ((int32_t) state->remote_handle != -2 &&
-            (int16_t) ssn_state->remote_channel != -2) {
+        if ((int32_t) link->state.remote_handle != -2 &&
+            (int16_t) session->state.remote_channel != -2) {
           return true;
         }
       }
@@ -2400,7 +2376,7 @@ int pn_process_ssn_teardown(pn_transport
   if (endpoint->type == SESSION)
   {
     pn_session_t *session = (pn_session_t *) endpoint;
-    pn_session_state_t *state = pn_session_get_state(transport, session);
+    pn_session_state_t *state = &session->state;
     if (endpoint->state & PN_LOCAL_CLOSED && (int16_t) state->local_channel >= 0
         && !transport->close_sent)
     {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to