Author: rhs
Date: Fri May 24 18:48:01 2013
New Revision: 1486165

URL: http://svn.apache.org/r1486165
Log:
objectified deliveries

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

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=1486165&r1=1486164&r2=1486165&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Fri May 24 18:48:01 2013
@@ -301,15 +301,6 @@ void pn_remove_link(pn_session_t *ssn, p
   pn_list_remove(ssn->links, link);
 }
 
-void pn_free_delivery(pn_delivery_t *delivery)
-{
-  if (delivery) {
-    pn_buffer_free(delivery->tag);
-    pn_buffer_free(delivery->bytes);
-    free(delivery);
-  }
-}
-
 void pn_link_open(pn_link_t *link)
 {
   if (link) pn_open((pn_endpoint_t *) link);
@@ -908,12 +899,12 @@ static void pn_link_finalize(void *objec
   while (link->settled_head) {
     pn_delivery_t *d = link->settled_head;
     LL_POP(link, settled);
-    pn_free_delivery(d);
+    pn_free(d);
   }
   while (link->unsettled_head) {
     pn_delivery_t *d = link->unsettled_head;
     LL_POP(link, unsettled);
-    pn_free_delivery(d);
+    pn_free(d);
   }
   pn_free(link->name);
   pn_endpoint_tini(&link->endpoint);
@@ -1168,13 +1159,21 @@ pn_session_t *pn_link_session(pn_link_t 
   return link->session;
 }
 
+static void pn_delivery_finalize(void *object)
+{
+  pn_delivery_t *delivery = (pn_delivery_t *) object;
+  pn_buffer_free(delivery->tag);
+  pn_buffer_free(delivery->bytes);
+}
+
 pn_delivery_t *pn_delivery(pn_link_t *link, pn_delivery_tag_t tag)
 {
-  if (!link) return NULL;
+  assert(link);
   pn_delivery_t *delivery = link->settled_head;
   LL_POP(link, settled);
   if (!delivery) {
-    delivery = (pn_delivery_t *) malloc(sizeof(pn_delivery_t));
+    static pn_class_t clazz = {pn_delivery_finalize};
+    delivery = (pn_delivery_t *) pn_new(sizeof(pn_delivery_t), &clazz);
     if (!delivery) return NULL;
     delivery->tag = pn_buffer(16);
     delivery->bytes = pn_buffer(64);
@@ -1354,7 +1353,7 @@ void pn_full_settle(pn_delivery_buffer_t
 
 void pn_delivery_settle(pn_delivery_t *delivery)
 {
-  if (!delivery) return;
+  assert(delivery);
 
   pn_link_t *link = delivery->link;
   if (pn_is_current(delivery)) {



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

Reply via email to