abort();
node_t *n = channel->node;
meshlink_handle_t *mesh = n->mesh;
- if(channel->receive_cb)
+ if(n->status.destroyed)
+ meshlink_channel_close(mesh, channel);
+ else if(channel->receive_cb)
channel->receive_cb(mesh, channel, data, len);
return len;
}
}
void free_node(node_t *n) {
+ n->status.destroyed = true;
+
if(n->edge_tree)
free_edge_tree(n->edge_tree);
unsigned int unused_sptps: 1; /* 1 if this node supports SPTPS */
unsigned int udp_confirmed: 1; /* 1 if the address is one that we received UDP traffic on */
unsigned int broadcast: 1; /* 1 if the next UDP packet should be broadcast to the local network */
- unsigned int blacklisted: 1; /* 1 if the node is blacklist so we never want to speak with him anymore*/
+ unsigned int blacklisted: 1; /* 1 if the node is blacklist so we never want to speak with him anymore */
+ unsigned int destroyed: 1; /* 1 if the node is being destroyed, deallocate channels when any callback is triggered */
unsigned int unused: 22;
} node_status_t;
-Subproject commit 0f36bb393e49ecab387b1bfe88741a337d4a8834
+Subproject commit 1d8aa0d5a55bb871ce56bca355ade80b08a7c1e5