This is an automated email from the ASF dual-hosted git repository. astitcher pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 24976938f30bc82cb9dce8802e955035628f9b2e Author: Andrew Stitcher <[email protected]> AuthorDate: Mon May 2 18:20:04 2022 -0400 PROTON-2542: Eliminate all code that uses pn_collector_put with PN_OBJECT This is to avoid the need to export the PN_OBJECT symbol from libqpid_core - A step towards making most of object.h private and not exported by the libqpid_core library. --- c/include/proton/event.h | 23 ++++++++++++++++++++++- c/src/core/engine.c | 24 ++++++++++++------------ c/src/core/event.c | 6 ++++++ c/src/core/transport.c | 36 ++++++++++++++++++------------------ c/src/proactor/epoll.c | 2 +- c/src/proactor/libuv.c | 2 +- c/src/proactor/win_iocp.cpp | 2 +- c/src/reactor/reactor.c | 12 ++++++------ c/src/reactor/selectable.c | 8 ++++---- c/src/reactor/timer.c | 2 +- c/src/sasl/sasl.c | 2 +- c/tests/event_test.cpp | 6 +++--- cpp/src/receiver.cpp | 2 +- 13 files changed, 77 insertions(+), 50 deletions(-) diff --git a/c/include/proton/event.h b/c/include/proton/event.h index dba1b44f..048a60ee 100644 --- a/c/include/proton/event.h +++ b/c/include/proton/event.h @@ -526,7 +526,7 @@ PN_EXTERN void pn_collector_drain(pn_collector_t *collector); * this happens, this operation will return a NULL pointer. * * @param[in] collector a collector object - * @param[in] clazz class of the context + * @param[in] clazz memory management class of the context * @param[in] context the event context * @param[in] type the event type * @@ -538,6 +538,27 @@ PN_EXTERN pn_event_t *pn_collector_put(pn_collector_t *collector, const pn_class_t *clazz, void *context, pn_event_type_t type); +/** + * Place a new event on a collector. + * + * This operation will create a new event of the given type with a + * context that is managed as a pn_object and return a pointer to the + * newly created event. In some cases an event of the given type and + * context can be elided. When this happens, this operation will return + * a NULL pointer. + * + * @param[in] collector a collector object + * @param[in] object the event context object + * @param[in] type the event type + * + * @return a pointer to the newly created event or NULL if the event + * was elided + */ + +PN_EXTERN pn_event_t *pn_collector_put_object(pn_collector_t *collector, + void *object, + pn_event_type_t type); + /** * Access the head event contained by a collector. * diff --git a/c/src/core/engine.c b/c/src/core/engine.c index d16cf657..e5f64497 100644 --- a/c/src/core/engine.c +++ b/c/src/core/engine.c @@ -79,8 +79,8 @@ static void pn_endpoint_open(pn_endpoint_t *endpoint) if (!(endpoint->state & PN_LOCAL_ACTIVE)) { PN_SET_LOCAL(endpoint->state, PN_LOCAL_ACTIVE); pn_connection_t *conn = pni_ep_get_connection(endpoint); - pn_collector_put(conn->collector, PN_OBJECT, endpoint, - endpoint_event((pn_endpoint_type_t) endpoint->type, true)); + pn_collector_put_object(conn->collector, endpoint, + endpoint_event((pn_endpoint_type_t) endpoint->type, true)); pn_modified(conn, endpoint, true); } } @@ -90,8 +90,8 @@ static void pn_endpoint_close(pn_endpoint_t *endpoint) if (!(endpoint->state & PN_LOCAL_CLOSED)) { PN_SET_LOCAL(endpoint->state, PN_LOCAL_CLOSED); pn_connection_t *conn = pni_ep_get_connection(endpoint); - pn_collector_put(conn->collector, PN_OBJECT, endpoint, - endpoint_event((pn_endpoint_type_t) endpoint->type, false)); + pn_collector_put_object(conn->collector, endpoint, + endpoint_event((pn_endpoint_type_t) endpoint->type, false)); pn_modified(conn, endpoint, true); } } @@ -154,7 +154,7 @@ void pn_connection_free(pn_connection_t *connection) { void pn_connection_bound(pn_connection_t *connection) { - pn_collector_put(connection->collector, PN_OBJECT, connection, PN_CONNECTION_BOUND); + pn_collector_put_object(connection->collector, connection, PN_CONNECTION_BOUND); pn_ep_incref(&connection->endpoint); size_t nsessions = pn_list_size(connection->sessions); @@ -337,7 +337,7 @@ void pn_link_detach(pn_link_t *link) if (link->detached) return; link->detached = true; - pn_collector_put(link->session->connection->collector, PN_OBJECT, link, PN_LINK_LOCAL_DETACH); + pn_collector_put_object(link->session->connection->collector, link, PN_LINK_LOCAL_DETACH); pn_modified(link->session->connection, &link->endpoint, true); } @@ -449,7 +449,7 @@ void pn_ep_decref(pn_endpoint_t *endpoint) endpoint->refcount--; if (endpoint->refcount == 0) { pn_connection_t *conn = pni_ep_get_connection(endpoint); - pn_collector_put(conn->collector, PN_OBJECT, endpoint, pn_final_type((pn_endpoint_type_t) endpoint->type)); + pn_collector_put_object(conn->collector, endpoint, pn_final_type((pn_endpoint_type_t) endpoint->type)); } } @@ -560,7 +560,7 @@ void pn_connection_collect(pn_connection_t *connection, pn_collector_t *collecto pn_incref(connection->collector); pn_endpoint_t *endpoint = connection->endpoint_head; while (endpoint) { - pn_collector_put(connection->collector, PN_OBJECT, endpoint, endpoint_init_event_map[endpoint->type]); + pn_collector_put_object(connection->collector, endpoint, endpoint_init_event_map[endpoint->type]); endpoint = endpoint->endpoint_next; } } @@ -781,8 +781,8 @@ void pn_modified(pn_connection_t *connection, pn_endpoint_t *endpoint, bool emit } if (emit && connection->transport) { - pn_collector_put(connection->collector, PN_OBJECT, connection->transport, - PN_TRANSPORT); + pn_collector_put_object(connection->collector, connection->transport, + PN_TRANSPORT); } } @@ -1018,7 +1018,7 @@ pn_session_t *pn_session(pn_connection_t *conn) ssn->state.remote_handles = pn_hash(PN_WEAKREF, 0, 0.75); // end transport state - pn_collector_put(conn->collector, PN_OBJECT, ssn, PN_SESSION_INIT); + pn_collector_put_object(conn->collector, ssn, PN_SESSION_INIT); if (conn->transport) { pni_session_bound(ssn); } @@ -1200,7 +1200,7 @@ pn_link_t *pn_link_new(int type, pn_session_t *session, const char *name) link->state.link_credit = 0; // end transport state - pn_collector_put(session->connection->collector, PN_OBJECT, link, PN_LINK_INIT); + pn_collector_put_object(session->connection->collector, link, PN_LINK_INIT); if (session->connection->transport) { pni_link_bound(link); } diff --git a/c/src/core/event.c b/c/src/core/event.c index 3562a00e..428fc10e 100644 --- a/c/src/core/event.c +++ b/c/src/core/event.c @@ -169,6 +169,12 @@ pn_event_t *pn_collector_put(pn_collector_t *collector, return event; } +pn_event_t *pn_collector_put_object(pn_collector_t *collector, void *object, pn_event_type_t type) +{ + const pn_class_t *clazz = pn_class(object); + return pn_collector_put(collector, clazz, object, type); +} + pn_event_t *pn_collector_peek(pn_collector_t *collector) { return collector->head; diff --git a/c/src/core/transport.c b/c/src/core/transport.c index b05f25ad..49d15d07 100644 --- a/c/src/core/transport.c +++ b/c/src/core/transport.c @@ -668,9 +668,9 @@ static void pn_transport_finalize(void *object) } static void pni_post_remote_open_events(pn_transport_t *transport, pn_connection_t *connection) { - pn_collector_put(connection->collector, PN_OBJECT, connection, PN_CONNECTION_REMOTE_OPEN); + pn_collector_put_object(connection->collector, connection, PN_CONNECTION_REMOTE_OPEN); if (transport->remote_idle_timeout) { - pn_collector_put(connection->collector, PN_OBJECT, transport, PN_TRANSPORT); + pn_collector_put_object(connection->collector, transport, PN_TRANSPORT); } } @@ -762,7 +762,7 @@ int pn_transport_unbind(pn_transport_t *transport) transport->connection = NULL; bool was_referenced = transport->referenced; - pn_collector_put(conn->collector, PN_OBJECT, conn, PN_CONNECTION_UNBOUND); + pn_collector_put_object(conn->collector, conn, PN_CONNECTION_UNBOUND); // XXX: what happens if the endpoints are freed before we get here? pn_session_t *ssn = pn_session_head(conn, 0); @@ -977,7 +977,7 @@ static void pni_maybe_post_closed(pn_transport_t *transport) { pn_collector_t *collector = pni_transport_collector(transport); if (transport->head_closed && transport->tail_closed) { - pn_collector_put(collector, PN_OBJECT, transport, PN_TRANSPORT_CLOSED); + pn_collector_put_object(collector, transport, PN_TRANSPORT_CLOSED); } } @@ -986,7 +986,7 @@ static void pni_close_tail(pn_transport_t *transport) if (!transport->tail_closed) { transport->tail_closed = true; pn_collector_t *collector = pni_transport_collector(transport); - pn_collector_put(collector, PN_OBJECT, transport, PN_TRANSPORT_TAIL_CLOSED); + pn_collector_put_object(collector, transport, PN_TRANSPORT_TAIL_CLOSED); pni_maybe_post_closed(transport); } } @@ -1020,7 +1020,7 @@ int pn_do_error(pn_transport_t *transport, const char *condition, const char *fm } } pn_collector_t *collector = pni_transport_collector(transport); - pn_collector_put(collector, PN_OBJECT, transport, PN_TRANSPORT_ERROR); + pn_collector_put_object(collector, transport, PN_TRANSPORT_ERROR); // Special case being called with no condition and no fmt to log the existing error condition if (fmt && condition) { PN_LOG(&transport->logger, PN_SUBSYSTEM_AMQP, PN_LEVEL_ERROR, "%s %s", condition, buf); @@ -1140,7 +1140,7 @@ int pn_do_begin(pn_transport_t *transport, uint8_t frame_type, uint16_t channel, } pni_map_remote_channel(ssn, channel); PN_SET_REMOTE(ssn->endpoint.state, PN_REMOTE_ACTIVE); - pn_collector_put(transport->connection->collector, PN_OBJECT, ssn, PN_SESSION_REMOTE_OPEN); + pn_collector_put_object(transport->connection->collector, ssn, PN_SESSION_REMOTE_OPEN); return 0; } @@ -1360,7 +1360,7 @@ int pn_do_attach(pn_transport_t *transport, uint8_t frame_type, uint16_t channel link->remote_max_message_size = max_msgsz; } - pn_collector_put(transport->connection->collector, PN_OBJECT, link, PN_LINK_REMOTE_OPEN); + pn_collector_put_object(transport->connection->collector, link, PN_LINK_REMOTE_OPEN); return 0; } @@ -1493,7 +1493,7 @@ int pn_do_transfer(pn_transport_t *transport, uint8_t frame_type, uint16_t chann link->more_pending = false; pn_work_update(transport->connection, delivery); } - pn_collector_put(transport->connection->collector, PN_OBJECT, delivery, PN_DELIVERY); + pn_collector_put_object(transport->connection->collector, delivery, PN_DELIVERY); } ssn->incoming_bytes += payload.size; @@ -1559,7 +1559,7 @@ int pn_do_flow(pn_transport_t *transport, uint8_t frame_type, uint16_t channel, } } - pn_collector_put(transport->connection->collector, PN_OBJECT, link, PN_LINK_FLOW); + pn_collector_put_object(transport->connection->collector, link, PN_LINK_FLOW); } return 0; @@ -1649,7 +1649,7 @@ static int pni_do_delivery_disposition(pn_transport_t * transport, pn_delivery_t delivery->updated = true; pn_work_update(transport->connection, delivery); - pn_collector_put(transport->connection->collector, PN_OBJECT, delivery, PN_DELIVERY); + pn_collector_put_object(transport->connection->collector, delivery, PN_DELIVERY); return 0; } @@ -1740,9 +1740,9 @@ int pn_do_detach(pn_transport_t *transport, uint8_t frame_type, uint16_t channel if (closed) { PN_SET_REMOTE(link->endpoint.state, PN_REMOTE_CLOSED); - pn_collector_put(transport->connection->collector, PN_OBJECT, link, PN_LINK_REMOTE_CLOSE); + pn_collector_put_object(transport->connection->collector, link, PN_LINK_REMOTE_CLOSE); } else { - pn_collector_put(transport->connection->collector, PN_OBJECT, link, PN_LINK_REMOTE_DETACH); + pn_collector_put_object(transport->connection->collector, link, PN_LINK_REMOTE_DETACH); } pni_unmap_remote_handle(link); @@ -1764,7 +1764,7 @@ int pn_do_end(pn_transport_t *transport, uint8_t frame_type, uint16_t channel, p pn_condition_set(condition, cond, desc); pn_data_rewind(pn_condition_info(condition)); PN_SET_REMOTE(ssn->endpoint.state, PN_REMOTE_CLOSED); - pn_collector_put(transport->connection->collector, PN_OBJECT, ssn, PN_SESSION_REMOTE_CLOSE); + pn_collector_put_object(transport->connection->collector, ssn, PN_SESSION_REMOTE_CLOSE); pni_unmap_remote_channel(ssn); return 0; } @@ -1782,7 +1782,7 @@ int pn_do_close(pn_transport_t *transport, uint8_t frame_type, uint16_t channel, pn_data_rewind(pn_condition_info(condition)); transport->close_rcvd = true; PN_SET_REMOTE(conn->endpoint.state, PN_REMOTE_CLOSED); - pn_collector_put(transport->connection->collector, PN_OBJECT, conn, PN_CONNECTION_REMOTE_CLOSE); + pn_collector_put_object(transport->connection->collector, conn, PN_CONNECTION_REMOTE_CLOSE); return 0; } @@ -2205,7 +2205,7 @@ static int pni_process_tpwork_sender(pn_transport_t *transport, pn_delivery_t *d // Aborted delivery with no data yet sent, drop it and issue a FLOW as we may have credit. *settle = true; state->sent = true; - pn_collector_put(transport->connection->collector, PN_OBJECT, link, PN_LINK_FLOW); + pn_collector_put_object(transport->connection->collector, link, PN_LINK_FLOW); return 0; } *settle = false; @@ -2255,7 +2255,7 @@ static int pni_process_tpwork_sender(pn_transport_t *transport, pn_delivery_t *d link->session->outgoing_deliveries--; } - pn_collector_put(transport->connection->collector, PN_OBJECT, link, PN_LINK_FLOW); + pn_collector_put_object(transport->connection->collector, link, PN_LINK_FLOW); } } @@ -2708,7 +2708,7 @@ static void pni_close_head(pn_transport_t *transport) if (!transport->head_closed) { transport->head_closed = true; pn_collector_t *collector = pni_transport_collector(transport); - pn_collector_put(collector, PN_OBJECT, transport, PN_TRANSPORT_HEAD_CLOSED); + pn_collector_put_object(collector, transport, PN_TRANSPORT_HEAD_CLOSED); pni_maybe_post_closed(transport); } } diff --git a/c/src/proactor/epoll.c b/c/src/proactor/epoll.c index 1ff68ef9..027ef2fe 100644 --- a/c/src/proactor/epoll.c +++ b/c/src/proactor/epoll.c @@ -1197,7 +1197,7 @@ static pn_event_batch_t *pconnection_process(pconnection_t *pc, uint32_t events, if (waking) { pn_connection_t *c = pc->driver.connection; - pn_collector_put(pn_connection_collector(c), PN_OBJECT, c, PN_CONNECTION_WAKE); + pn_collector_put_object(pn_connection_collector(c), c, PN_CONNECTION_WAKE); waking = false; } diff --git a/c/src/proactor/libuv.c b/c/src/proactor/libuv.c index b450919e..9179823a 100644 --- a/c/src/proactor/libuv.c +++ b/c/src/proactor/libuv.c @@ -886,7 +886,7 @@ static void check_wake(pconnection_t *pc) { uv_mutex_lock(&pc->lock); if (pc->wake == W_PENDING) { pn_connection_t *c = pc->driver.connection; - pn_collector_put(pn_connection_collector(c), PN_OBJECT, c, PN_CONNECTION_WAKE); + pn_collector_put_object(pn_connection_collector(c), c, PN_CONNECTION_WAKE); pc->wake = W_NONE; } uv_mutex_unlock(&pc->lock); diff --git a/c/src/proactor/win_iocp.cpp b/c/src/proactor/win_iocp.cpp index 51512bd7..4df6d7d8 100644 --- a/c/src/proactor/win_iocp.cpp +++ b/c/src/proactor/win_iocp.cpp @@ -2351,7 +2351,7 @@ static pn_event_batch_t *pconnection_process(pconnection_t *pc, iocp_result_t *r bool ready = pconnection_has_event(pc); if (waking) { pn_connection_t *c = pc->driver.connection; - pn_collector_put(pn_connection_collector(c), PN_OBJECT, c, PN_CONNECTION_WAKE); + pn_collector_put_object(pn_connection_collector(c), c, PN_CONNECTION_WAKE); waking = false; } if (ready) { diff --git a/c/src/reactor/reactor.c b/c/src/reactor/reactor.c index 213b9f4e..27f2c717 100644 --- a/c/src/reactor/reactor.c +++ b/c/src/reactor/reactor.c @@ -199,7 +199,7 @@ pn_selectable_t *pn_reactor_selectable(pn_reactor_t *reactor) { assert(reactor); pn_selectable_t *sel = pn_selectable(); pn_selectable_collect(sel, reactor->collector); - pn_collector_put(reactor->collector, PN_OBJECT, sel, PN_SELECTABLE_INIT); + pn_collector_put_object(reactor->collector, sel, PN_SELECTABLE_INIT); pni_selectable_set_context(sel, reactor); pn_list_add(reactor->children, sel); pn_selectable_on_release(sel, pni_selectable_release); @@ -216,9 +216,9 @@ void pn_reactor_update(pn_reactor_t *reactor, pn_selectable_t *selectable) { if (!pn_record_has(record, PNI_TERMINATED)) { if (pn_selectable_is_terminal(selectable)) { pn_record_def(record, PNI_TERMINATED, PN_VOID); - pn_collector_put(reactor->collector, PN_OBJECT, selectable, PN_SELECTABLE_FINAL); + pn_collector_put_object(reactor->collector, selectable, PN_SELECTABLE_FINAL); } else { - pn_collector_put(reactor->collector, PN_OBJECT, selectable, PN_SELECTABLE_UPDATED); + pn_collector_put_object(reactor->collector, selectable, PN_SELECTABLE_UPDATED); } } } @@ -427,7 +427,7 @@ bool pn_reactor_process(pn_reactor_t *reactor) { pn_collector_pop(reactor->collector); } else if (!reactor->stop && pni_reactor_more(reactor)) { if (previous != PN_REACTOR_QUIESCED && reactor->previous != PN_REACTOR_FINAL) { - pn_collector_put(reactor->collector, PN_OBJECT, reactor, PN_REACTOR_QUIESCED); + pn_collector_put_object(reactor->collector, reactor, PN_REACTOR_QUIESCED); } else { return true; } @@ -438,7 +438,7 @@ bool pn_reactor_process(pn_reactor_t *reactor) { reactor->selectable = NULL; } else { if (reactor->previous != PN_REACTOR_FINAL) - pn_collector_put(reactor->collector, PN_OBJECT, reactor, PN_REACTOR_FINAL); + pn_collector_put_object(reactor->collector, reactor, PN_REACTOR_FINAL); return false; } } @@ -483,7 +483,7 @@ int pn_reactor_wakeup(pn_reactor_t *reactor) { void pn_reactor_start(pn_reactor_t *reactor) { assert(reactor); - pn_collector_put(reactor->collector, PN_OBJECT, reactor, PN_REACTOR_INIT); + pn_collector_put_object(reactor->collector, reactor, PN_REACTOR_INIT); reactor->selectable = pni_timer_selectable(reactor); } diff --git a/c/src/reactor/selectable.c b/c/src/reactor/selectable.c index 9ee5e9ef..e9bf55dd 100644 --- a/c/src/reactor/selectable.c +++ b/c/src/reactor/selectable.c @@ -276,19 +276,19 @@ void pn_selectable_free(pn_selectable_t *selectable) } static void pni_readable(pn_selectable_t *selectable) { - pn_collector_put(selectable->collector, PN_OBJECT, selectable, PN_SELECTABLE_READABLE); + pn_collector_put_object(selectable->collector, selectable, PN_SELECTABLE_READABLE); } static void pni_writable(pn_selectable_t *selectable) { - pn_collector_put(selectable->collector, PN_OBJECT, selectable, PN_SELECTABLE_WRITABLE); + pn_collector_put_object(selectable->collector, selectable, PN_SELECTABLE_WRITABLE); } static void pni_error(pn_selectable_t *selectable) { - pn_collector_put(selectable->collector, PN_OBJECT, selectable, PN_SELECTABLE_ERROR); + pn_collector_put_object(selectable->collector, selectable, PN_SELECTABLE_ERROR); } static void pni_expired(pn_selectable_t *selectable) { - pn_collector_put(selectable->collector, PN_OBJECT, selectable, PN_SELECTABLE_EXPIRED); + pn_collector_put_object(selectable->collector, selectable, PN_SELECTABLE_EXPIRED); } void pn_selectable_collect(pn_selectable_t *selectable, pn_collector_t *collector) { diff --git a/c/src/reactor/timer.c b/c/src/reactor/timer.c index 1e187223..316b08be 100644 --- a/c/src/reactor/timer.c +++ b/c/src/reactor/timer.c @@ -158,7 +158,7 @@ void pn_timer_tick(pn_timer_t *timer, pn_timestamp_t now) { pn_task_t *min = (pn_task_t *) pn_list_minpop(timer->tasks); assert(min == task); if (!min->cancelled) - pn_collector_put(timer->collector, PN_OBJECT, min, PN_TIMER_TASK); + pn_collector_put_object(timer->collector, min, PN_TIMER_TASK); pn_decref(min); } else { break; diff --git a/c/src/sasl/sasl.c b/c/src/sasl/sasl.c index 1fc16a9d..3de63aa4 100644 --- a/c/src/sasl/sasl.c +++ b/c/src/sasl/sasl.c @@ -375,7 +375,7 @@ static void pni_emit(pn_transport_t *transport) { if (transport->connection && transport->connection->collector) { pn_collector_t *collector = transport->connection->collector; - pn_collector_put(collector, PN_OBJECT, transport, PN_TRANSPORT); + pn_collector_put_object(collector, transport, PN_TRANSPORT); } } diff --git a/c/tests/event_test.cpp b/c/tests/event_test.cpp index 0a93b5cd..03657f1b 100644 --- a/c/tests/event_test.cpp +++ b/c/tests/event_test.cpp @@ -35,7 +35,7 @@ TEST_CASE("event_collector") { pn_collector_t *collector = pn_collector(); \ REQUIRE(collector); \ pn_event_t *event = \ - pn_collector_put(collector, PN_OBJECT, obj, (pn_event_type_t)0); \ + pn_collector_put_object(collector, obj, (pn_event_type_t)0); \ pn_decref(obj); TEST_CASE("event_collector_put") { @@ -71,7 +71,7 @@ TEST_CASE("event_collector_pool") { REQUIRE(!head); void *obj2 = pn_class_new(PN_OBJECT, 0); pn_event_t *event2 = - pn_collector_put(collector, PN_OBJECT, obj2, (pn_event_type_t)0); + pn_collector_put_object(collector, obj2, (pn_event_type_t)0); pn_decref(obj2); REQUIRE(event == event2); pn_free(collector); @@ -87,7 +87,7 @@ void test_event_incref(bool eventfirst) { REQUIRE(!pn_collector_peek(collector)); void *obj2 = pn_class_new(PN_OBJECT, 0); pn_event_t *event2 = - pn_collector_put(collector, PN_OBJECT, obj2, (pn_event_type_t)0); + pn_collector_put_object(collector, obj2, (pn_event_type_t)0); pn_decref(obj2); REQUIRE(head != event2); if (eventfirst) { diff --git a/cpp/src/receiver.cpp b/cpp/src/receiver.cpp index 325036df..9f3c7706 100644 --- a/cpp/src/receiver.cpp +++ b/cpp/src/receiver.cpp @@ -78,7 +78,7 @@ void receiver::drain() { // Drain is already complete. No state to communicate over the wire. // Create dummy flow event where "drain finish" can be detected. pn_connection_t *pnc = pn_session_connection(pn_link_session(pn_object())); - pn_collector_put(pn_connection_collector(pnc), PN_OBJECT, pn_object(), PN_LINK_FLOW); + pn_collector_put_object(pn_connection_collector(pnc), pn_object(), PN_LINK_FLOW); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
