while (g_list_length(tree->search)) { /* Get the first vertice from the search queue * and remove it from the queue */ vertice *current = tree->search->data; tree->search = g_list_remove(tree->search, current); /* Check if we have reached a target format */ if (target_fn(fndata, current->format)) { /* Done. return the result */ result = current; break; } /* If we dont have reached a target, we look at our neighbours */ while ((neighbour = _get_next_vertice_neighbour(env, tree, current, error))) { /* We found a neighbour and insert it sorted in our search queue */ tree->search = g_list_insert_sorted(tree->search, neighbour, _compare_vertice_distance); } if (osync_error_is_set(error)) goto error_free_tree; /* Done, drop the reference to the vertice */ _free_vertice(current); }