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
This commit is contained in:
zhangyanjiao 2017-12-04 19:23:43 +08:00
parent 579201bcdc
commit 210d349fbd

View file

@ -136,6 +136,15 @@ netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, netconn_cal
return conn; 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. * Close a netconn 'connection' and free its resources.
* UDP and RAW connection are completely closed, TCP pcbs might still be in a waitstate * 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; 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")); LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("netconn_delete - free conn\n"));
netconn_free(conn); netconn_free(conn);
#endif #endif