From 210d349fbd47381fb115b3f29e9f9cacb949f2fc Mon Sep 17 00:00:00 2001 From: zhangyanjiao Date: Mon, 4 Dec 2017 19:23:43 +0800 Subject: [PATCH] when netconn created directly,netconn_delete() will not call netconn_free(), which will lead to memory leak Closes https://github.com/espressif/esp-idf/issues/784 --- components/lwip/api/api_lib.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/components/lwip/api/api_lib.c b/components/lwip/api/api_lib.c index dfe207f96..fd2ca1677 100755 --- a/components/lwip/api/api_lib.c +++ b/components/lwip/api/api_lib.c @@ -136,6 +136,15 @@ netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, netconn_cal return conn; } +static inline bool is_created_by_socket(struct netconn *conn) +{ +#if LWIP_SOCKET + if (conn && (conn->socket != -1)) { + return true; + } +#endif + return false; +} /** * Close a netconn 'connection' and free its resources. * UDP and RAW connection are completely closed, TCP pcbs might still be in a waitstate @@ -174,7 +183,12 @@ netconn_delete(struct netconn *conn) return err; } -#if !ESP_THREAD_SAFE +#if ESP_THREAD_SAFE + if (is_created_by_socket(conn) == false) { + LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("netconn_delete - free conn\n")); + netconn_free(conn); + } +#else LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("netconn_delete - free conn\n")); netconn_free(conn); #endif