From 8bd9e0f0c2a8fe70dcf5baf9d18be23ddcab19e0 Mon Sep 17 00:00:00 2001 From: Martine Lenders <m.lenders@fu-berlin.de> Date: Tue, 15 Jan 2019 15:05:11 +0100 Subject: [PATCH] shell: sc_icmpv6_echo: release payload when pktbuf full Otherwise it gets never released Co-Authored-By: Gunar Schorcht <gunar@schorcht.net> --- sys/shell/commands/sc_icmpv6_echo.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/sys/shell/commands/sc_icmpv6_echo.c b/sys/shell/commands/sc_icmpv6_echo.c index a473de6d32..bc5a9220c6 100644 --- a/sys/shell/commands/sc_icmpv6_echo.c +++ b/sys/shell/commands/sc_icmpv6_echo.c @@ -232,32 +232,36 @@ int _icmpv6_ping(int argc, char **argv) ping_start = xtimer_now_usec64(); while ((remaining--) > 0) { - gnrc_pktsnip_t *pkt; + gnrc_pktsnip_t *pkt, *payload; uint32_t start, timeout = 1 * US_PER_SEC; - pkt = gnrc_icmpv6_echo_build(ICMPV6_ECHO_REQ, id, ++max_seq_expected, - NULL, payload_len); + payload = gnrc_icmpv6_echo_build(ICMPV6_ECHO_REQ, id, + ++max_seq_expected, + NULL, payload_len); - if (pkt == NULL) { + if (payload == NULL) { puts("error: packet buffer full"); continue; } - _set_payload(pkt->data, payload_len); + _set_payload(payload->data, payload_len); - pkt = gnrc_ipv6_hdr_build(pkt, NULL, &addr); + pkt = gnrc_ipv6_hdr_build(payload, NULL, &addr); if (pkt == NULL) { puts("error: packet buffer full"); + gnrc_pktbuf_release(payload); continue; } if (src_iface != KERNEL_PID_UNDEF) { - pkt = gnrc_pktbuf_add(pkt, NULL, sizeof(gnrc_netif_hdr_t), + payload = pkt; + pkt = gnrc_pktbuf_add(payload, NULL, sizeof(gnrc_netif_hdr_t), GNRC_NETTYPE_NETIF); if (pkt == NULL) { puts("error: packet buffer full"); + gnrc_pktbuf_release(payload); continue; } -- GitLab