File tree 3 files changed +70
-16
lines changed
libraries/ESP8266WiFi/src
tests/device/test_WiFiClient
3 files changed +70
-16
lines changed Original file line number Diff line number Diff line change @@ -272,8 +272,7 @@ void WiFiClient::stop()
272
272
if (!_client)
273
273
return ;
274
274
275
- _client->unref ();
276
- _client = 0 ;
275
+ _client->close ();
277
276
}
278
277
279
278
uint8_t WiFiClient::connected ()
Original file line number Diff line number Diff line change @@ -107,17 +107,15 @@ class ClientContext
107
107
108
108
void unref ()
109
109
{
110
- if (this != 0 ) {
111
- DEBUGV (" :ur %d\r\n " , _refcnt);
112
- if (--_refcnt == 0 ) {
113
- discard_received ();
114
- close ();
115
- if (_discard_cb) {
116
- _discard_cb (_discard_cb_arg, this );
117
- }
118
- DEBUGV (" :del\r\n " );
119
- delete this ;
110
+ DEBUGV (" :ur %d\r\n " , _refcnt);
111
+ if (--_refcnt == 0 ) {
112
+ discard_received ();
113
+ close ();
114
+ if (_discard_cb) {
115
+ _discard_cb (_discard_cb_arg, this );
120
116
}
117
+ DEBUGV (" :del\r\n " );
118
+ delete this ;
121
119
}
122
120
}
123
121
@@ -131,13 +129,13 @@ class ClientContext
131
129
_op_start_time = millis ();
132
130
// This delay will be interrupted by esp_schedule in the connect callback
133
131
delay (_timeout_ms);
134
- // WiFi may have vanished during the delay (#4078)
135
- if (!this || ! _pcb) {
136
- DEBUGV (" :vnsh \r\n " );
132
+ _connect_pending = 0 ;
133
+ if (!_pcb) {
134
+ DEBUGV (" :cabrt \r\n " );
137
135
return 0 ;
138
136
}
139
- _connect_pending = 0 ;
140
137
if (state () != ESTABLISHED) {
138
+ DEBUGV (" :ctmo\r\n " );
141
139
abort ();
142
140
return 0 ;
143
141
}
Original file line number Diff line number Diff line change
1
+ #include < Arduino.h>
2
+ #include < BSTest.h>
3
+ #include < test_config.h>
4
+ #include < ESP8266WiFi.h>
5
+ #include < Ticker.h>
6
+
7
+ extern " C" {
8
+ #include " user_interface.h"
9
+ }
10
+
11
+ BS_ENV_DECLARE ();
12
+
13
+ void setup ()
14
+ {
15
+ Serial.begin (115200 );
16
+ Serial.setDebugOutput (true );
17
+ WiFi.persistent (false );
18
+ WiFi.mode (WIFI_STA);
19
+ WiFi.begin (STA_SSID, STA_PASS);
20
+ while (WiFi.status () != WL_CONNECTED) {
21
+ delay (500 );
22
+ }
23
+ BS_RUN (Serial);
24
+ }
25
+
26
+ static void stopAll ()
27
+ {
28
+ WiFiClient::stopAll ();
29
+ }
30
+
31
+ static void disconnectWiFI ()
32
+ {
33
+ wifi_station_disconnect ();
34
+ }
35
+
36
+ /* Some IP address that we can try connecting to, and expect a timeout */
37
+ #define UNREACHABLE_IP " 192.168.255.255"
38
+
39
+ TEST_CASE (" WiFiClient::stopAll during WiFiClient::connect" , " [wificlient]" )
40
+ {
41
+ WiFiClient client;
42
+ Ticker t;
43
+ t.once_ms (500 , &stopAll);
44
+ REQUIRE (client.connect (UNREACHABLE_IP, 1024 ) == 0 );
45
+ }
46
+
47
+ TEST_CASE (" WiFi disconnect during WiFiClient::connect" , " [wificlient]" )
48
+ {
49
+ WiFiClient client;
50
+ Ticker t;
51
+ t.once_ms (500 , &disconnectWiFI);
52
+ REQUIRE (client.connect (UNREACHABLE_IP, 1024 ) == 0 );
53
+ }
54
+
55
+ void loop ()
56
+ {
57
+ }
You can’t perform that action at this time.
0 commit comments