summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthomasonegd <[email protected]>2018-12-24 08:31:54 +0800
committerthomasonegd <[email protected]>2018-12-24 08:31:54 +0800
commit71c3c35c3c4fa7f27da491188f92df0d5cc9bd5f (patch)
treed18594c41fc6ccff851d54e286308b8907a9ff36
parent6db31e30c7ea5ebc33efe294736ae2da6e7e6daa (diff)
fix socket nullptr bug
-rw-r--r--components/net/at/at_socket/at_socket.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/components/net/at/at_socket/at_socket.c b/components/net/at/at_socket/at_socket.c
index 3925f0f57c..cccb35ae1a 100644
--- a/components/net/at/at_socket/at_socket.c
+++ b/components/net/at/at_socket/at_socket.c
@@ -572,10 +572,16 @@ __exit:
if (result < 0)
{
- at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
+ if (sock != RT_NULL)
+ {
+ at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
+ }
}
- at_do_event_changes(sock, AT_EVENT_SEND, RT_TRUE);
+ if (sock)
+ {
+ at_do_event_changes(sock, AT_EVENT_SEND, RT_TRUE);
+ }
return result;
}
@@ -699,24 +705,27 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
__exit:
- if (recv_len > 0)
+ if (sock != RT_NULL)
{
- result = recv_len;
- at_do_event_changes(sock, AT_EVENT_RECV, RT_FALSE);
- errno = 0;
- if (!rt_slist_isempty(&sock->recvpkt_list))
+ if (recv_len > 0)
{
- at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE);
+ result = recv_len;
+ at_do_event_changes(sock, AT_EVENT_RECV, RT_FALSE);
+ errno = 0;
+ if (!rt_slist_isempty(&sock->recvpkt_list))
+ {
+ at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE);
+ }
+ else
+ {
+ at_do_event_clean(sock, AT_EVENT_RECV);
+ }
}
else
{
- at_do_event_clean(sock, AT_EVENT_RECV);
+ at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
}
}
- else
- {
- at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
- }
return result;
}
@@ -807,7 +816,10 @@ __exit:
if (result < 0)
{
- at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
+ if (sock != RT_NULL)
+ {
+ at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
+ }
}
else
{