1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-21 10:26:06 +03:00

ClientContext: restore use of two different pending booleans for connect and write #6483

This commit is contained in:
david gauchard 2019-09-04 01:22:56 +02:00 committed by GitHub
parent 07d8128b96
commit 291b321e62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -128,14 +128,14 @@ public:
if (err != ERR_OK) {
return 0;
}
_delaying = true;
_connect_pending = true;
_op_start_time = millis();
// Following delay will be interrupted by connect callback
for (decltype(_timeout_ms) i = 0; _delaying && i < _timeout_ms; i++) {
for (decltype(_timeout_ms) i = 0; _connect_pending && i < _timeout_ms; i++) {
// Give scheduled functions a chance to run (e.g. Ethernet uses recurrent)
delay(1);
}
_delaying = false;
_connect_pending = false;
if (!_pcb) {
DEBUGV(":cabrt\r\n");
return 0;
@ -432,8 +432,9 @@ protected:
void _notify_error()
{
if (_delaying) {
_delaying = false;
if (_connect_pending || _send_waiting) {
_send_waiting = false;
_connect_pending = false;
esp_schedule(); // break current delay()
}
}
@ -441,7 +442,7 @@ protected:
size_t _write_from_source(DataSource* ds)
{
assert(_datasource == nullptr);
assert(!_delaying);
assert(!_send_waiting);
_datasource = ds;
_written = 0;
_op_start_time = millis();
@ -459,13 +460,13 @@ protected:
break;
}
_delaying = true;
_send_waiting = true;
// Following delay will be interrupted by on next received ack
for (decltype(_timeout_ms) i = 0; _delaying && i < _timeout_ms; i++) {
for (decltype(_timeout_ms) i = 0; _send_waiting && i < _timeout_ms; i++) {
// Give scheduled functions a chance to run (e.g. Ethernet uses recurrent)
delay(1);
}
_delaying = false;
_send_waiting = false;
} while(true);
if (_sync)
@ -533,8 +534,8 @@ protected:
void _write_some_from_cb()
{
if (_delaying) {
_delaying = false;
if (_send_waiting) {
_send_waiting = false;
esp_schedule(); // break current delay()
}
}
@ -609,8 +610,8 @@ protected:
(void) err;
(void) pcb;
assert(pcb == _pcb);
if (_delaying) {
_delaying = false;
if (_connect_pending) {
_connect_pending = false;
esp_schedule(); // break current delay()
}
return ERR_OK;
@ -660,7 +661,8 @@ private:
size_t _written = 0;
uint32_t _timeout_ms = 5000;
uint32_t _op_start_time = 0;
bool _delaying = false;
bool _send_waiting = false;
bool _connect_pending = false;
int8_t _refcnt;
ClientContext* _next;