You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2014/09/15 21:19:35 UTC
svn commit: r1625121 - in /qpid/proton/trunk/proton-c: include/proton/ src/
src/codec/ src/engine/ src/events/ src/message/ src/messenger/ src/object/
src/posix/ src/tests/ src/transport/
Author: rhs
Date: Mon Sep 15 19:19:34 2014
New Revision: 1625121
URL: http://svn.apache.org/r1625121
Log:
made list and map take classes
Modified:
qpid/proton/trunk/proton-c/include/proton/object.h
qpid/proton/trunk/proton-c/src/codec/codec.c
qpid/proton/trunk/proton-c/src/codec/decoder.c
qpid/proton/trunk/proton-c/src/codec/encoder.c
qpid/proton/trunk/proton-c/src/engine/engine.c
qpid/proton/trunk/proton-c/src/events/event.c
qpid/proton/trunk/proton-c/src/message/message.c
qpid/proton/trunk/proton-c/src/messenger/messenger.c
qpid/proton/trunk/proton-c/src/messenger/store.c
qpid/proton/trunk/proton-c/src/messenger/subscription.c
qpid/proton/trunk/proton-c/src/messenger/transform.c
qpid/proton/trunk/proton-c/src/object/object.c
qpid/proton/trunk/proton-c/src/posix/driver.c
qpid/proton/trunk/proton-c/src/posix/io.c
qpid/proton/trunk/proton-c/src/posix/selector.c
qpid/proton/trunk/proton-c/src/selectable.c
qpid/proton/trunk/proton-c/src/tests/object.c
qpid/proton/trunk/proton-c/src/transport/transport.c
Modified: qpid/proton/trunk/proton-c/include/proton/object.h
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/object.h?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/object.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/object.h Mon Sep 15 19:19:34 2014
@@ -43,6 +43,9 @@ typedef struct pn_hash_t pn_hash_t;
typedef void *(*pn_iterator_next_t)(void *state);
typedef struct pn_iterator_t pn_iterator_t;
+// XXX: if we factor refcounting stuff into a separate dimension then
+// we could have a weakref class instead of having the options stuff
+
struct pn_class_t {
const char *name;
void *(*newinst)(const pn_class_t *, size_t);
@@ -93,13 +96,14 @@ extern const pn_class_t *PN_VOID;
PN_EXTERN void *pn_class_new(const pn_class_t *clazz, size_t size);
PN_EXTERN void *pn_class_incref(const pn_class_t *clazz, void *object);
-PN_EXTERN void pn_class_decref(const pn_class_t *clazz, void *object);
-PN_EXTERN void pn_class_free(const pn_class_t *clazz, void *object);
PN_EXTERN int pn_class_refcount(const pn_class_t *clazz, void *object);
+PN_EXTERN int pn_class_decref(const pn_class_t *clazz, void *object);
+PN_EXTERN void pn_class_free(const pn_class_t *clazz, void *object);
PN_EXTERN const pn_class_t *pn_class_reify(const pn_class_t *clazz, void *object);
PN_EXTERN uintptr_t pn_class_hashcode(const pn_class_t *clazz, void *object);
PN_EXTERN intptr_t pn_class_compare(const pn_class_t *clazz, void *a, void *b);
PN_EXTERN bool pn_class_equals(const pn_class_t *clazz, void *a, void *b);
+PN_EXTERN int pn_class_inspect(const pn_class_t *clazz, void *object, pn_string_t *dst);
PN_EXTERN void *pn_object_new(const pn_class_t *clazz, size_t size);
PN_EXTERN const pn_class_t *pn_object_reify(void *object);
@@ -107,19 +111,10 @@ PN_EXTERN void pn_object_incref(void *ob
PN_EXTERN int pn_object_refcount(void *object);
PN_EXTERN void pn_object_decref(void *object);
PN_EXTERN void pn_object_free(void *object);
-PN_EXTERN uintptr_t pn_object_hashcode(void *object);
-PN_EXTERN intptr_t pn_object_compare(void *a, void *b);
-PN_EXTERN int pn_object_inspect(void *object, pn_string_t *dst);
-
-PN_EXTERN void *pn_new(size_t size, const pn_class_t* clazz);
-PN_EXTERN void *pn_new2(size_t size, const pn_class_t* clazz, void *from);
-PN_EXTERN void pn_initialize(void *object, const pn_class_t *clazz);
+
PN_EXTERN void *pn_incref(void *object);
-PN_EXTERN void *pn_incref2(void *object, void *from);
-PN_EXTERN void pn_decref(void *object);
-PN_EXTERN void pn_decref2(void *object, void *from);
+PN_EXTERN int pn_decref(void *object);
PN_EXTERN int pn_refcount(void *object);
-PN_EXTERN void pn_finalize(void *object);
PN_EXTERN void pn_free(void *object);
PN_EXTERN const pn_class_t *pn_class(void* object);
PN_EXTERN uintptr_t pn_hashcode(void *object);
@@ -129,7 +124,7 @@ PN_EXTERN int pn_inspect(void *object, p
#define PN_REFCOUNT (0x1)
-PN_EXTERN pn_list_t *pn_list(size_t capacity, int options);
+PN_EXTERN pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity, int options);
PN_EXTERN size_t pn_list_size(pn_list_t *list);
PN_EXTERN void *pn_list_get(pn_list_t *list, int index);
PN_EXTERN void pn_list_set(pn_list_t *list, int index, void *value);
@@ -143,7 +138,8 @@ PN_EXTERN void pn_list_iterator(pn_list_
#define PN_REFCOUNT_KEY (0x2)
#define PN_REFCOUNT_VALUE (0x4)
-PN_EXTERN pn_map_t *pn_map(size_t capacity, float load_factor, int options);
+PN_EXTERN pn_map_t *pn_map(const pn_class_t *key, const pn_class_t *value,
+ size_t capacity, float load_factor, int options);
PN_EXTERN size_t pn_map_size(pn_map_t *map);
PN_EXTERN int pn_map_put(pn_map_t *map, void *key, void *value);
PN_EXTERN void *pn_map_get(pn_map_t *map, void *key);
@@ -153,7 +149,7 @@ PN_EXTERN pn_handle_t pn_map_next(pn_map
PN_EXTERN void *pn_map_key(pn_map_t *map, pn_handle_t entry);
PN_EXTERN void *pn_map_value(pn_map_t *map, pn_handle_t entry);
-PN_EXTERN pn_hash_t *pn_hash(size_t capacity, float load_factor, int options);
+PN_EXTERN pn_hash_t *pn_hash(const pn_class_t *clazz, size_t capacity, float load_factor, int options);
PN_EXTERN size_t pn_hash_size(pn_hash_t *hash);
PN_EXTERN int pn_hash_put(pn_hash_t *hash, uintptr_t key, void *value);
PN_EXTERN void *pn_hash_get(pn_hash_t *hash, uintptr_t key);
Modified: qpid/proton/trunk/proton-c/src/codec/codec.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/codec/codec.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/codec/codec.c (original)
+++ qpid/proton/trunk/proton-c/src/codec/codec.c Mon Sep 15 19:19:34 2014
@@ -367,7 +367,7 @@ static int pn_data_inspect(void *obj, pn
pn_data_t *pn_data(size_t capacity)
{
static const pn_class_t clazz = PN_CLASS(pn_data);
- pn_data_t *data = (pn_data_t *) pn_new(sizeof(pn_data_t), &clazz);
+ pn_data_t *data = (pn_data_t *) pn_class_new(&clazz, sizeof(pn_data_t));
data->capacity = capacity;
data->size = 0;
data->nodes = capacity ? (pni_node_t *) malloc(capacity * sizeof(pni_node_t)) : NULL;
Modified: qpid/proton/trunk/proton-c/src/codec/decoder.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/codec/decoder.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/codec/decoder.c (original)
+++ qpid/proton/trunk/proton-c/src/codec/decoder.c Mon Sep 15 19:19:34 2014
@@ -55,7 +55,7 @@ static void pn_decoder_finalize(void *ob
pn_decoder_t *pn_decoder()
{
static const pn_class_t clazz = PN_CLASS(pn_decoder);
- return (pn_decoder_t *) pn_new(sizeof(pn_decoder_t), &clazz);
+ return (pn_decoder_t *) pn_class_new(&clazz, sizeof(pn_decoder_t));
}
static inline uint8_t pn_decoder_readf8(pn_decoder_t *decoder)
Modified: qpid/proton/trunk/proton-c/src/codec/encoder.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/codec/encoder.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/codec/encoder.c (original)
+++ qpid/proton/trunk/proton-c/src/codec/encoder.c Mon Sep 15 19:19:34 2014
@@ -57,7 +57,7 @@ static void pn_encoder_finalize(void *ob
pn_encoder_t *pn_encoder()
{
static const pn_class_t clazz = PN_CLASS(pn_encoder);
- return (pn_encoder_t *) pn_new(sizeof(pn_encoder_t), &clazz);
+ return (pn_encoder_t *) pn_class_new(&clazz, sizeof(pn_encoder_t));
}
static uint8_t pn_type2code(pn_encoder_t *encoder, pn_type_t type)
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=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Mon Sep 15 19:19:34 2014
@@ -189,7 +189,7 @@ void pn_add_session(pn_connection_t *con
{
pn_list_add(conn->sessions, ssn);
ssn->connection = conn;
- pn_incref2(conn, ssn); // keep around until finalized
+ pn_incref(conn); // keep around until finalized
}
void pn_remove_session(pn_connection_t *conn, pn_session_t *ssn)
@@ -227,7 +227,7 @@ void pn_session_free(pn_session_t *sessi
pn_endpoint_t *endpoint = (pn_endpoint_t *) session;
LL_REMOVE(pn_ep_get_connection(endpoint), endpoint, endpoint);
session->endpoint.freed = true;
- pn_decref2(session, session->connection);
+ pn_decref(session);
}
void *pn_session_get_context(pn_session_t *session)
@@ -289,10 +289,10 @@ void pn_link_free(pn_link_t *link)
while (link->settled_head) {
delivery = link->settled_head;
LL_POP(link, settled, pn_delivery_t);
- pn_decref2(delivery, link);
+ pn_decref(delivery);
}
link->endpoint.freed = true;
- pn_decref2(link, link->session);
+ pn_decref(link);
}
void *pn_link_get_context(pn_link_t *link)
@@ -352,7 +352,7 @@ static void pn_connection_finalize(void
return;
}
- pn_decref2(conn->collector, conn);
+ pn_decref(conn->collector);
pn_free(conn->sessions);
pn_free(conn->container);
pn_free(conn->hostname);
@@ -370,7 +370,7 @@ static void pn_connection_finalize(void
pn_connection_t *pn_connection()
{
static const pn_class_t clazz = PN_CLASS(pn_connection);
- pn_connection_t *conn = (pn_connection_t *) pn_new(sizeof(pn_connection_t), &clazz);
+ pn_connection_t *conn = (pn_connection_t *) pn_class_new(&clazz, sizeof(pn_connection_t));
if (!conn) return NULL;
conn->context = NULL;
@@ -379,7 +379,7 @@ pn_connection_t *pn_connection()
pn_endpoint_init(&conn->endpoint, CONNECTION, conn);
conn->transport_head = NULL;
conn->transport_tail = NULL;
- conn->sessions = pn_list(0, 0);
+ conn->sessions = pn_list(PN_OBJECT, 0, 0);
conn->transport = NULL;
conn->work_head = NULL;
conn->work_tail = NULL;
@@ -403,9 +403,9 @@ static const pn_event_type_t endpoint_in
void pn_connection_collect(pn_connection_t *connection, pn_collector_t *collector)
{
- pn_decref2(connection->collector, connection);
+ pn_decref(connection->collector);
connection->collector = collector;
- pn_incref2(connection->collector, connection);
+ pn_incref(connection->collector);
pn_endpoint_t *endpoint = connection->endpoint_head;
while (endpoint) {
pn_collector_put(connection->collector, endpoint_init_event_map[endpoint->type], endpoint);
@@ -558,7 +558,7 @@ void pn_add_tpwork(pn_delivery_t *delive
{
LL_ADD(connection, tpwork, delivery);
delivery->tpwork = true;
- pn_incref2(delivery, connection);
+ pn_incref(delivery);
}
pn_modified(connection, &connection->endpoint, true);
}
@@ -570,7 +570,7 @@ void pn_clear_tpwork(pn_delivery_t *deli
{
LL_REMOVE(connection, tpwork, delivery);
delivery->tpwork = false;
- pn_decref2(delivery, connection); // may free delivery!
+ pn_decref(delivery); // may free delivery!
}
}
@@ -592,7 +592,7 @@ void pn_modified(pn_connection_t *connec
if (!endpoint->modified) {
LL_ADD(connection, transport, endpoint);
endpoint->modified = true;
- pn_incref2(endpoint, connection);
+ pn_incref(endpoint);
}
if (emit && connection->transport) {
@@ -608,7 +608,7 @@ void pn_clear_modified(pn_connection_t *
endpoint->transport_next = NULL;
endpoint->transport_prev = NULL;
endpoint->modified = false;
- pn_decref2(endpoint, connection); // may free endpoint!
+ pn_decref(endpoint); // may free endpoint!
}
}
@@ -706,7 +706,7 @@ static void pn_session_finalize(void *ob
pn_delivery_map_free(&session->state.outgoing);
pn_free(session->state.local_handles);
pn_free(session->state.remote_handles);
- pn_decref2(session->connection, session);
+ pn_decref(session->connection);
}
#define pn_session_initialize NULL
@@ -718,12 +718,12 @@ pn_session_t *pn_session(pn_connection_t
{
assert(conn);
static const pn_class_t clazz = PN_CLASS(pn_session);
- pn_session_t *ssn = (pn_session_t *) pn_new2(sizeof(pn_session_t), &clazz, conn);
+ pn_session_t *ssn = (pn_session_t *) pn_class_new(&clazz, sizeof(pn_session_t));
if (!ssn) return NULL;
pn_endpoint_init(&ssn->endpoint, SESSION, conn);
pn_add_session(conn, ssn);
- ssn->links = pn_list(0, 0);
+ ssn->links = pn_list(PN_OBJECT, 0, 0);
ssn->context = 0;
ssn->incoming_capacity = 1024*1024;
ssn->incoming_bytes = 0;
@@ -737,8 +737,8 @@ pn_session_t *pn_session(pn_connection_t
ssn->state.remote_channel = (uint16_t)-1;
pn_delivery_map_init(&ssn->state.incoming, 0);
pn_delivery_map_init(&ssn->state.outgoing, 0);
- ssn->state.local_handles = pn_hash(0, 0.75, PN_REFCOUNT);
- ssn->state.remote_handles = pn_hash(0, 0.75, PN_REFCOUNT);
+ ssn->state.local_handles = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
+ ssn->state.remote_handles = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
// end transport state
pn_collector_put(conn->collector, PN_SESSION_INIT, ssn);
@@ -814,7 +814,7 @@ static void pn_link_finalize(void *objec
pn_terminus_free(&link->remote_target);
pn_free(link->name);
pn_endpoint_tini(endpoint);
- pn_decref2(link->session, link);
+ pn_decref(link->session);
}
#define pn_link_initialize NULL
@@ -825,11 +825,11 @@ static void pn_link_finalize(void *objec
pn_link_t *pn_link_new(int type, pn_session_t *session, const char *name)
{
static const pn_class_t clazz = PN_CLASS(pn_link);
- pn_link_t *link = (pn_link_t *) pn_new2(sizeof(pn_link_t), &clazz, session);
+ pn_link_t *link = (pn_link_t *) pn_class_new(&clazz, sizeof(pn_link_t));
pn_endpoint_init(&link->endpoint, type, session->connection);
pn_add_link(session, link);
- pn_incref2(session, link); // keep session until link finalized
+ pn_incref(session); // keep session until link finalized
link->name = pn_string(name);
pn_terminus_init(&link->source, PN_SOURCE);
pn_terminus_init(&link->target, PN_TARGET);
@@ -1069,7 +1069,7 @@ static void pn_delivery_finalize(void *o
pn_buffer_free(delivery->bytes);
pn_disposition_finalize(&delivery->local);
pn_disposition_finalize(&delivery->remote);
- pn_decref2(delivery->link, delivery);
+ pn_decref(delivery->link);
}
static void pn_disposition_init(pn_disposition_t *ds)
@@ -1104,10 +1104,10 @@ pn_delivery_t *pn_delivery(pn_link_t *li
LL_POP(link, settled, pn_delivery_t);
if (!delivery) {
static const pn_class_t clazz = PN_CLASS(pn_delivery);
- delivery = (pn_delivery_t *) pn_new2(sizeof(pn_delivery_t), &clazz, link);
+ delivery = (pn_delivery_t *) pn_class_new(&clazz, sizeof(pn_delivery_t));
if (!delivery) return NULL;
delivery->link = link;
- pn_incref2(delivery->link, delivery); // keep link until finalized
+ pn_incref(delivery->link); // keep link until finalized
delivery->tag = pn_buffer(16);
delivery->bytes = pn_buffer(64);
pn_disposition_init(&delivery->local);
Modified: qpid/proton/trunk/proton-c/src/events/event.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/events/event.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/events/event.c (original)
+++ qpid/proton/trunk/proton-c/src/events/event.c Mon Sep 15 19:19:34 2014
@@ -81,7 +81,7 @@ static int pn_collector_inspect(void *ob
pn_collector_t *pn_collector(void)
{
static const pn_class_t clazz = PN_CLASS(pn_collector);
- pn_collector_t *collector = (pn_collector_t *) pn_new(sizeof(pn_collector_t), &clazz);
+ pn_collector_t *collector = (pn_collector_t *) pn_class_new(&clazz, sizeof(pn_collector_t));
return collector;
}
@@ -90,7 +90,7 @@ void pn_collector_free(pn_collector_t *c
collector->freed = true;
pn_collector_drain(collector);
pn_collector_shrink(collector);
- pn_decref(collector);
+ pn_class_decref(PN_OBJECT, collector);
}
pn_event_t *pn_event(void);
@@ -133,7 +133,7 @@ pn_event_t *pn_collector_put(pn_collecto
event->type = type;
event->context = context;
- pn_incref2(event->context, collector);
+ pn_class_incref(PN_OBJECT, event->context);
//printf("event %s on %p\n", pn_event_type_name(event->type), event->context);
@@ -160,7 +160,7 @@ bool pn_collector_pop(pn_collector_t *co
// decref before adding to the free list
if (event->context) {
- pn_decref2(event->context, collector);
+ pn_class_decref(PN_OBJECT, event->context);
event->context = NULL;
}
@@ -201,7 +201,7 @@ static int pn_event_inspect(void *obj, p
pn_event_t *pn_event(void)
{
static const pn_class_t clazz = PN_CLASS(pn_event);
- pn_event_t *event = (pn_event_t *) pn_new(sizeof(pn_event_t), &clazz);
+ pn_event_t *event = (pn_event_t *) pn_class_new(&clazz, sizeof(pn_event_t));
return event;
}
Modified: qpid/proton/trunk/proton-c/src/message/message.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/message/message.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/message/message.c (original)
+++ qpid/proton/trunk/proton-c/src/message/message.c Mon Sep 15 19:19:34 2014
@@ -322,7 +322,7 @@ int pn_message_inspect(void *obj, pn_str
pn_message_t *pn_message()
{
static const pn_class_t clazz = PN_CLASS(pn_message);
- pn_message_t *msg = (pn_message_t *) pn_new(sizeof(pn_message_t), &clazz);
+ pn_message_t *msg = (pn_message_t *) pn_class_new(&clazz, sizeof(pn_message_t));
msg->durable = false;
msg->priority = PN_DEFAULT_PRIORITY;
msg->ttl = 0;
Modified: qpid/proton/trunk/proton-c/src/messenger/messenger.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/messenger.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/messenger.c Mon Sep 15 19:19:34 2014
@@ -375,7 +375,7 @@ static pn_listener_ctx_t *pn_listener_ct
return NULL;
}
- pn_listener_ctx_t *ctx = (pn_listener_ctx_t *) pn_new(sizeof(pn_listener_ctx_t), PN_OBJECT);
+ pn_listener_ctx_t *ctx = (pn_listener_ctx_t *) pn_class_new(PN_OBJECT, sizeof(pn_listener_ctx_t));
ctx->messenger = messenger;
ctx->domain = pn_ssl_domain(PN_SSL_MODE_SERVER);
if (messenger->certificate) {
@@ -596,7 +596,7 @@ pn_messenger_t *pn_messenger(const char
m->blocking = true;
m->passive = false;
m->io = pn_io();
- m->pending = pn_list(0, 0);
+ m->pending = pn_list(PN_OBJECT, 0, 0);
m->interruptor = pni_selectable
(pni_interruptor_capacity, pni_interruptor_pending,
pni_interruptor_deadline, pni_interruptor_readable,
@@ -611,8 +611,8 @@ pn_messenger_t *pn_messenger(const char
pn_pipe(m->io, m->ctrl);
pni_selectable_set_fd(m->interruptor, m->ctrl[0]);
pni_selectable_set_context(m->interruptor, m);
- m->listeners = pn_list(0, 0);
- m->connections = pn_list(0, 0);
+ m->listeners = pn_list(PN_OBJECT, 0, 0);
+ m->connections = pn_list(PN_OBJECT, 0, 0);
m->selector = pn_io_selector(m->io);
m->collector = pn_collector();
m->credit_mode = LINK_CREDIT_EXPLICIT;
@@ -621,13 +621,13 @@ pn_messenger_t *pn_messenger(const char
m->distributed = 0;
m->receivers = 0;
m->draining = 0;
- m->credited = pn_list(0, 0);
- m->blocked = pn_list(0, 0);
+ m->credited = pn_list(PN_OBJECT, 0, 0);
+ m->blocked = pn_list(PN_OBJECT, 0, 0);
m->next_drain = 0;
m->next_tag = 0;
m->outgoing = pni_store();
m->incoming = pni_store();
- m->subscriptions = pn_list(0, PN_REFCOUNT);
+ m->subscriptions = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
m->incoming_subscription = NULL;
m->error = pn_error();
m->routes = pn_transform();
Modified: qpid/proton/trunk/proton-c/src/messenger/store.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/store.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/store.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/store.c Mon Sep 15 19:19:34 2014
@@ -89,7 +89,7 @@ pni_store_t *pni_store()
store->window = 0;
store->lwm = 0;
store->hwm = 0;
- store->tracked = pn_hash(0, 0.75, PN_REFCOUNT);
+ store->tracked = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
return store;
}
@@ -210,7 +210,7 @@ pni_entry_t *pni_store_put(pni_store_t *
if (!address) address = "";
pni_stream_t *stream = pni_stream_put(store, address);
if (!stream) return NULL;
- pni_entry_t *entry = (pni_entry_t *) pn_new(sizeof(pni_entry_t), &clazz);
+ pni_entry_t *entry = (pni_entry_t *) pn_class_new(&clazz, sizeof(pni_entry_t));
if (!entry) return NULL;
entry->stream = stream;
entry->free = false;
Modified: qpid/proton/trunk/proton-c/src/messenger/subscription.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/subscription.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/subscription.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/subscription.c Mon Sep 15 19:19:34 2014
@@ -65,13 +65,13 @@ pn_subscription_t *pn_subscription(pn_me
const char *port)
{
static const pn_class_t clazz = PN_CLASS(pn_subscription);
- pn_subscription_t *sub = (pn_subscription_t *) pn_new(sizeof(pn_subscription_t), &clazz);
+ pn_subscription_t *sub = (pn_subscription_t *) pn_class_new(&clazz, sizeof(pn_subscription_t));
sub->messenger = messenger;
pn_string_set(sub->scheme, scheme);
pn_string_set(sub->host, host);
pn_string_set(sub->port, port);
pni_messenger_add_subscription(messenger, sub);
- pn_decref(sub);
+ pn_class_decref(PN_OBJECT, sub);
return sub;
}
Modified: qpid/proton/trunk/proton-c/src/messenger/transform.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/transform.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/transform.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/transform.c Mon Sep 15 19:19:34 2014
@@ -63,7 +63,7 @@ static void pn_rule_finalize(void *objec
pn_rule_t *pn_rule(const char *pattern, const char *substitution)
{
static const pn_class_t clazz = PN_CLASS(pn_rule);
- pn_rule_t *rule = (pn_rule_t *) pn_new(sizeof(pn_rule_t), &clazz);
+ pn_rule_t *rule = (pn_rule_t *) pn_class_new(&clazz, sizeof(pn_rule_t));
rule->pattern = pn_string(pattern);
rule->substitution = pn_string(substitution);
return rule;
@@ -83,8 +83,8 @@ static void pn_transform_finalize(void *
pn_transform_t *pn_transform()
{
static const pn_class_t clazz = PN_CLASS(pn_transform);
- pn_transform_t *transform = (pn_transform_t *) pn_new(sizeof(pn_transform_t), &clazz);
- transform->rules = pn_list(0, PN_REFCOUNT);
+ pn_transform_t *transform = (pn_transform_t *) pn_class_new(&clazz, sizeof(pn_transform_t));
+ transform->rules = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
transform->matched = false;
return transform;
}
Modified: qpid/proton/trunk/proton-c/src/object/object.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/object/object.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/object/object.c (original)
+++ qpid/proton/trunk/proton-c/src/object/object.c Mon Sep 15 19:19:34 2014
@@ -30,6 +30,9 @@
#define pn_object_initialize NULL
#define pn_object_finalize NULL
+#define pn_object_inspect NULL
+uintptr_t pn_object_hashcode(void *object) { return (uintptr_t) object; }
+intptr_t pn_object_compare(void *a, void *b) { return (intptr_t) b - (intptr_t) a; }
const pn_class_t PNI_OBJECT = PN_CLASS(pn_object);
const pn_class_t *PN_OBJECT = &PNI_OBJECT;
@@ -52,14 +55,20 @@ const pn_class_t *PN_VOID = &PNI_VOID;
void *pn_class_new(const pn_class_t *clazz, size_t size)
{
assert(clazz);
- return clazz->newinst(clazz, size);
+ void *object = clazz->newinst(clazz, size);
+ if (clazz->initialize) {
+ clazz->initialize(object);
+ }
+ return object;
}
void *pn_class_incref(const pn_class_t *clazz, void *object)
{
assert(clazz);
- clazz = clazz->reify(object);
- clazz->incref(object);
+ if (object) {
+ clazz = clazz->reify(object);
+ clazz->incref(object);
+ }
return object;
}
@@ -70,18 +79,50 @@ int pn_class_refcount(const pn_class_t *
return clazz->refcount(object);
}
-void pn_class_decref(const pn_class_t *clazz, void *object)
+int pn_class_decref(const pn_class_t *clazz, void *object)
{
assert(clazz);
- clazz = clazz->reify(object);
- clazz->decref(object);
+
+ if (object) {
+ clazz = clazz->reify(object);
+ clazz->decref(object);
+ int rc = clazz->refcount(object);
+ if (rc == 0) {
+ if (clazz->finalize) {
+ clazz->finalize(object);
+ // check the refcount again in case the finalizer created a
+ // new reference
+ rc = clazz->refcount(object);
+ }
+ if (rc == 0) {
+ clazz->free(object);
+ return 0;
+ }
+ } else {
+ return rc;
+ }
+ }
+
+ return 0;
}
void pn_class_free(const pn_class_t *clazz, void *object)
{
assert(clazz);
- clazz = clazz->reify(object);
- clazz->free(object);
+ if (object) {
+ clazz = clazz->reify(object);
+ int rc = clazz->refcount(object);
+ assert(rc == 1 || rc == -1);
+ if (rc == 1) {
+ rc = pn_class_decref(clazz, object);
+ assert(rc == 0);
+ } else {
+ if (clazz->finalize) {
+ clazz->finalize(object);
+ }
+ clazz->free(object);
+ }
+ }
}
const pn_class_t *pn_class_reify(const pn_class_t *clazz, void *object)
@@ -125,6 +166,31 @@ bool pn_class_equals(const pn_class_t *c
return pn_class_compare(clazz, a, b) == 0;
}
+int pn_class_inspect(const pn_class_t *clazz, void *object, pn_string_t *dst)
+{
+ assert(clazz);
+
+ clazz = clazz->reify(object);
+
+ if (!pn_string_get(dst)) {
+ pn_string_set(dst, "");
+ }
+
+ const char *name;
+
+ if (object) {
+ if (clazz->inspect) {
+ return clazz->inspect(object, dst);
+ } else if (clazz->name) {
+ name = clazz->name;
+ } else {
+ name = "<anon>";
+ }
+ }
+
+ return pn_string_addf(dst, "%s<%p>", name, object);
+}
+
typedef struct {
const pn_class_t *clazz;
int refcount;
@@ -135,7 +201,11 @@ typedef struct {
void *pn_object_new(const pn_class_t *clazz, size_t size)
{
- return pn_new(size, clazz);
+ pni_head_t *head = (pni_head_t *) malloc(sizeof(pni_head_t) + size);
+ void *object = head + 1;
+ head->clazz = clazz;
+ head->refcount = 1;
+ return object;
}
const pn_class_t *pn_object_reify(void *object)
@@ -149,136 +219,58 @@ const pn_class_t *pn_object_reify(void *
void pn_object_incref(void *object)
{
- pn_incref(object);
+ if (object) {
+ pni_head(object)->refcount++;
+ }
}
int pn_object_refcount(void *object)
{
- return pn_refcount(object);
+ assert(object);
+ return pni_head(object)->refcount;
}
void pn_object_decref(void *object)
{
- pn_decref(object);
+ pni_head_t *head = pni_head(object);
+ assert(head->refcount > 0);
+ head->refcount--;
}
void pn_object_free(void *object)
{
- pn_free(object);
-}
-
-uintptr_t pn_object_hashcode(void *object)
-{
- return (uintptr_t) object;
-}
-
-intptr_t pn_object_compare(void *a, void *b)
-{
- return (intptr_t) b - (intptr_t) a;
-}
-
-int pn_object_inspect(void *object, pn_string_t *dst)
-{
- return pn_inspect(object, dst);
-}
-
-void *pn_new(size_t size, const pn_class_t *clazz)
-{
- assert(clazz);
- return pn_new2(size, clazz, NULL);
-}
-
-void *pn_new2(size_t size, const pn_class_t *clazz, void *from)
-{
- pni_head_t *head = (pni_head_t *) malloc(sizeof(pni_head_t) + size);
- void *object = head + 1;
- pn_initialize(object, clazz);
- return object;
-}
-
-void pn_initialize(void *object, const pn_class_t *clazz)
-{
pni_head_t *head = pni_head(object);
- head->clazz = clazz;
- head->refcount = 1;
- if (clazz && clazz->initialize) {
- clazz->initialize(object);
- }
+ free(head);
}
-void *pn_incref(void *object) {
- return pn_incref2(object, NULL);
-}
-
-void *pn_incref2(void *object, void *from) {
- if (object) {
- pni_head(object)->refcount++;
- }
- return object;
-}
-
-void pn_decref(void *object) {
- pn_decref2(object, NULL);
-}
-
-void pn_decref2(void *object, void *from)
+void *pn_incref(void *object)
{
- if (object) {
- pni_head_t *head = pni_head(object);
- assert(head->refcount > 0);
- head->refcount--;
- if (!head->refcount) {
- pn_finalize(object);
- // Check the refcount again in case finalize created a new
- // reference.
- if (!head->refcount) {
- free(head);
- }
- }
- }
+ return pn_class_incref(PN_OBJECT, object);
}
-void pn_finalize(void *object)
+int pn_decref(void *object)
{
- if (object) {
- pni_head_t *head = pni_head(object);
- assert(head->refcount == 0);
- if (head->clazz && head->clazz->finalize) {
- head->clazz->finalize(object);
- }
- }
+ return pn_class_decref(PN_OBJECT, object);
}
int pn_refcount(void *object)
{
- assert(object);
- return pni_head(object)->refcount;
+ return pn_class_refcount(PN_OBJECT, object);
}
void pn_free(void *object)
{
- if (object) {
- assert(pn_refcount(object) == 1);
- pn_decref(object);
- }
+ pn_class_free(PN_OBJECT, object);
}
const pn_class_t *pn_class(void *object)
{
- assert(object);
- return pni_head(object)->clazz;
+ return pn_class_reify(PN_OBJECT, object);
}
uintptr_t pn_hashcode(void *object)
{
- if (!object) return 0;
-
- pni_head_t *head = pni_head(object);
- if (head->clazz && head->clazz->hashcode) {
- return head->clazz->hashcode(object);
- } else {
- return (uintptr_t) head;
- }
+ return pn_class_hashcode(PN_OBJECT, object);
}
intptr_t pn_compare(void *a, void *b)
@@ -293,32 +285,11 @@ bool pn_equals(void *a, void *b)
int pn_inspect(void *object, pn_string_t *dst)
{
- if (!pn_string_get(dst)) {
- pn_string_set(dst, "");
- }
-
- if (object) {
- pni_head_t *head = pni_head(object);
- const char *name;
- if (head->clazz) {
- const pn_class_t *clazz = head->clazz;
- if (clazz->inspect) {
- return clazz->inspect(object, dst);
- } else if (clazz->name) {
- name = clazz->name;
- } else {
- name = "object";
- }
- } else {
- name = "object";
- }
- return pn_string_addf(dst, "%s<%p>", name, object);
- } else {
- return pn_string_addf(dst, "(null)");
- }
+ return pn_class_inspect(PN_OBJECT, object, dst);
}
struct pn_list_t {
+ const pn_class_t *clazz;
size_t capacity;
size_t size;
void **elements;
@@ -341,9 +312,9 @@ void pn_list_set(pn_list_t *list, int in
{
assert(list); assert(list->size);
void *old = list->elements[index % list->size];
- if (list->options & PN_REFCOUNT) pn_decref2(old, list);
+ if (list->options & PN_REFCOUNT) pn_class_decref(list->clazz, old);
list->elements[index % list->size] = value;
- if (list->options & PN_REFCOUNT) pn_incref2(value, list);
+ if (list->options & PN_REFCOUNT) pn_class_incref(list->clazz, value);
}
void pn_list_ensure(pn_list_t *list, size_t capacity)
@@ -363,7 +334,7 @@ int pn_list_add(pn_list_t *list, void *v
assert(list);
pn_list_ensure(list, list->size + 1);
list->elements[list->size++] = value;
- if (list->options & PN_REFCOUNT) pn_incref2(value, list);
+ if (list->options & PN_REFCOUNT) pn_class_incref(list->clazz, value);
return 0;
}
@@ -398,7 +369,7 @@ void pn_list_del(pn_list_t *list, int in
if (list->options & PN_REFCOUNT) {
for (int i = 0; i < n; i++) {
- pn_decref2(list->elements[index + i], list);
+ pn_class_decref(list->clazz, list->elements[index + i]);
}
}
@@ -450,7 +421,7 @@ static void pn_list_finalize(void *objec
assert(object);
pn_list_t *list = (pn_list_t *) object;
for (size_t i = 0; i < list->size; i++) {
- if (list->options & PN_REFCOUNT) pn_decref2(pn_list_get(list, i), list);
+ if (list->options & PN_REFCOUNT) pn_class_decref(list->clazz, pn_list_get(list, i));
}
free(list->elements);
}
@@ -500,7 +471,7 @@ static int pn_list_inspect(void *obj, pn
err = pn_string_addf(dst, ", ");
if (err) return err;
}
- err = pn_inspect(pn_list_get(list, i), dst);
+ err = pn_class_inspect(list->clazz, pn_list_get(list, i), dst);
if (err) return err;
}
return pn_string_addf(dst, "]");
@@ -508,11 +479,12 @@ static int pn_list_inspect(void *obj, pn
#define pn_list_initialize NULL
-pn_list_t *pn_list(size_t capacity, int options)
+pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity, int options)
{
- static const pn_class_t clazz = PN_CLASS(pn_list);
+ static const pn_class_t list_clazz = PN_CLASS(pn_list);
- pn_list_t *list = (pn_list_t *) pn_new(sizeof(pn_list_t), &clazz);
+ pn_list_t *list = (pn_list_t *) pn_class_new(&list_clazz, sizeof(pn_list_t));
+ list->clazz = clazz;
list->capacity = capacity ? capacity : 16;
list->elements = (void **) malloc(list->capacity * sizeof(void *));
list->size = 0;
@@ -532,6 +504,8 @@ typedef struct {
} pni_entry_t;
struct pn_map_t {
+ const pn_class_t *key;
+ const pn_class_t *value;
pni_entry_t *entries;
size_t capacity;
size_t addressable;
@@ -541,7 +515,6 @@ struct pn_map_t {
float load_factor;
bool count_keys;
bool count_values;
- bool inspect_keys;
};
static void pn_map_finalize(void *object)
@@ -551,8 +524,8 @@ static void pn_map_finalize(void *object
if (map->count_keys || map->count_values) {
for (size_t i = 0; i < map->capacity; i++) {
if (map->entries[i].state != PNI_ENTRY_FREE) {
- if (map->count_keys) pn_decref2(map->entries[i].key, map);
- if (map->count_values) pn_decref2(map->entries[i].value, map);
+ if (map->count_keys) pn_class_decref(map->key, map->entries[i].key);
+ if (map->count_values) pn_class_decref(map->value, map->entries[i].value);
}
}
}
@@ -604,15 +577,11 @@ static int pn_map_inspect(void *obj, pn_
err = pn_string_addf(dst, ", ");
if (err) return err;
}
- if (map->inspect_keys) {
- err = pn_inspect(pn_map_key(map, entry), dst);
- } else {
- err = pn_string_addf(dst, "%p", pn_map_key(map, entry));
- }
+ err = pn_class_inspect(map->key, pn_map_key(map, entry), dst);
if (err) return err;
err = pn_string_addf(dst, ": ");
if (err) return err;
- err = pn_inspect(pn_map_value(map, entry), dst);
+ err = pn_class_inspect(map->value, pn_map_value(map, entry), dst);
if (err) return err;
entry = pn_map_next(map, entry);
}
@@ -622,11 +591,14 @@ static int pn_map_inspect(void *obj, pn_
#define pn_map_initialize NULL
#define pn_map_compare NULL
-pn_map_t *pn_map(size_t capacity, float load_factor, int options)
+pn_map_t *pn_map(const pn_class_t *key, const pn_class_t *value,
+ size_t capacity, float load_factor, int options)
{
static const pn_class_t clazz = PN_CLASS(pn_map);
- pn_map_t *map = (pn_map_t *) pn_new(sizeof(pn_map_t), &clazz);
+ pn_map_t *map = (pn_map_t *) pn_class_new(&clazz, sizeof(pn_map_t));
+ map->key = key;
+ map->value = value;
map->capacity = capacity ? capacity : 16;
map->addressable = (size_t) (map->capacity * 0.86);
if (!map->addressable) map->addressable = map->capacity;
@@ -635,7 +607,6 @@ pn_map_t *pn_map(size_t capacity, float
map->equals = pn_equals;
map->count_keys = (options & PN_REFCOUNT) || (options & PN_REFCOUNT_KEY);
map->count_values = (options & PN_REFCOUNT) || (options & PN_REFCOUNT_VALUE);
- map->inspect_keys = true;
pni_map_allocate(map);
return map;
}
@@ -673,8 +644,8 @@ static bool pni_map_ensure(pn_map_t *map
void *key = entries[i].key;
void *value = entries[i].value;
pn_map_put(map, key, value);
- if (map->count_keys) pn_decref2(key, map);
- if (map->count_values) pn_decref2(value, map);
+ if (map->count_keys) pn_class_decref(map->key, key);
+ if (map->count_values) pn_class_decref(map->value, value);
}
}
@@ -693,7 +664,7 @@ static pni_entry_t *pni_map_entry(pn_map
if (create) {
entry->state = PNI_ENTRY_TAIL;
entry->key = key;
- if (map->count_keys) pn_incref2(key, map);
+ if (map->count_keys) pn_class_incref(map->key, key);
map->size++;
return entry;
} else {
@@ -733,7 +704,7 @@ static pni_entry_t *pni_map_entry(pn_map
entry->state = PNI_ENTRY_LINK;
map->entries[empty].state = PNI_ENTRY_TAIL;
map->entries[empty].key = key;
- if (map->count_keys) pn_incref2(key, map);
+ if (map->count_keys) pn_class_incref(map->key, key);
if (pprev) *pprev = entry;
map->size++;
return &map->entries[empty];
@@ -746,9 +717,9 @@ int pn_map_put(pn_map_t *map, void *key,
{
assert(map);
pni_entry_t *entry = pni_map_entry(map, key, NULL, true);
- if (map->count_values) pn_decref2(entry->value, map);
+ if (map->count_values) pn_class_decref(map->value, entry->value);
entry->value = value;
- if (map->count_values) pn_incref2(value, map);
+ if (map->count_values) pn_class_incref(map->value, value);
return 0;
}
@@ -781,8 +752,8 @@ void pn_map_del(pn_map_t *map, void *key
entry->key = NULL;
entry->value = NULL;
map->size--;
- if (dref_key) pn_decref2(dref_key, map);
- if (dref_value) pn_decref2(dref_value, map);
+ if (dref_key) pn_class_decref(map->key, dref_key);
+ if (dref_value) pn_class_decref(map->value, dref_value);
}
}
@@ -838,14 +809,33 @@ static bool pni_identity_equals(void *a,
return a == b;
}
-pn_hash_t *pn_hash(size_t capacity, float load_factor, int options)
+extern const pn_class_t *PN_UINTPTR;
+
+static const pn_class_t *pni_uintptr_reify(void *object) {
+ return PN_UINTPTR;
+}
+
+#define pni_uintptr_new NULL
+#define pni_uintptr_free NULL
+#define pni_uintptr_initialize NULL
+#define pni_uintptr_incref NULL
+#define pni_uintptr_decref NULL
+#define pni_uintptr_refcount NULL
+#define pni_uintptr_finalize NULL
+#define pni_uintptr_hashcode NULL
+#define pni_uintptr_compare NULL
+#define pni_uintptr_inspect NULL
+
+const pn_class_t PNI_UINTPTR = PN_METACLASS(pni_uintptr);
+const pn_class_t *PN_UINTPTR = &PNI_UINTPTR;
+
+pn_hash_t *pn_hash(const pn_class_t *clazz, size_t capacity, float load_factor, int options)
{
- pn_hash_t *hash = (pn_hash_t *) pn_map(capacity, load_factor, 0);
+ pn_hash_t *hash = (pn_hash_t *) pn_map(PN_UINTPTR, clazz, capacity, load_factor, 0);
hash->map.hashcode = pni_identity_hashcode;
hash->map.equals = pni_identity_equals;
hash->map.count_keys = false;
hash->map.count_values = options & PN_REFCOUNT;
- hash->map.inspect_keys = false;
return hash;
}
@@ -967,7 +957,7 @@ pn_string_t *pn_string(const char *bytes
pn_string_t *pn_stringn(const char *bytes, size_t n)
{
static const pn_class_t clazz = PN_CLASS(pn_string);
- pn_string_t *string = (pn_string_t *) pn_new(sizeof(pn_string_t), &clazz);
+ pn_string_t *string = (pn_string_t *) pn_class_new(&clazz, sizeof(pn_string_t));
string->capacity = n ? n * sizeof(char) : 16;
string->bytes = (char *) malloc(string->capacity);
pn_string_setn(string, bytes, n);
@@ -1156,7 +1146,7 @@ static void pn_iterator_finalize(void *o
pn_iterator_t *pn_iterator()
{
static const pn_class_t clazz = PN_CLASS(pn_iterator);
- pn_iterator_t *it = (pn_iterator_t *) pn_new(sizeof(pn_iterator_t), &clazz);
+ pn_iterator_t *it = (pn_iterator_t *) pn_class_new(&clazz, sizeof(pn_iterator_t));
return it;
}
Modified: qpid/proton/trunk/proton-c/src/posix/driver.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/posix/driver.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/posix/driver.c (original)
+++ qpid/proton/trunk/proton-c/src/posix/driver.c Mon Sep 15 19:19:34 2014
@@ -342,12 +342,12 @@ void pn_connector_set_connection(pn_conn
{
if (!ctor) return;
if (ctor->connection) {
- pn_decref(ctor->connection);
+ pn_class_decref(PN_OBJECT, ctor->connection);
pn_transport_unbind(ctor->transport);
}
ctor->connection = connection;
if (ctor->connection) {
- pn_incref(ctor->connection);
+ pn_class_incref(PN_OBJECT, ctor->connection);
pn_transport_bind(ctor->transport, connection);
}
if (ctor->transport) pn_transport_trace(ctor->transport, ctor->trace);
@@ -404,7 +404,7 @@ void pn_connector_free(pn_connector_t *c
if (ctor->driver) pn_driver_remove_connector(ctor->driver, ctor);
pn_transport_free(ctor->transport);
ctor->transport = NULL;
- if (ctor->connection) pn_decref(ctor->connection);
+ if (ctor->connection) pn_class_decref(PN_OBJECT, ctor->connection);
ctor->connection = NULL;
free(ctor);
}
Modified: qpid/proton/trunk/proton-c/src/posix/io.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/posix/io.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/posix/io.c (original)
+++ qpid/proton/trunk/proton-c/src/posix/io.c Mon Sep 15 19:19:34 2014
@@ -69,7 +69,7 @@ void pn_io_finalize(void *obj)
pn_io_t *pn_io(void)
{
static const pn_class_t clazz = PN_CLASS(pn_io);
- pn_io_t *io = (pn_io_t *) pn_new(sizeof(pn_io_t), &clazz);
+ pn_io_t *io = (pn_io_t *) pn_class_new(&clazz, sizeof(pn_io_t));
return io;
}
Modified: qpid/proton/trunk/proton-c/src/posix/selector.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/posix/selector.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/posix/selector.c (original)
+++ qpid/proton/trunk/proton-c/src/posix/selector.c Mon Sep 15 19:19:34 2014
@@ -45,7 +45,7 @@ void pn_selector_initialize(void *obj)
selector->fds = NULL;
selector->deadlines = NULL;
selector->capacity = 0;
- selector->selectables = pn_list(0, 0);
+ selector->selectables = pn_list(PN_OBJECT, 0, 0);
selector->deadline = 0;
selector->current = 0;
selector->awoken = 0;
@@ -68,7 +68,7 @@ void pn_selector_finalize(void *obj)
pn_selector_t *pni_selector(void)
{
static const pn_class_t clazz = PN_CLASS(pn_selector);
- pn_selector_t *selector = (pn_selector_t *) pn_new(sizeof(pn_selector_t), &clazz);
+ pn_selector_t *selector = (pn_selector_t *) pn_class_new(&clazz, sizeof(pn_selector_t));
return selector;
}
Modified: qpid/proton/trunk/proton-c/src/selectable.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/selectable.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/selectable.c (original)
+++ qpid/proton/trunk/proton-c/src/selectable.c Mon Sep 15 19:19:34 2014
@@ -91,7 +91,7 @@ pn_selectable_t *pni_selectable(ssize_t
void (*finalize)(pn_selectable_t *))
{
static const pn_class_t clazz = PN_CLASS(pn_selectable);
- pn_selectable_t *selectable = (pn_selectable_t *) pn_new(sizeof(pn_selectable_t), &clazz);
+ pn_selectable_t *selectable = (pn_selectable_t *) pn_class_new(&clazz, sizeof(pn_selectable_t));
selectable->capacity = capacity;
selectable->pending = pending;
selectable->readable = readable;
Modified: qpid/proton/trunk/proton-c/src/tests/object.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/tests/object.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/tests/object.c (original)
+++ qpid/proton/trunk/proton-c/src/tests/object.c Mon Sep 15 19:19:34 2014
@@ -32,7 +32,7 @@ static void *END = &mem;
static pn_list_t *build_list(size_t capacity, int options, ...)
{
- pn_list_t *result = pn_list(capacity, options);
+ pn_list_t *result = pn_list(PN_OBJECT, capacity, options);
va_list ap;
va_start(ap, options);
@@ -44,7 +44,7 @@ static pn_list_t *build_list(size_t capa
pn_list_add(result, arg);
if (PN_REFCOUNT & options) {
- pn_decref(arg);
+ pn_class_decref(PN_OBJECT, arg);
}
}
va_end(ap);
@@ -54,7 +54,7 @@ static pn_list_t *build_list(size_t capa
static pn_map_t *build_map(size_t capacity, float load_factor, int options, ...)
{
- pn_map_t *result = pn_map(capacity, load_factor, options);
+ pn_map_t *result = pn_map(PN_OBJECT, PN_OBJECT, capacity, load_factor, options);
va_list ap;
void *prev = NULL;
@@ -71,8 +71,8 @@ static pn_map_t *build_map(size_t capaci
if (count % 2) {
pn_map_put(result, prev, arg);
if (PN_REFCOUNT & options) {
- pn_decref(prev);
- pn_decref(arg);
+ pn_class_decref(PN_OBJECT, prev);
+ pn_class_decref(PN_OBJECT, arg);
}
} else {
prev = arg;
@@ -93,8 +93,6 @@ static void noop(void *o) {}
static uintptr_t zero(void *o) { return 0; }
static intptr_t delta(void *a, void *b) { return (uintptr_t) b - (uintptr_t) a; }
-static pn_class_t null_class = {0};
-
#define noop_initialize noop
#define noop_finalize noop
#define noop_hashcode zero
@@ -136,9 +134,9 @@ static void test_class(const pn_class_t
static void test_new(size_t size, const pn_class_t *clazz)
{
- void *obj = pn_new(size, clazz);
+ void *obj = pn_class_new(clazz, size);
assert(obj);
- assert(pn_refcount(obj) == 1);
+ assert(pn_class_refcount(PN_OBJECT, obj) == 1);
assert(pn_class(obj) == clazz);
char *bytes = (char *) obj;
for (size_t i = 0; i < size; i++) {
@@ -164,7 +162,7 @@ static void test_finalize(void)
{
static pn_class_t clazz = PN_CLASS(finalizer);
- int **obj = (int **) pn_new(sizeof(int **), &clazz);
+ int **obj = (int **) pn_class_new(&clazz, sizeof(int **));
assert(obj);
int called = 0;
@@ -191,7 +189,7 @@ static uintptr_t hashcode(void *obj) { r
static void test_hashcode(void)
{
static pn_class_t clazz = PN_CLASS(hashcode);
- void *obj = pn_new(0, &clazz);
+ void *obj = pn_class_new(&clazz, 0);
assert(obj);
assert(pn_hashcode(obj) == (uintptr_t) obj);
assert(pn_hashcode(NULL) == 0);
@@ -208,9 +206,9 @@ static void test_compare(void)
{
static pn_class_t clazz = PN_CLASS(compare);
- void *a = pn_new(0, &clazz);
+ void *a = pn_class_new(&clazz, 0);
assert(a);
- void *b = pn_new(0, &clazz);
+ void *b = pn_class_new(&clazz, 0);
assert(b);
assert(pn_compare(a, b));
@@ -236,7 +234,7 @@ static void test_compare(void)
static void test_refcounting(int refs)
{
- void *obj = pn_new(0, PN_OBJECT);
+ void *obj = pn_class_new(PN_OBJECT, 0);
assert(pn_refcount(obj) == 1);
@@ -259,7 +257,7 @@ static void test_refcounting(int refs)
static void test_list(size_t capacity)
{
- pn_list_t *list = pn_list(0, 0);
+ pn_list_t *list = pn_list(PN_OBJECT, 0, 0);
assert(pn_list_size(list) == 0);
assert(!pn_list_add(list, (void *) 0));
assert(!pn_list_add(list, (void *) 1));
@@ -279,12 +277,12 @@ static void test_list(size_t capacity)
static void test_list_refcount(size_t capacity)
{
- void *one = pn_new(0, PN_OBJECT);
- void *two = pn_new(0, PN_OBJECT);
- void *three = pn_new(0, PN_OBJECT);
- void *four = pn_new(0, PN_OBJECT);
+ void *one = pn_class_new(PN_OBJECT, 0);
+ void *two = pn_class_new(PN_OBJECT, 0);
+ void *three = pn_class_new(PN_OBJECT, 0);
+ void *four = pn_class_new(PN_OBJECT, 0);
- pn_list_t *list = pn_list(0, PN_REFCOUNT);
+ pn_list_t *list = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
assert(!pn_list_add(list, one));
assert(!pn_list_add(list, two));
assert(!pn_list_add(list, three));
@@ -336,7 +334,7 @@ static void check_list_index(pn_list_t *
static void test_list_index(void)
{
- pn_list_t *l = pn_list(0, 0);
+ pn_list_t *l = pn_list(PN_OBJECT, 0, 0);
void *one = pn_string("one");
void *two = pn_string("two");
void *three = pn_string("three");
@@ -450,11 +448,11 @@ static void test_build_map_odd(void)
static void test_map(void)
{
- void *one = pn_new(0, PN_OBJECT);
- void *two = pn_new(0, PN_OBJECT);
- void *three = pn_new(0, PN_OBJECT);
+ void *one = pn_class_new(PN_OBJECT, 0);
+ void *two = pn_class_new(PN_OBJECT, 0);
+ void *three = pn_class_new(PN_OBJECT, 0);
- pn_map_t *map = pn_map(4, 0.75, PN_REFCOUNT);
+ pn_map_t *map = pn_map(PN_OBJECT, PN_OBJECT, 4, 0.75, PN_REFCOUNT);
assert(pn_map_size(map) == 0);
pn_string_t *key = pn_string("key");
@@ -513,11 +511,11 @@ static void test_map(void)
static void test_hash(void)
{
- void *one = pn_new(0, PN_OBJECT);
- void *two = pn_new(0, PN_OBJECT);
- void *three = pn_new(0, PN_OBJECT);
+ void *one = pn_class_new(PN_OBJECT, 0);
+ void *two = pn_class_new(PN_OBJECT, 0);
+ void *three = pn_class_new(PN_OBJECT, 0);
- pn_hash_t *hash = pn_hash(4, 0.75, PN_REFCOUNT);
+ pn_hash_t *hash = pn_hash(PN_OBJECT, 4, 0.75, PN_REFCOUNT);
pn_hash_put(hash, 0, NULL);
pn_hash_put(hash, 1, one);
pn_hash_put(hash, 2, two);
@@ -576,12 +574,12 @@ static void test_map_links(void)
const pn_class_t collider_clazz = PN_CLASS(collider);
void *keys[3];
for (int i = 0; i < 3; i++)
- keys[i] = pn_new(0, &collider_clazz);
+ keys[i] = pn_class_new(&collider_clazz, 0);
// test deleting a head, middle link, tail
for (int delete_idx=0; delete_idx < 3; delete_idx++) {
- pn_map_t *map = pn_map(0, 0.75, 0);
+ pn_map_t *map = pn_map(PN_OBJECT, PN_OBJECT, 0, 0.75, 0);
// create a chain of entries that have same head (from identical key hashcode)
for (int i = 0; i < 3; i++) {
pn_map_put(map, keys[i], keys[i]);
@@ -692,17 +690,17 @@ static void test_string_addf(void)
static void test_map_iteration(int n)
{
- pn_list_t *pairs = pn_list(2*n, PN_REFCOUNT);
+ pn_list_t *pairs = pn_list(PN_OBJECT, 2*n, PN_REFCOUNT);
for (int i = 0; i < n; i++) {
- void *key = pn_new(0, PN_OBJECT);
- void *value = pn_new(0, PN_OBJECT);
+ void *key = pn_class_new(PN_OBJECT, 0);
+ void *value = pn_class_new(PN_OBJECT, 0);
pn_list_add(pairs, key);
pn_list_add(pairs, value);
pn_decref(key);
pn_decref(value);
}
- pn_map_t *map = pn_map(0, 0.75, PN_REFCOUNT);
+ pn_map_t *map = pn_map(PN_OBJECT, PN_OBJECT, 0, 0.75, PN_REFCOUNT);
assert(pn_map_head(map) == 0);
@@ -796,14 +794,14 @@ void test_map_inspect(void)
void test_list_compare(void)
{
- pn_list_t *a = pn_list(0, PN_REFCOUNT);
- pn_list_t *b = pn_list(0, PN_REFCOUNT);
+ pn_list_t *a = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
+ pn_list_t *b = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
assert(pn_equals(a, b));
- void *one = pn_new(0, PN_OBJECT);
- void *two = pn_new(0, PN_OBJECT);
- void *three = pn_new(0, PN_OBJECT);
+ void *one = pn_class_new(PN_OBJECT, 0);
+ void *two = pn_class_new(PN_OBJECT, 0);
+ void *three = pn_class_new(PN_OBJECT, 0);
pn_list_add(a, one);
assert(!pn_equals(a, b));
@@ -873,7 +871,6 @@ int main(int argc, char **argv)
for (size_t i = 0; i < 128; i++) {
test_new(i, PN_OBJECT);
- test_new(i, &null_class);
test_new(i, &noop_class);
}
Modified: qpid/proton/trunk/proton-c/src/transport/transport.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/transport/transport.c?rev=1625121&r1=1625120&r2=1625121&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/transport/transport.c (original)
+++ qpid/proton/trunk/proton-c/src/transport/transport.c Mon Sep 15 19:19:34 2014
@@ -41,7 +41,7 @@ static ssize_t transport_consume(pn_tran
void pn_delivery_map_init(pn_delivery_map_t *db, pn_sequence_t next)
{
- db->deliveries = pn_hash(0, 0.75, PN_REFCOUNT);
+ db->deliveries = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
db->next = next;
}
@@ -163,8 +163,8 @@ static void pn_transport_initialize(void
transport->disp_data = pn_data(0);
pn_condition_init(&transport->remote_condition);
- transport->local_channels = pn_hash(0, 0.75, PN_REFCOUNT);
- transport->remote_channels = pn_hash(0, 0.75, PN_REFCOUNT);
+ transport->local_channels = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
+ transport->remote_channels = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
transport->bytes_input = 0;
transport->bytes_output = 0;
@@ -209,8 +209,8 @@ static void pn_transport_finalize(void *
pn_transport_t *pn_transport()
{
static const pn_class_t clazz = PN_CLASS(pn_transport);
- pn_transport_t *transport = (pn_transport_t *) pn_new(sizeof(pn_transport_t),
- &clazz);
+ pn_transport_t *transport =
+ (pn_transport_t *) pn_class_new(&clazz, sizeof(pn_transport_t));
if (!transport) return NULL;
transport->output_buf = (char *) malloc(transport->output_size);
@@ -266,7 +266,7 @@ int pn_transport_bind(pn_transport_t *tr
if (connection->transport) return PN_STATE_ERR;
transport->connection = connection;
connection->transport = transport;
- pn_incref2(connection, transport);
+ pn_incref(connection);
if (transport->open_rcvd) {
PN_SET_REMOTE(connection->endpoint.state, PN_REMOTE_ACTIVE);
pn_collector_put(connection->collector, PN_CONNECTION_REMOTE_OPEN, connection);
@@ -322,7 +322,7 @@ int pn_transport_unbind(pn_transport_t *
pni_transport_unbind_channels(transport->remote_channels);
pn_connection_unbound(conn);
- pn_decref2(conn, transport);
+ pn_decref(conn);
return 0;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org