X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fmeshlink.c;h=fc8408ad1309843d9641df75a47323f0411b192d;hb=391a8674fcd886165dc02154d3ef0d3377f2c840;hp=72e27b0fe99cf3e956d3d125f093bc020e6c558d;hpb=af8787d1b921fd2e286514ebe83ee1c7b449f298;p=meshlink diff --git a/src/meshlink.c b/src/meshlink.c index 72e27b0f..fc8408ad 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -735,6 +735,7 @@ meshlink_handle_t *meshlink_open(const char *confbase, const char *name) { mesh->confbase = xstrdup(confbase); mesh->name = xstrdup(name); pthread_mutex_init ( &(mesh->outpacketqueue_mutex), NULL); + pthread_mutex_init ( &(mesh->nodes_mutex), NULL); event_loop_init(&mesh->loop); mesh->loop.data = mesh; @@ -898,12 +899,17 @@ meshlink_node_t *meshlink_get_node(meshlink_handle_t *mesh, const char *name) { size_t meshlink_get_all_nodes(meshlink_handle_t *mesh, meshlink_node_t **nodes, size_t nmemb) { size_t i = 0; + //lock mesh->nodes + pthread_mutex_lock(&(mesh->nodes_mutex)); + for splay_each(node_t, n, mesh->nodes) { if(i < nmemb) nodes[i] = (meshlink_node_t *)n; i++; } + pthread_mutex_unlock(&(mesh->nodes_mutex)); + return i; }