]> granicus.if.org Git - esp-idf/commitdiff
lwip: update according to review comments
authorLiu Zhi Fu <liuzhifu@espressif.com>
Mon, 21 Nov 2016 07:02:36 +0000 (15:02 +0800)
committerLiu Zhi Fu <liuzhifu@espressif.com>
Mon, 21 Nov 2016 07:02:36 +0000 (15:02 +0800)
1. Define memp_malloc/memp_free as static inline function
2. When TCP pcb is out of memory, try to kill PCB in FIN_WAIT_1 when necessary

components/lwip/core/tcp.c
components/lwip/include/lwip/lwip/memp.h

index fada62283cb7793d01f6f2893ef54b7a510a1cdb..5be686435694bed1a6d118889b16203c3a9bc4dd 100755 (executable)
@@ -1394,6 +1394,7 @@ typedef struct {
     u8_t closing;
     u8_t fin_wait2;
     u8_t last_ack;
+    u8_t fin_wait1;
     u8_t listen;
     u8_t bound;
     u8_t total;
@@ -1422,6 +1423,8 @@ void tcp_pcb_num_cal(tcp_pcb_num_t *tcp_pcb_num)
             tcp_pcb_num->last_ack ++;
         } else if (pcb->state == CLOSING) {
             tcp_pcb_num->closing ++;
+        } else if (pcb->state == FIN_WAIT_1){
+            tcp_pcb_num->fin_wait1 ++;
         }
     }
 
@@ -1463,7 +1466,9 @@ tcp_alloc(u8_t prio)
         } else if (tcp_pcb_num.closing > 0){
             tcp_kill_state(CLOSING);
         } else if (tcp_pcb_num.fin_wait2 > 0){
-            tcp_kill_state(FIN_WAIT_2);//TODO check whether we have issue here?????
+            tcp_kill_state(FIN_WAIT_2);
+        } else if (tcp_pcb_num.fin_wait1 > 0){
+            tcp_kill_state(FIN_WAIT_1);
         } else {
             tcp_kill_prio(prio);
         }
@@ -1471,9 +1476,9 @@ tcp_alloc(u8_t prio)
 
     tcp_pcb_num_cal(&tcp_pcb_num);
     if (tcp_pcb_num.total >= MEMP_NUM_TCP_PCB){
-        LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: no available tcp pcb %d %d %d %d %d %d %d\n",
+        LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: no available tcp pcb %d %d %d %d %d %d %d %d\n",
            tcp_pcb_num.total, tcp_pcb_num.time_wait, tcp_pcb_num.last_ack, tcp_pcb_num.closing,
-           tcp_pcb_num.fin_wait2, tcp_pcb_num.listen, tcp_pcb_num.bound));
+           tcp_pcb_num.fin_wait2, tcp_pcb_num.fin_wait1, tcp_pcb_num.listen, tcp_pcb_num.bound));
         return NULL;
     }
 
index bc9b021e87f37e89f5bec94e8709175ee9509c86..fc45d54ad4fde706fa10bbc9e67a5483380f7597 100755 (executable)
@@ -71,8 +71,25 @@ extern const struct memp_desc* const memp_pools[MEMP_MAX];
 #include "lwip/mem.h"
 
 #define memp_init()
-#define memp_malloc(type)     mem_malloc(memp_pools[type]->size); ESP_CNT_MEM_MALLOC_INC(type)
-#define memp_free(type, mem)  mem_free(mem); ESP_CNT_MEM_FREE_INC(type)
+#if ESP_CNT_DEBUG
+static inline void* memp_malloc(int type)
+{
+    ESP_CNT_MEM_MALLOC_INC(type);
+    return mem_malloc(memp_pools[type]->size);
+}
+
+static inline void memp_free(int type, void *mem)
+{
+    ESP_CNT_MEM_FREE_INC(type);
+    mem_free(mem);
+}
+
+//#define memp_malloc(type)     mem_malloc(memp_pools[type]->size); ESP_CNT_MEM_MALLOC_INC(type)
+//#define memp_free(type, mem)  mem_free(mem); ESP_CNT_MEM_FREE_INC(type)
+#else
+#define memp_malloc(type)     mem_malloc(memp_pools[type]->size)
+#define memp_free(type, mem)  mem_free(mem)
+#endif
 
 #define LWIP_MEMPOOL_DECLARE(name,num,size,desc) \
   const struct memp_desc memp_ ## name = { \