From 59f9b2491899ddfae481c496bb0d947a9c1d72f2 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Mon, 29 May 2023 21:40:42 +0300 Subject: speed up packet allocation by switching to malloc + Also allow reusing packets, though only with external buffers. --- src/packet.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/packet.c') diff --git a/src/packet.c b/src/packet.c index c5ece05..c778965 100644 --- a/src/packet.c +++ b/src/packet.c @@ -1,5 +1,6 @@ #include #include +#include struct packet { enum packet_state state; @@ -13,7 +14,7 @@ struct packet { struct packet *create_packet(enum packet_type type, uintptr_t addr, size_t size) { - struct packet *pkt = calloc(1, sizeof(struct packet) + size); + struct packet *pkt = malloc(sizeof(struct packet) + size); if (!pkt) return NULL; @@ -28,7 +29,7 @@ struct packet *create_packet(enum packet_type type, uintptr_t addr, size_t size) struct packet *create_packet_with(enum packet_type type, uintptr_t addr, size_t size, void *data) { - struct packet *pkt = calloc(1, sizeof(struct packet)); + struct packet *pkt = malloc(sizeof(struct packet)); if (!pkt) return NULL; @@ -40,6 +41,18 @@ struct packet *create_packet_with(enum packet_type type, uintptr_t addr, return pkt; } +struct packet *reuse_packet(struct packet *pkt, enum packet_type type, + uintptr_t addr, size_t size, void *data) +{ + assert(pkt->state == PACKET_DONE); + pkt->state = PACKET_INIT; + pkt->type = type; + pkt->addr = addr; + pkt->size = size; + pkt->data = data; + return pkt; +} + enum packet_type packet_type(struct packet *pkt) { return pkt->type; -- cgit v1.3