RTT版本1.2.3。
LWIP版本1.4.1。
stm32f103zet + dm9000.
目前由我遇到的情况看应该不是线程安全的。
我的应用情况是
在线程A中建立tcp server,select等待客户端的连接和数据。收到数据后发送到handler线程处理。hander线程会对客服端进行回复。
有时会出现问题是:
handler线程收到数据后还没处理完,客户端就主动关闭了连接。之后进入线程A调用lwip_close(),线程A优先级高。handler线程处理完数据后又去给socket回应。就出现断言错误了。
这里
int
lwip_send(int s, const void *data, size_t size, int flags)
{
struct lwip_sock *sock;
err_t err;
u8_t write_flags;
size_t written;
LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_send(%d, data=%p, size=%"SZT_F", flags=0x%x)
",
s, data, size, flags));
sock = get_socket(s);
if (!sock) {
return -1;
}
我觉得是调用发送send后运行完上面的代码后调到了线程A关闭了socket。之后回到handler线程就出错了。
还请大神给个明确的答复。
查看更多