You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gm...@apache.org on 2016/03/01 18:28:23 UTC

[1/3] qpid-dispatch git commit: DISPATCH-179 - Fixed memory leak of qd_message_t objects when doing management requests

Repository: qpid-dispatch
Updated Branches:
  refs/heads/tross-DISPATCH-179-1-QDMESSAGE-MEMLEAK [created] 0513bd685


DISPATCH-179 - Fixed memory leak of qd_message_t objects when doing management requests


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/2437acf8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/2437acf8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/2437acf8

Branch: refs/heads/tross-DISPATCH-179-1-QDMESSAGE-MEMLEAK
Commit: 2437acf8c2617c243ccc98f73003d66ed851e13b
Parents: 75390ae
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Thu Feb 25 14:45:07 2016 -0500
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Thu Feb 25 14:45:07 2016 -0500

----------------------------------------------------------------------
 src/router_core/forwarder.c        | 3 +++
 src/router_core/management_agent.c | 5 ++++-
 2 files changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2437acf8/src/router_core/forwarder.c
----------------------------------------------------------------------
diff --git a/src/router_core/forwarder.c b/src/router_core/forwarder.c
index fc3f4c1..e2a0897 100644
--- a/src/router_core/forwarder.c
+++ b/src/router_core/forwarder.c
@@ -92,6 +92,7 @@ void qdr_forward_deliver_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_t *
 void qdr_forward_on_message(qdr_core_t *core, qdr_general_work_t *work)
 {
     work->on_message(work->on_message_context, work->msg, work->maskbit);
+    qd_message_free(work->msg);
 }
 
 
@@ -323,6 +324,8 @@ int qdr_forward_closest_CT(qdr_core_t      *core,
         }
     }
 
+
+
     return 0;
 }
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2437acf8/src/router_core/management_agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/management_agent.c b/src/router_core/management_agent.c
index 76d25bc..7bd0b9a 100644
--- a/src/router_core/management_agent.c
+++ b/src/router_core/management_agent.c
@@ -97,7 +97,7 @@ static qd_management_context_t* qd_management_context(qd_message_t
     ctx->count  = count;
     ctx->field  = field;
     ctx->msg    = msg;
-    ctx->source = source;
+    ctx->source = qd_message_copy(source);
     ctx->query  = query;
     ctx->current_count = 0;
     ctx->core   = core;
@@ -195,6 +195,9 @@ static void qd_manage_response_handler(void *context, const qd_amqp_error_t *sta
 
     if (ctx->msg)
         qd_message_free(ctx->msg);
+    if(ctx->source)
+        qd_message_free(ctx->source);
+
     free_qd_management_context_t(ctx);
 }
 


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


[3/3] qpid-dispatch git commit: DISPATCH-179 - Fixed memory leak of qd_parsed_field_t object in qd_core_agent_create_handler

Posted by gm...@apache.org.
DISPATCH-179 - Fixed memory leak of qd_parsed_field_t object in qd_core_agent_create_handler


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/0513bd68
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/0513bd68
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/0513bd68

Branch: refs/heads/tross-DISPATCH-179-1-QDMESSAGE-MEMLEAK
Commit: 0513bd6855989e5fd5200d10634ead7d5359c7f4
Parents: f305dbf
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Mon Feb 29 11:00:40 2016 -0500
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Mon Feb 29 11:00:40 2016 -0500

----------------------------------------------------------------------
 src/router_core/agent.c            | 22 +++++++++++++---------
 src/router_core/management_agent.c |  8 +++++++-
 2 files changed, 20 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0513bd68/src/router_core/agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent.c b/src/router_core/agent.c
index c45e20e..01bcd15 100644
--- a/src/router_core/agent.c
+++ b/src/router_core/agent.c
@@ -115,7 +115,8 @@ void qdr_manage_create(qdr_core_t              *core,
 }
 
 
-void qdr_manage_delete(qdr_core_t *core, void  *context,
+void qdr_manage_delete(qdr_core_t *core,
+                       void  *context,
                        qd_router_entity_type_t  type,
                        qd_field_iterator_t     *name,
                        qd_field_iterator_t     *identity)
@@ -131,7 +132,8 @@ void qdr_manage_delete(qdr_core_t *core, void  *context,
 }
 
 
-void qdr_manage_read(qdr_core_t *core, void  *context,
+void qdr_manage_read(qdr_core_t *core,
+                     void  *context,
                      qd_router_entity_type_t  entity_type,
                      qd_field_iterator_t     *name,
                      qd_field_iterator_t     *identity,
@@ -344,14 +346,16 @@ static void qdr_manage_create_CT(qdr_core_t *core, qdr_action_t *action, bool di
     qd_parsed_field_t       *in_body    = action->args.agent.in_body;
 
     switch (query->entity_type) {
-    case QD_ROUTER_PROVISIONED: qdra_provisioned_create_CT(core, name, query, in_body); break;
-    case QD_ROUTER_CONNECTION:  break;
-    case QD_ROUTER_LINK:        break;
-    case QD_ROUTER_ADDRESS:     break;
-    case QD_ROUTER_WAYPOINT:    qdra_waypoint_create_CT(core, name, query, in_body); break;
-    case QD_ROUTER_EXCHANGE:    break;
-    case QD_ROUTER_BINDING:     break;
+        case QD_ROUTER_PROVISIONED: qdra_provisioned_create_CT(core, name, query, in_body); break;
+        case QD_ROUTER_CONNECTION:  break;
+        case QD_ROUTER_LINK:        break;
+        case QD_ROUTER_ADDRESS:     break;
+        case QD_ROUTER_WAYPOINT:    qdra_waypoint_create_CT(core, name, query, in_body); break;
+        case QD_ROUTER_EXCHANGE:    break;
+        case QD_ROUTER_BINDING:     break;
    }
+
+   qd_parse_free(in_body);
 }
 
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0513bd68/src/router_core/management_agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/management_agent.c b/src/router_core/management_agent.c
index 1735dd2..deef7ae 100644
--- a/src/router_core/management_agent.c
+++ b/src/router_core/management_agent.c
@@ -292,7 +292,13 @@ static void qd_core_agent_create_handler(qdr_core_t                 *core,
     // Call local function that creates and returns a qd_management_context_t containing the values passed in.
     qd_management_context_t *ctx = qd_management_context(qd_message(), msg, out_body, 0, core, operation_type, 0);
 
-    qdr_manage_create(core, ctx, entity_type, name_iter, qd_parse(qd_message_field_iterator(msg, QD_FIELD_BODY)), out_body);
+    qd_field_iterator_t *body_iter = qd_message_field_iterator(msg, QD_FIELD_BODY);
+
+    qd_parsed_field_t *in_body = qd_parse(body_iter);
+
+    qdr_manage_create(core, ctx, entity_type, name_iter, in_body, out_body);
+
+    qd_field_iterator_free(body_iter);
 }
 
 


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


[2/3] qpid-dispatch git commit: DISPATCH-179 - Fixed memory leak of qd_composed_field_t and qd_field_iterator_t objects when doing c management agent requests

Posted by gm...@apache.org.
DISPATCH-179 - Fixed memory leak of qd_composed_field_t and qd_field_iterator_t objects when doing c management agent requests


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/f305dbf5
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/f305dbf5
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/f305dbf5

Branch: refs/heads/tross-DISPATCH-179-1-QDMESSAGE-MEMLEAK
Commit: f305dbf5613a708216c63066ccc249f1c982d33f
Parents: 2437acf
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Mon Feb 29 10:04:04 2016 -0500
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Mon Feb 29 10:04:04 2016 -0500

----------------------------------------------------------------------
 src/router_core/agent.c               | 58 +++++++++++++----------
 src/router_core/management_agent.c    | 76 +++++++++++++++++-------------
 src/router_core/router_core_private.h |  1 -
 3 files changed, 75 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f305dbf5/src/router_core/agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent.c b/src/router_core/agent.c
index b5b9fc6..c45e20e 100644
--- a/src/router_core/agent.c
+++ b/src/router_core/agent.c
@@ -50,9 +50,7 @@ static void qdr_agent_response_handler(void *context)
         if (query) {
             core->agent_response_handler(query->context, query->status, query->more);
             if (!query->more) {
-                if (query->next_key)
-                    qdr_field_free(query->next_key);
-                free_qdr_query_t(query);
+                qdr_query_free(query);
             }
         }
     }
@@ -73,7 +71,6 @@ void qdr_agent_enqueue_response_CT(qdr_core_t *core, qdr_query_t *query)
 qdr_query_t *qdr_query(qdr_core_t              *core,
                        void                    *context,
                        qd_router_entity_type_t  type,
-                       qd_parsed_field_t       *attribute_names,
                        qd_composed_field_t     *body)
 {
     qdr_query_t *query = new_qdr_query_t();
@@ -110,7 +107,7 @@ void qdr_manage_create(qdr_core_t              *core,
     qdr_action_t *action = qdr_action(qdr_manage_create_CT, "manage_create");
 
     // Create a query object here
-    action->args.agent.query = qdr_query(core, context, type, 0, out_body);
+    action->args.agent.query = qdr_query(core, context, type, out_body);
     action->args.agent.name = name;
     action->args.agent.in_body = in_body;
 
@@ -126,7 +123,7 @@ void qdr_manage_delete(qdr_core_t *core, void  *context,
     qdr_action_t *action = qdr_action(qdr_manage_delete_CT, "manage_delete");
 
     // Create a query object here
-    action->args.agent.query = qdr_query(core, context, type, 0, 0);
+    action->args.agent.query = qdr_query(core, context, type, 0);
     action->args.agent.name = name;
     action->args.agent.identity = identity;
 
@@ -143,7 +140,7 @@ void qdr_manage_read(qdr_core_t *core, void  *context,
     qdr_action_t *action = qdr_action(qdr_manage_read_CT, "manage_read");
 
     // Create a query object here
-    action->args.agent.query = qdr_query(core, context, entity_type, 0, body);
+    action->args.agent.query = qdr_query(core, context, entity_type, body);
     action->args.agent.identity  = identity;
     action->args.agent.name = name;
 
@@ -170,32 +167,32 @@ qdr_query_t *qdr_manage_query(qdr_core_t              *core,
                               qd_composed_field_t     *body)
 {
 
-    qdr_query_t* query = qdr_query(core, context, type, attribute_names, body);
+    qdr_query_t* query = qdr_query(core, context, type, body);
 
     switch (query->entity_type) {
-    case QD_ROUTER_PROVISIONED:
-        qdr_agent_set_columns(query, attribute_names, qdr_provisioned_columns, QDR_PROVISIONED_COLUMN_COUNT);
-        break;
+        case QD_ROUTER_PROVISIONED:
+            qdr_agent_set_columns(query, attribute_names, qdr_provisioned_columns, QDR_PROVISIONED_COLUMN_COUNT);
+            break;
 
-    case QD_ROUTER_CONNECTION:
-        break;
+        case QD_ROUTER_CONNECTION:
+            break;
 
-    case QD_ROUTER_LINK:
-        qdr_agent_set_columns(query, attribute_names, qdr_link_columns, QDR_LINK_COLUMN_COUNT);
-        break;
+        case QD_ROUTER_LINK:
+            qdr_agent_set_columns(query, attribute_names, qdr_link_columns, QDR_LINK_COLUMN_COUNT);
+            break;
 
-    case QD_ROUTER_ADDRESS:
-        qdr_agent_set_columns(query, attribute_names, qdr_address_columns, QDR_ADDRESS_COLUMN_COUNT);
-        break;
+        case QD_ROUTER_ADDRESS:
+            qdr_agent_set_columns(query, attribute_names, qdr_address_columns, QDR_ADDRESS_COLUMN_COUNT);
+            break;
 
-    case QD_ROUTER_WAYPOINT:
-        break;
+        case QD_ROUTER_WAYPOINT:
+            break;
 
-    case QD_ROUTER_EXCHANGE:
-        break;
+        case QD_ROUTER_EXCHANGE:
+            break;
 
-    case QD_ROUTER_BINDING:
-        break;
+        case QD_ROUTER_BINDING:
+            break;
     }
 
     return query;
@@ -234,6 +231,17 @@ void qdr_query_get_next(qdr_query_t *query)
 
 void qdr_query_free(qdr_query_t *query)
 {
+    if(!query)
+        return;
+
+    if (query->next_key)
+        qdr_field_free(query->next_key);
+
+    if(query->body)
+        qd_compose_free(query->body);
+
+    free_qdr_query_t(query);
+
 }
 
 static void qdr_agent_emit_columns(qdr_query_t *query, const char *qdr_columns[], int column_count)

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f305dbf5/src/router_core/management_agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/management_agent.c b/src/router_core/management_agent.c
index 7bd0b9a..1735dd2 100644
--- a/src/router_core/management_agent.c
+++ b/src/router_core/management_agent.c
@@ -28,16 +28,16 @@
 #include "dispatch_private.h"
 #include "alloc.h"
 
-const char *entity_type_key = "entityType";
-const char *type_key = "type";
-const char *count_key = "count";
-const char *offset_key = "offset";
-const char *name_key = "name";
-const char *identity_key = "identity";
+const char *ENTITY = "entityType";
+const char *TYPE = "type";
+const char *COUNT = "count";
+const char *OFFSET = "offset";
+const char *NAME = "name";
+const char *IDENTITY = "identity";
 
 
-const char *operation_type_key = "operation";
-const char *attribute_names_key = "attributeNames";
+const char *OPERATION = "operation";
+const char *ATTRIBUTE_NAMES = "attributeNames";
 
 const unsigned char *provisioned_entity_type = (unsigned char*) "org.apache.qpid.dispatch.router.provisioned";
 const unsigned char *waypoint_entity_type = (unsigned char*) "org.apache.qpid.dispatch.waypoint";
@@ -144,7 +144,7 @@ static void qd_set_properties(qd_message_t        *msg,
     qd_compose_insert_null(*fld);
     qd_compose_insert_typed_iterator(*fld, correlation_id);
     qd_compose_end_list(*fld);
-
+    qd_field_iterator_free(correlation_id);
 }
 
 
@@ -193,6 +193,9 @@ static void qd_manage_response_handler(void *context, const qd_amqp_error_t *sta
     // ctx->query has also been already freed
     // Just go over this with Ted to see if I freed everything.
 
+    qd_field_iterator_free(reply_to);
+    qd_compose_free(fld);
+
     if (ctx->msg)
         qd_message_free(ctx->msg);
     if(ctx->source)
@@ -210,23 +213,28 @@ static void qd_core_agent_query_handler(qdr_core_t                 *core,
                                         int                        *offset)
 {
     //
-    // Add the Body
+    // Add the Body. This body field is freed by qdr_query_free()
     //
     qd_composed_field_t *field = qd_compose(QD_PERFORMATIVE_BODY_AMQP_VALUE, 0);
 
     // Start a map in the body. Look for the end map in the callback function, qd_manage_response_handler.
     qd_compose_start_map(field);
 
-    qd_compose_insert_string(field, attribute_names_key); //add a "attributeNames" key
+    //add a "attributeNames" key
+    qd_compose_insert_string(field, ATTRIBUTE_NAMES);
 
-    // Call local function that creates and returns a qd_management_context_t containing the values passed in.
+    // Call local function that creates and returns a local qd_management_context_t object containing the values passed in.
     qd_management_context_t *ctx = qd_management_context(qd_message(), msg, field, 0, core, operation_type, (*count));
 
     // Grab the attribute names from the incoming message body. The attribute names will be used later on in the response.
     qd_parsed_field_t *attribute_names_parsed_field = 0;
-    qd_parsed_field_t *body = qd_parse(qd_message_field_iterator(msg, QD_FIELD_BODY));
-    if (body != 0 && qd_parse_is_map(body))
-        attribute_names_parsed_field = qd_parse_value_by_key(body, attribute_names_key);
+
+    qd_field_iterator_t *body_iter = qd_message_field_iterator(msg, QD_FIELD_BODY);
+
+    qd_parsed_field_t *body = qd_parse(body_iter);
+    if (body != 0 && qd_parse_is_map(body)) {
+        attribute_names_parsed_field = qd_parse_value_by_key(body, ATTRIBUTE_NAMES);
+    }
 
     // Set the callback function.
     qdr_manage_handler(core, qd_manage_response_handler);
@@ -238,6 +246,9 @@ static void qd_core_agent_query_handler(qdr_core_t                 *core,
     qd_compose_start_list(field); //start the list for results
 
     qdr_query_get_first(ctx->query, (*offset));
+
+    qd_field_iterator_free(body_iter);
+    qd_parse_free(body);
 }
 
 
@@ -314,9 +325,10 @@ static void qd_core_agent_delete_handler(qdr_core_t                 *core,
 
 
 /**
- * Checks the content of the message to see if this can be handled by this agent.
+ * Checks the content of the message to see if this can be handled by the C-management agent. If this agent cannot handle it, it will be
+ * forwarded to the Python agent.
  */
-static bool qd_can_handle_request(qd_field_iterator_t         *props,
+static bool qd_can_handle_request(qd_parsed_field_t           *properties_fld,
                                   qd_router_entity_type_t     *entity_type,
                                   qd_router_operation_type_t  *operation_type,
                                   qd_field_iterator_t        **identity_iter,
@@ -324,11 +336,9 @@ static bool qd_can_handle_request(qd_field_iterator_t         *props,
                                   int                         *count,
                                   int                         *offset)
 {
-    qd_parsed_field_t *fld = qd_parse(props);
-
     // The must be a property field and that property field should be a AMQP map. This is true for QUERY but I need
     // to check if it true for CREATE, UPDATE and DELETE
-    if (fld == 0 || !qd_parse_is_map(fld))
+    if (properties_fld == 0 || !qd_parse_is_map(properties_fld))
         return false;
 
     //
@@ -337,25 +347,24 @@ static bool qd_can_handle_request(qd_field_iterator_t         *props,
     // 'entityType': 'org.apache.qpid.dispatch.router.link'
     // TODO - Add more entity types here. The above is not a complete list.
 
-    qd_parsed_field_t *parsed_field = qd_parse_value_by_key(fld, identity_key);
+    qd_parsed_field_t *parsed_field = qd_parse_value_by_key(properties_fld, IDENTITY);
     if (parsed_field!=0) {
         *identity_iter = qd_parse_raw(parsed_field);
     }
-    parsed_field = qd_parse_value_by_key(fld, name_key);
+    parsed_field = qd_parse_value_by_key(properties_fld, NAME);
     if (parsed_field!=0) {
         *name_iter = qd_parse_raw(parsed_field);
     }
 
-
-    parsed_field = qd_parse_value_by_key(fld, entity_type_key);
+    parsed_field = qd_parse_value_by_key(properties_fld, ENTITY);
 
     if (parsed_field == 0) { // Sometimes there is no 'entityType' but 'type' might be available.
-        parsed_field = qd_parse_value_by_key(fld, type_key);
+        parsed_field = qd_parse_value_by_key(properties_fld, TYPE);
         if (parsed_field == 0)
             return false;
     }
 
-    if      (qd_field_iterator_equal(qd_parse_raw(parsed_field), address_entity_type))
+    if (qd_field_iterator_equal(qd_parse_raw(parsed_field), address_entity_type))
         *entity_type = QD_ROUTER_ADDRESS;
     else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), link_entity_type))
         *entity_type = QD_ROUTER_LINK;
@@ -367,7 +376,7 @@ static bool qd_can_handle_request(qd_field_iterator_t         *props,
         return false;
 
 
-    parsed_field = qd_parse_value_by_key(fld, operation_type_key);
+    parsed_field = qd_parse_value_by_key(properties_fld, OPERATION);
 
     if (parsed_field == 0)
         return false;
@@ -387,20 +396,18 @@ static bool qd_can_handle_request(qd_field_iterator_t         *props,
         return false;
 
     // Obtain the count and offset.
-    parsed_field = qd_parse_value_by_key(fld, count_key);
+    parsed_field = qd_parse_value_by_key(properties_fld, COUNT);
     if (parsed_field)
         (*count) = qd_parse_as_int(parsed_field);
     else
         (*count) = -1;
 
-    parsed_field = qd_parse_value_by_key(fld, offset_key);
+    parsed_field = qd_parse_value_by_key(properties_fld, OFFSET);
     if (parsed_field)
         (*offset) = qd_parse_as_int(parsed_field);
     else
         (*offset) = 0;
 
-    qd_parse_free(parsed_field);
-
     return true;
 }
 
@@ -424,7 +431,9 @@ void qdr_management_agent_on_message(void *context, qd_message_t *msg, int unuse
     int32_t count = 0;
     int32_t offset = 0;
 
-    if (qd_can_handle_request(app_properties_iter, &entity_type, &operation_type, &identity_iter, &name_iter, &count, &offset)) {
+    qd_parsed_field_t *properties_fld = qd_parse(app_properties_iter);
+
+    if (qd_can_handle_request(properties_fld, &entity_type, &operation_type, &identity_iter, &name_iter, &count, &offset)) {
         switch (operation_type) {
             case QD_ROUTER_OPERATION_QUERY:
                 qd_core_agent_query_handler(core, entity_type, operation_type, msg, &count, &offset);
@@ -450,8 +459,7 @@ void qdr_management_agent_on_message(void *context, qd_message_t *msg, int unuse
     }
 
     qd_field_iterator_free(app_properties_iter);
-    qd_field_iterator_free(name_iter);
-    qd_field_iterator_free(identity_iter);
+    qd_parse_free(properties_fld);
 
 }
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f305dbf5/src/router_core/router_core_private.h
----------------------------------------------------------------------
diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h
index e8d1508..60a9ed0 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -531,6 +531,5 @@ void qdr_connection_activate_CT(qdr_core_t *core, qdr_connection_t *conn);
 qdr_query_t *qdr_query(qdr_core_t              *core,
                        void                    *context,
                        qd_router_entity_type_t  type,
-                       qd_parsed_field_t       *attribute_names,
                        qd_composed_field_t     *body);
 #endif


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