]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9775: Add ks_dhtrt_release_node api call
authorcolm <colm@freeswitch1>
Tue, 13 Dec 2016 00:29:19 +0000 (19:29 -0500)
committerMike Jerris <mike@jerris.com>
Wed, 25 Jan 2017 20:59:35 +0000 (14:59 -0600)
libs/libks/src/dht/ks_dht.h
libs/libks/src/dht/ks_dht_bucket.c

index a27e63dd6e5a2e964853e4ed70184ff98bf15870..538d19ea2f0953d9b5e06bdb909238643dcc6191 100644 (file)
@@ -67,8 +67,9 @@ struct ks_dht_node_s {
     ks_dht_nodeid_t  nodeid;
     ks_sockaddr_t    addr;
     enum ks_afflags_t family;                  /* AF_INET or AF_INET6 */
-    enum ks_dht_nodetype_t type;              /* local or remote */
+    enum ks_dht_nodetype_t type;               /* local or remote */
     ks_dhtrt_routetable_t* table;
+    ks_rwl_t        *reflock;          
 };
 
 struct ks_dhtrt_routetable_s {
@@ -433,6 +434,7 @@ KS_DECLARE(ks_status_t)        ks_dhtrt_expire_node(ks_dhtrt_routetable_t* table
 
 KS_DECLARE(uint8_t)            ks_dhtrt_findclosest_nodes(ks_dhtrt_routetable_t* table, ks_dhtrt_querynodes_t* query);
 KS_DECLARE(ks_dht_node_t*)     ks_dhtrt_find_node(ks_dhtrt_routetable_t* table, ks_dht_nodeid_t id);
+KS_DECLARE(ks_status_t)        ks_dhtrt_release_node(ks_dht_node_t* node);
 
 KS_DECLARE(void)               ks_dhtrt_process_table(ks_dhtrt_routetable_t* table);
 
index 82784392260e84d3b7592f02b74330857a314bbe..3a68bceadc699e8f697a25e64a5999749c2687c5 100644 (file)
@@ -235,11 +235,12 @@ KS_DECLARE(ks_status_t)    ks_dhtrt_create_node( ks_dhtrt_routetable_t *table,
     memcpy(tnode->nodeid.id, nodeid.id, KS_DHT_NODEID_SIZE);
     tnode->type = type;
 
-       if ((ks_addr_set(&tnode->addr, ip, port, tnode->family) != KS_STATUS_SUCCESS) || 
-               (ks_dhtrt_insert_node(table, tnode) != KS_STATUS_SUCCESS))      { 
-               ks_pool_free(table->pool, tnode); 
-               return KS_STATUS_FAIL;
-       }
+    if (( ks_addr_set(&tnode->addr, ip, port, tnode->family) != KS_STATUS_SUCCESS) ||
+        ( ks_dhtrt_insert_node(table, tnode) != KS_STATUS_SUCCESS)                 ||
+        ( ks_rwl_create(&tnode->reflock, table->pool) !=  KS_STATUS_SUCCESS))   {
+        ks_pool_free(table->pool, tnode);
+        return KS_STATUS_FAIL;
+    }
        
        (*node) = tnode;
 
@@ -258,6 +259,7 @@ KS_DECLARE(ks_status_t) ks_dhtrt_delete_node(ks_dhtrt_routetable_t *table, ks_dh
                }
        }
 
+    ks_rwl_destroy(&node->reflock);
        ks_pool_free(table->pool, node);
        return KS_STATUS_SUCCESS;
 }
@@ -561,6 +563,14 @@ KS_DECLARE(uint8_t) ks_dhtrt_findclosest_nodes(ks_dhtrt_routetable_t *table, ks_
        return query->count;
 }
 
+KS_DECLARE(ks_status_t) ks_dhtrt_release_node(ks_dht_node_t* node)
+{
+    return KS_STATUS_SUCCESS; 
+    /* return ks_rwl_read_unlock(node->reflock);*/
+}
+
+
+
 KS_DECLARE(void)  ks_dhtrt_process_table(ks_dhtrt_routetable_t *table)
 {
        /* walk the table and update the status of all known knodes */