diff --git a/.travis.yml b/.travis.yml
index 1f3d0e43..894f2fd0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,7 +16,6 @@ script:
- cd bin/
- file_name_integer="nodemcu_integer_${TRAVIS_TAG}.bin"
- srec_cat -output ${file_name_integer} -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000
-- ls
deploy:
provider: releases
api_key:
diff --git a/README.md b/README.md
index 918fe021..d388b0a8 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,12 @@ Tencent QQ group: 309957875
- cross compiler (done)
# Change log
+2015-03-11
+fix bugs of spiffs.
+build both float and integer version [latest releases](https://github.com/nodemcu/nodemcu-firmware/releases/latest).
+fix tmr.time().
+fix memory leak when DNS fail.
+
2015-03-10
update to the recent spiffs.
add file.fsinfo() api, usage: remain, used, total = file.fsinfo().
diff --git a/app/include/user_version.h b/app/include/user_version.h
index 4a7f5f6d..ed2b0d6d 100644
--- a/app/include/user_version.h
+++ b/app/include/user_version.h
@@ -7,6 +7,6 @@
#define NODE_VERSION_INTERNAL 0U
#define NODE_VERSION "NodeMCU 0.9.5"
-#define BUILD_DATE "build 20150310"
+#define BUILD_DATE "build 20150311"
#endif /* __USER_VERSION_H__ */
diff --git a/app/modules/net.c b/app/modules/net.c
index 5b9dba9d..7fd785ab 100644
--- a/app/modules/net.c
+++ b/app/modules/net.c
@@ -200,10 +200,15 @@ static void net_dns_found(const char *name, ip_addr_t *ipaddr, void *arg)
return;
}
+ if(nud->self_ref == LUA_NOREF){
+ NODE_DBG("self_ref null.\n");
+ return;
+ }
+
if(ipaddr == NULL)
{
NODE_ERR( "DNS Fail!\n" );
- return;
+ goto end;
}
// ipaddr->addr is a uint32_t ip
@@ -214,16 +219,12 @@ static void net_dns_found(const char *name, ip_addr_t *ipaddr, void *arg)
c_sprintf(ip_str, IPSTR, IP2STR(&(ipaddr->addr)));
}
- if(nud->self_ref == LUA_NOREF){
- NODE_DBG("self_ref null.\n");
- return;
- }
-
lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->cb_dns_found_ref); // the callback function
lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(conn) to callback func in lua
lua_pushstring(gL, ip_str); // the ip para
lua_call(gL, 2, 0);
+end:
if((pesp_conn->type == ESPCONN_TCP && pesp_conn->proto.tcp->remote_port == 0)
|| (pesp_conn->type == ESPCONN_UDP && pesp_conn->proto.udp->remote_port == 0) ){
lua_gc(gL, LUA_GCSTOP, 0);
@@ -597,12 +598,22 @@ static void socket_dns_found(const char *name, ip_addr_t *ipaddr, void *arg)
NODE_DBG("pesp_conn null.\n");
return;
}
-
+ lnet_userdata *nud = (lnet_userdata *)pesp_conn->reverse;
+ if(nud == NULL)
+ return;
+ if(gL == NULL)
+ return;
if(ipaddr == NULL)
{
dns_reconn_count++;
if( dns_reconn_count >= 5 ){
NODE_ERR( "DNS Fail!\n" );
+ lua_gc(gL, LUA_GCSTOP, 0);
+ if(nud->self_ref != LUA_NOREF){
+ luaL_unref(gL, LUA_REGISTRYINDEX, nud->self_ref);
+ nud->self_ref = LUA_NOREF; // unref this, and the net.socket userdata will delete it self
+ }
+ lua_gc(gL, LUA_GCRESTART, 0);
return;
}
NODE_ERR( "DNS retry %d!\n", dns_reconn_count );
diff --git a/examples/fragment.lua b/examples/fragment.lua
index 9c531281..c1cc4fb7 100644
--- a/examples/fragment.lua
+++ b/examples/fragment.lua
@@ -370,3 +370,11 @@ for n,s in pairs(file.list()) do print(n.." size: "..s) end
file.remove("test1.txt")
for n,s in pairs(file.list()) do print(n.." size: "..s) end
file.open("test2.txt", "a+") for i = 1, 1*1000 do file.write("x") end file.close() print("Done.")
+
+
+function TestDNSLeak()
+ c=net.createConnection(net.TCP, 0)
+ c:connect(80, "bad-name.tlddfdf")
+ tmr.alarm(1, 3000, 0, function() print("hack socket close, MEM: "..node.heap()) c:close() end) -- socket timeout hack
+ print("MEM: "..node.heap())
+end