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:52 UTC

svn commit: r1625124 - in /qpid/proton/trunk/proton-c: include/proton/ src/engine/ src/messenger/ src/object/ src/posix/ src/tests/ src/transport/

Author: rhs
Date: Mon Sep 15 19:19:52 2014
New Revision: 1625124

URL: http://svn.apache.org/r1625124
Log:
added PN_WEAKREF class and removed options

Modified:
    qpid/proton/trunk/proton-c/include/proton/cproton.i
    qpid/proton/trunk/proton-c/include/proton/object.h
    qpid/proton/trunk/proton-c/src/engine/engine.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/transform.c
    qpid/proton/trunk/proton-c/src/object/list.c
    qpid/proton/trunk/proton-c/src/object/map.c
    qpid/proton/trunk/proton-c/src/object/object.c
    qpid/proton/trunk/proton-c/src/posix/selector.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/cproton.i
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/cproton.i?rev=1625124&r1=1625123&r2=1625124&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/cproton.i (original)
+++ qpid/proton/trunk/proton-c/include/proton/cproton.i Mon Sep 15 19:19:52 2014
@@ -55,6 +55,7 @@ typedef long long int int64_t;
 %ignore pn_string_vaddf;
 %immutable PN_OBJECT;
 %immutable PN_VOID;
+%immutable PN_WEAKREF;
 %include "proton/object.h"
 
 %ignore pn_error_format;

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=1625124&r1=1625123&r2=1625124&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:52 2014
@@ -43,9 +43,6 @@ 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);
@@ -63,6 +60,7 @@ struct pn_class_t {
 
 extern const pn_class_t *PN_OBJECT;
 extern const pn_class_t *PN_VOID;
+extern const pn_class_t *PN_WEAKREF;
 
 #define PN_CLASS(PREFIX) {                      \
     #PREFIX,                                    \
@@ -124,7 +122,7 @@ PN_EXTERN int pn_inspect(void *object, p
 
 #define PN_REFCOUNT (0x1)
 
-PN_EXTERN pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity, int options);
+PN_EXTERN pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity);
 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);
@@ -139,7 +137,7 @@ PN_EXTERN void pn_list_iterator(pn_list_
 #define PN_REFCOUNT_VALUE (0x4)
 
 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);
+                           size_t capacity, float load_factor);
 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);
@@ -149,7 +147,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(const pn_class_t *clazz, 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);
 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/engine/engine.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine.c?rev=1625124&r1=1625123&r2=1625124&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:52 2014
@@ -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(PN_OBJECT, 0, 0);
+  conn->sessions = pn_list(PN_WEAKREF, 0);
   conn->transport = NULL;
   conn->work_head = NULL;
   conn->work_tail = NULL;
@@ -723,7 +723,7 @@ pn_session_t *pn_session(pn_connection_t
 
   pn_endpoint_init(&ssn->endpoint, SESSION, conn);
   pn_add_session(conn, ssn);
-  ssn->links = pn_list(PN_OBJECT, 0, 0);
+  ssn->links = pn_list(PN_WEAKREF, 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(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
-  ssn->state.remote_handles = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
+  ssn->state.local_handles = pn_hash(PN_OBJECT, 0, 0.75);
+  ssn->state.remote_handles = pn_hash(PN_OBJECT, 0, 0.75);
   // end transport state
 
   pn_collector_put(conn->collector, PN_SESSION_INIT, ssn);

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=1625124&r1=1625123&r2=1625124&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:52 2014
@@ -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(PN_OBJECT, 0, 0);
+    m->pending = pn_list(PN_WEAKREF, 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(PN_OBJECT, 0, 0);
-    m->connections = pn_list(PN_OBJECT, 0, 0);
+    m->listeners = pn_list(PN_WEAKREF, 0);
+    m->connections = pn_list(PN_WEAKREF, 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(PN_OBJECT, 0, 0);
-    m->blocked = pn_list(PN_OBJECT, 0, 0);
+    m->credited = pn_list(PN_WEAKREF, 0);
+    m->blocked = pn_list(PN_WEAKREF, 0);
     m->next_drain = 0;
     m->next_tag = 0;
     m->outgoing = pni_store();
     m->incoming = pni_store();
-    m->subscriptions = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
+    m->subscriptions = pn_list(PN_OBJECT, 0);
     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=1625124&r1=1625123&r2=1625124&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:52 2014
@@ -89,7 +89,7 @@ pni_store_t *pni_store()
   store->window = 0;
   store->lwm = 0;
   store->hwm = 0;
-  store->tracked = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
+  store->tracked = pn_hash(PN_OBJECT, 0, 0.75);
 
   return store;
 }

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=1625124&r1=1625123&r2=1625124&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:52 2014
@@ -84,7 +84,7 @@ pn_transform_t *pn_transform()
 {
   static const pn_class_t clazz = PN_CLASS(pn_transform);
   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->rules = pn_list(PN_OBJECT, 0);
   transform->matched = false;
   return transform;
 }

Modified: qpid/proton/trunk/proton-c/src/object/list.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/object/list.c?rev=1625124&r1=1625123&r2=1625124&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/object/list.c (original)
+++ qpid/proton/trunk/proton-c/src/object/list.c Mon Sep 15 19:19:52 2014
@@ -28,7 +28,6 @@ struct pn_list_t {
   size_t capacity;
   size_t size;
   void **elements;
-  int options;
 };
 
 size_t pn_list_size(pn_list_t *list)
@@ -47,9 +46,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_class_decref(list->clazz, old);
+  pn_class_decref(list->clazz, old);
   list->elements[index % list->size] = value;
-  if (list->options & PN_REFCOUNT) pn_class_incref(list->clazz, value);
+  pn_class_incref(list->clazz, value);
 }
 
 void pn_list_ensure(pn_list_t *list, size_t capacity)
@@ -69,7 +68,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_class_incref(list->clazz, value);
+  pn_class_incref(list->clazz, value);
   return 0;
 }
 
@@ -102,10 +101,8 @@ void pn_list_del(pn_list_t *list, int in
   assert(list);
   index %= list->size;
 
-  if (list->options & PN_REFCOUNT) {
-    for (int i = 0; i < n; i++) {
-      pn_class_decref(list->clazz, list->elements[index + i]);
-    }
+  for (int i = 0; i < n; i++) {
+    pn_class_decref(list->clazz, list->elements[index + i]);
   }
 
   size_t slide = list->size - (index + n);
@@ -156,7 +153,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_class_decref(list->clazz, pn_list_get(list, i));
+    pn_class_decref(list->clazz, pn_list_get(list, i));
   }
   free(list->elements);
 }
@@ -214,7 +211,7 @@ static int pn_list_inspect(void *obj, pn
 
 #define pn_list_initialize NULL
 
-pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity, int options)
+pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity)
 {
   static const pn_class_t list_clazz = PN_CLASS(pn_list);
 
@@ -223,7 +220,6 @@ pn_list_t *pn_list(const pn_class_t *cla
   list->capacity = capacity ? capacity : 16;
   list->elements = (void **) malloc(list->capacity * sizeof(void *));
   list->size = 0;
-  list->options = options;
   return list;
 }
 

Modified: qpid/proton/trunk/proton-c/src/object/map.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/object/map.c?rev=1625124&r1=1625123&r2=1625124&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/object/map.c (original)
+++ qpid/proton/trunk/proton-c/src/object/map.c Mon Sep 15 19:19:52 2014
@@ -44,20 +44,16 @@ struct pn_map_t {
   uintptr_t (*hashcode)(void *key);
   bool (*equals)(void *a, void *b);
   float load_factor;
-  bool count_keys;
-  bool count_values;
 };
 
 static void pn_map_finalize(void *object)
 {
   pn_map_t *map = (pn_map_t *) 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_class_decref(map->key, map->entries[i].key);
-        if (map->count_values) pn_class_decref(map->value, map->entries[i].value);
-      }
+  for (size_t i = 0; i < map->capacity; i++) {
+    if (map->entries[i].state != PNI_ENTRY_FREE) {
+      pn_class_decref(map->key, map->entries[i].key);
+      pn_class_decref(map->value, map->entries[i].value);
     }
   }
 
@@ -123,7 +119,7 @@ static int pn_map_inspect(void *obj, pn_
 #define pn_map_compare NULL
 
 pn_map_t *pn_map(const pn_class_t *key, const pn_class_t *value,
-                 size_t capacity, float load_factor, int options)
+                 size_t capacity, float load_factor)
 {
   static const pn_class_t clazz = PN_CLASS(pn_map);
 
@@ -136,8 +132,6 @@ pn_map_t *pn_map(const pn_class_t *key, 
   map->load_factor = load_factor;
   map->hashcode = pn_hashcode;
   map->equals = pn_equals;
-  map->count_keys = (options & PN_REFCOUNT) || (options & PN_REFCOUNT_KEY);
-  map->count_values = (options & PN_REFCOUNT) || (options & PN_REFCOUNT_VALUE);
   pni_map_allocate(map);
   return map;
 }
@@ -175,8 +169,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_class_decref(map->key, key);
-      if (map->count_values) pn_class_decref(map->value, value);
+      pn_class_decref(map->key, key);
+      pn_class_decref(map->value, value);
     }
   }
 
@@ -195,7 +189,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_class_incref(map->key, key);
+      pn_class_incref(map->key, key);
       map->size++;
       return entry;
     } else {
@@ -235,7 +229,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_class_incref(map->key, key);
+    pn_class_incref(map->key, key);
     if (pprev) *pprev = entry;
     map->size++;
     return &map->entries[empty];
@@ -248,9 +242,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_class_decref(map->value, entry->value);
+  pn_class_decref(map->value, entry->value);
   entry->value = value;
-  if (map->count_values) pn_class_incref(map->value, value);
+  pn_class_incref(map->value, value);
   return 0;
 }
 
@@ -267,8 +261,8 @@ void pn_map_del(pn_map_t *map, void *key
   pni_entry_t *prev = NULL;
   pni_entry_t *entry = pni_map_entry(map, key, &prev, false);
   if (entry) {
-    void *dref_key = (map->count_keys) ? entry->key : NULL;
-    void *dref_value = (map->count_values) ? entry->value : NULL;
+    void *dref_key = entry->key;
+    void *dref_value = entry->value;
     if (prev) {
       prev->next = entry->next;
       prev->state = entry->state;
@@ -283,8 +277,8 @@ void pn_map_del(pn_map_t *map, void *key
     entry->key = NULL;
     entry->value = NULL;
     map->size--;
-    if (dref_key) pn_class_decref(map->key, dref_key);
-    if (dref_value) pn_class_decref(map->value, dref_value);
+    pn_class_decref(map->key, dref_key);
+    pn_class_decref(map->value, dref_value);
   }
 }
 
@@ -342,16 +336,13 @@ static bool pni_identity_equals(void *a,
 
 extern const pn_class_t *PN_UINTPTR;
 
-static const pn_class_t *pni_uintptr_reify(void *object) {
-  return 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
+static void pni_uintptr_incref(void *object) {}
+static void pni_uintptr_decref(void *object) {}
+static int pni_uintptr_refcount(void *object) { return -1; }
 #define pni_uintptr_finalize NULL
 #define pni_uintptr_hashcode NULL
 #define pni_uintptr_compare NULL
@@ -360,13 +351,11 @@ static const pn_class_t *pni_uintptr_rei
 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 *pn_hash(const pn_class_t *clazz, size_t capacity, float load_factor)
 {
-  pn_hash_t *hash = (pn_hash_t *) pn_map(PN_UINTPTR, clazz, capacity, load_factor, 0);
+  pn_hash_t *hash = (pn_hash_t *) pn_map(PN_UINTPTR, clazz, capacity, load_factor);
   hash->map.hashcode = pni_identity_hashcode;
   hash->map.equals = pni_identity_equals;
-  hash->map.count_keys = false;
-  hash->map.count_values = options & PN_REFCOUNT;
   return hash;
 }
 

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=1625124&r1=1625123&r2=1625124&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:52 2014
@@ -171,18 +171,12 @@ int pn_class_inspect(const pn_class_t *c
     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>";
-    }
+  if (object && clazz->inspect) {
+    return clazz->inspect(object, dst);
   }
 
+  const char *name = clazz->name ? clazz->name : "<anon>";
+
   return pn_string_addf(dst, "%s<%p>", name, object);
 }
 
@@ -282,3 +276,27 @@ int pn_inspect(void *object, pn_string_t
 {
   return pn_class_inspect(PN_OBJECT, object, dst);
 }
+
+#define pn_weakref_new NULL
+#define pn_weakref_initialize NULL
+#define pn_weakref_finalize NULL
+#define pn_weakref_free NULL
+
+static void pn_weakref_incref(void *object) {}
+static void pn_weakref_decref(void *object) {}
+static int pn_weakref_refcount(void *object) { return -1; }
+static const pn_class_t *pn_weakref_reify(void *object) {
+  return PN_WEAKREF;
+}
+static uintptr_t pn_weakref_hashcode(void *object) {
+  return pn_hashcode(object);
+}
+static intptr_t pn_weakref_compare(void *a, void *b) {
+  return pn_compare(a, b);
+}
+static int pn_weakref_inspect(void *object, pn_string_t *dst) {
+  return pn_inspect(object, dst);
+}
+
+const pn_class_t PNI_WEAKREF = PN_METACLASS(pn_weakref);
+const pn_class_t *PN_WEAKREF = &PNI_WEAKREF;

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=1625124&r1=1625123&r2=1625124&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:52 2014
@@ -45,7 +45,7 @@ void pn_selector_initialize(void *obj)
   selector->fds = NULL;
   selector->deadlines = NULL;
   selector->capacity = 0;
-  selector->selectables = pn_list(PN_OBJECT, 0, 0);
+  selector->selectables = pn_list(PN_WEAKREF, 0);
   selector->deadline = 0;
   selector->current = 0;
   selector->awoken = 0;

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=1625124&r1=1625123&r2=1625124&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:52 2014
@@ -30,12 +30,12 @@
 static char mem;
 static void *END = &mem;
 
-static pn_list_t *build_list(size_t capacity, int options, ...)
+static pn_list_t *build_list(size_t capacity, ...)
 {
-  pn_list_t *result = pn_list(PN_OBJECT, capacity, options);
+  pn_list_t *result = pn_list(PN_OBJECT, capacity);
   va_list ap;
 
-  va_start(ap, options);
+  va_start(ap, capacity);
   while (true) {
     void *arg = va_arg(ap, void *);
     if (arg == END) {
@@ -43,23 +43,21 @@ static pn_list_t *build_list(size_t capa
     }
 
     pn_list_add(result, arg);
-    if (PN_REFCOUNT & options) {
-      pn_class_decref(PN_OBJECT, arg);
-    }
+    pn_class_decref(PN_OBJECT, arg);
   }
   va_end(ap);
 
   return result;
 }
 
-static pn_map_t *build_map(size_t capacity, float load_factor, int options, ...)
+static pn_map_t *build_map(size_t capacity, float load_factor, ...)
 {
-  pn_map_t *result = pn_map(PN_OBJECT, PN_OBJECT, capacity, load_factor, options);
+  pn_map_t *result = pn_map(PN_OBJECT, PN_OBJECT, capacity, load_factor);
   va_list ap;
 
   void *prev = NULL;
 
-  va_start(ap, options);
+  va_start(ap, load_factor);
   int count = 0;
   while (true) {
     void *arg = va_arg(ap, void *);
@@ -70,10 +68,8 @@ static pn_map_t *build_map(size_t capaci
 
     if (count % 2) {
       pn_map_put(result, prev, arg);
-      if (PN_REFCOUNT & options) {
-        pn_class_decref(PN_OBJECT, prev);
-        pn_class_decref(PN_OBJECT, arg);
-      }
+      pn_class_decref(PN_OBJECT, prev);
+      pn_class_decref(PN_OBJECT, arg);
     } else {
       prev = arg;
     }
@@ -257,7 +253,7 @@ static void test_refcounting(int refs)
 
 static void test_list(size_t capacity)
 {
-  pn_list_t *list = pn_list(PN_OBJECT, 0, 0);
+  pn_list_t *list = pn_list(PN_WEAKREF, 0);
   assert(pn_list_size(list) == 0);
   assert(!pn_list_add(list, (void *) 0));
   assert(!pn_list_add(list, (void *) 1));
@@ -282,7 +278,7 @@ static void test_list_refcount(size_t ca
   void *three = pn_class_new(PN_OBJECT, 0);
   void *four = pn_class_new(PN_OBJECT, 0);
 
-  pn_list_t *list = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
+  pn_list_t *list = pn_list(PN_OBJECT, 0);
   assert(!pn_list_add(list, one));
   assert(!pn_list_add(list, two));
   assert(!pn_list_add(list, three));
@@ -334,7 +330,7 @@ static void check_list_index(pn_list_t *
 
 static void test_list_index(void)
 {
-  pn_list_t *l = pn_list(PN_OBJECT, 0, 0);
+  pn_list_t *l = pn_list(PN_WEAKREF, 0);
   void *one = pn_string("one");
   void *two = pn_string("two");
   void *three = pn_string("three");
@@ -377,7 +373,7 @@ static bool pn_strequals(const char *a, 
 
 static void test_build_list(void)
 {
-  pn_list_t *l = build_list(0, PN_REFCOUNT,
+  pn_list_t *l = build_list(0,
                             pn_string("one"),
                             pn_string("two"),
                             pn_string("three"),
@@ -397,7 +393,7 @@ static void test_build_list(void)
 
 static void test_build_map(void)
 {
-  pn_map_t *m = build_map(0, 0.75, PN_REFCOUNT,
+  pn_map_t *m = build_map(0, 0.75,
                           pn_string("key"),
                           pn_string("value"),
                           pn_string("key2"),
@@ -421,7 +417,7 @@ static void test_build_map(void)
 
 static void test_build_map_odd(void)
 {
-  pn_map_t *m = build_map(0, 0.75, PN_REFCOUNT,
+  pn_map_t *m = build_map(0, 0.75,
                           pn_string("key"),
                           pn_string("value"),
                           pn_string("key2"),
@@ -452,7 +448,7 @@ static void test_map(void)
   void *two = pn_class_new(PN_OBJECT, 0);
   void *three = pn_class_new(PN_OBJECT, 0);
 
-  pn_map_t *map = pn_map(PN_OBJECT, PN_OBJECT, 4, 0.75, PN_REFCOUNT);
+  pn_map_t *map = pn_map(PN_OBJECT, PN_OBJECT, 4, 0.75);
   assert(pn_map_size(map) == 0);
 
   pn_string_t *key = pn_string("key");
@@ -515,7 +511,7 @@ static void test_hash(void)
   void *two = pn_class_new(PN_OBJECT, 0);
   void *three = pn_class_new(PN_OBJECT, 0);
 
-  pn_hash_t *hash = pn_hash(PN_OBJECT, 4, 0.75, PN_REFCOUNT);
+  pn_hash_t *hash = pn_hash(PN_OBJECT, 4, 0.75);
   pn_hash_put(hash, 0, NULL);
   pn_hash_put(hash, 1, one);
   pn_hash_put(hash, 2, two);
@@ -579,7 +575,7 @@ static void test_map_links(void)
   // test deleting a head, middle link, tail
 
   for (int delete_idx=0; delete_idx < 3; delete_idx++) {
-    pn_map_t *map = pn_map(PN_OBJECT, PN_OBJECT, 0, 0.75, 0);
+    pn_map_t *map = pn_map(PN_WEAKREF, PN_WEAKREF, 0, 0.75);
     // 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]);
@@ -690,7 +686,7 @@ static void test_string_addf(void)
 
 static void test_map_iteration(int n)
 {
-  pn_list_t *pairs = pn_list(PN_OBJECT, 2*n, PN_REFCOUNT);
+  pn_list_t *pairs = pn_list(PN_OBJECT, 2*n);
   for (int i = 0; i < n; i++) {
     void *key = pn_class_new(PN_OBJECT, 0);
     void *value = pn_class_new(PN_OBJECT, 0);
@@ -700,7 +696,7 @@ static void test_map_iteration(int n)
     pn_decref(value);
   }
 
-  pn_map_t *map = pn_map(PN_OBJECT, PN_OBJECT, 0, 0.75, PN_REFCOUNT);
+  pn_map_t *map = pn_map(PN_OBJECT, PN_OBJECT, 0, 0.75);
 
   assert(pn_map_head(map) == 0);
 
@@ -737,22 +733,22 @@ void test_inspect(void *o, const char *e
 
 void test_list_inspect(void)
 {
-  pn_list_t *l = build_list(0, PN_REFCOUNT, END);
+  pn_list_t *l = build_list(0, END);
   test_inspect(l, "[]");
   pn_free(l);
 
-  l = build_list(0, PN_REFCOUNT, pn_string("one"), END);
+  l = build_list(0, pn_string("one"), END);
   test_inspect(l, "[\"one\"]");
   pn_free(l);
 
-  l = build_list(0, PN_REFCOUNT,
+  l = build_list(0,
                  pn_string("one"),
                  pn_string("two"),
                  END);
   test_inspect(l, "[\"one\", \"two\"]");
   pn_free(l);
 
-  l = build_list(0, PN_REFCOUNT,
+  l = build_list(0,
                  pn_string("one"),
                  pn_string("two"),
                  pn_string("three"),
@@ -766,24 +762,24 @@ void test_map_inspect(void)
   // note that when there is more than one entry in a map, the order
   // of the entries is dependent on the hashes involved, it will be
   // deterministic though
-  pn_map_t *m = build_map(0, 0.75, PN_REFCOUNT, END);
+  pn_map_t *m = build_map(0, 0.75, END);
   test_inspect(m, "{}");
   pn_free(m);
 
-  m = build_map(0, 0.75, PN_REFCOUNT,
+  m = build_map(0, 0.75,
                 pn_string("key"), pn_string("value"),
                 END);
   test_inspect(m, "{\"key\": \"value\"}");
   pn_free(m);
 
-  m = build_map(0, 0.75, PN_REFCOUNT,
+  m = build_map(0, 0.75,
                 pn_string("k1"), pn_string("v1"),
                 pn_string("k2"), pn_string("v2"),
                 END);
   test_inspect(m, "{\"k1\": \"v1\", \"k2\": \"v2\"}");
   pn_free(m);
 
-  m = build_map(0, 0.75, PN_REFCOUNT,
+  m = build_map(0, 0.75,
                 pn_string("k1"), pn_string("v1"),
                 pn_string("k2"), pn_string("v2"),
                 pn_string("k3"), pn_string("v3"),
@@ -794,8 +790,8 @@ void test_map_inspect(void)
 
 void test_list_compare(void)
 {
-  pn_list_t *a = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
-  pn_list_t *b = pn_list(PN_OBJECT, 0, PN_REFCOUNT);
+  pn_list_t *a = pn_list(PN_OBJECT, 0);
+  pn_list_t *b = pn_list(PN_OBJECT, 0);
 
   assert(pn_equals(a, b));
 
@@ -838,7 +834,7 @@ static void *pn_it_next(void *state) {
 
 void test_iterator(void)
 {
-  pn_list_t *list = build_list(0, PN_REFCOUNT,
+  pn_list_t *list = build_list(0,
                                pn_string("one"),
                                pn_string("two"),
                                pn_string("three"),

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=1625124&r1=1625123&r2=1625124&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:52 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(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
+  db->deliveries = pn_hash(PN_OBJECT, 0, 0.75);
   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(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
-  transport->remote_channels = pn_hash(PN_OBJECT, 0, 0.75, PN_REFCOUNT);
+  transport->local_channels = pn_hash(PN_OBJECT, 0, 0.75);
+  transport->remote_channels = pn_hash(PN_OBJECT, 0, 0.75);
 
   transport->bytes_input = 0;
   transport->bytes_output = 0;



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