]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Reduce how often we have to poll the packet queue.
[meshlink] / src / meshlink.c
index 8513c8f99613ed6785789be189aafaa96759feb0..e1cf7979631e0f94b9ebf3f8f820afeb5a66197d 100644 (file)
@@ -2008,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);
 
@@ -2017,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;
-       }
 
-       mesh->self->in_packets++;
-       mesh->self->in_bytes += packet->len;
-       route(mesh, mesh->self, packet);
+       logger(mesh, MESHLINK_DEBUG, "Flushing the packet queue");
 
-       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) {