]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Reduce how often we have to poll the packet queue.
[meshlink] / src / meshlink.c
index 9f3b6ecd2094a89c92e68c0e9e62537b55a04518..e1cf7979631e0f94b9ebf3f8f820afeb5a66197d 100644 (file)
@@ -1161,7 +1161,6 @@ static void *setup_network_in_netns_thread(void *arg) {
        }
 
        bool success = setup_network(mesh);
-       add_local_addresses(mesh);
        return success ? arg : NULL;
 }
 #endif // HAVE_SETNS
@@ -1534,7 +1533,6 @@ meshlink_handle_t *meshlink_open_ex(const meshlink_open_params_t *params) {
 #endif // HAVE_SETNS
        } else {
                success = setup_network(mesh);
-               add_local_addresses(mesh);
        }
 
        if(!success) {
@@ -2010,6 +2008,8 @@ bool meshlink_send(meshlink_handle_t *mesh, meshlink_node_t *destination, const
                return false;
        }
 
+       logger(mesh, MESHLINK_DEBUG, "Adding packet of %zu bytes to packet queue", len);
+
        // Notify event loop
        signal_trigger(&mesh->loop, &mesh->datafromapp);
 
@@ -2019,17 +2019,16 @@ bool meshlink_send(meshlink_handle_t *mesh, meshlink_node_t *destination, const
 void meshlink_send_from_queue(event_loop_t *loop, void *data) {
        (void)loop;
        meshlink_handle_t *mesh = data;
-       vpn_packet_t *packet = meshlink_queue_pop(&mesh->outpacketqueue);
 
-       if(!packet) {
-               return;
-       }
+       logger(mesh, MESHLINK_DEBUG, "Flushing the packet queue");
 
-       mesh->self->in_packets++;
-       mesh->self->in_bytes += packet->len;
-       route(mesh, mesh->self, packet);
-
-       free(packet);
+       for(vpn_packet_t *packet; (packet = meshlink_queue_pop(&mesh->outpacketqueue));) {
+               logger(mesh, MESHLINK_DEBUG, "Removing packet of %d bytes from packet queue", packet->len);
+               mesh->self->in_packets++;
+               mesh->self->in_bytes += packet->len;
+               route(mesh, mesh->self, packet);
+               free(packet);
+       }
 }
 
 ssize_t meshlink_get_pmtu(meshlink_handle_t *mesh, meshlink_node_t *destination) {