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