ESP32 web服务导致的lwip “pbuf_free: p->ref > 0问题
ESP32启动了一个web服务,并且使用websocket进行数据通信。
在建立ws通信后,客户端可以向ws服务端发送指令,要求重启wifi服务。
结果导致报错
lwip "pbuf_free: p->ref > 0
assert failed: pbuf_free IDF/components/lwip/lwip/src/core/pbuf.c:757 (pbuf_free: p->ref > 0)
经过多次尝试排查,后来找到了问题。是因为
ESP32->Websocket->onEvent->接受指令处理->重置服务
问题发生在onEvent中,因为在接收到客户端数据后会执行指令,然后重置服务。
重置完毕后,程序会以此:重置服务 return->接受指令处理 return -> onEvent return
由于已经重置了服务,结果导致一路return到顶层后,发现为空了。
因此,使用了一个全局变量,在onEvent接收到数据后修改他为标志。
再用单独的线程实时判断是否需要重置,在onEvent同级函数中操作。
问题搞定。