lock improvements

This commit is contained in:
2020-10-09 15:00:54 +02:00
parent 9cd3c2c56e
commit 6bed667169
2 changed files with 41 additions and 15 deletions

View File

@@ -26,8 +26,39 @@
#include "AsyncHTTPRequest.h" #include "AsyncHTTPRequest.h"
namespace {
#if ESP32
class LockHelper
{
public:
LockHelper(QueueHandle_t _xMutex) :
xMutex{_xMutex}
{
xSemaphoreTakeRecursive(xMutex, portMAX_DELAY);
}
~LockHelper()
{
xSemaphoreGiveRecursive(xMutex);
}
private:
const QueueHandle_t xMutex;
};
#define _lock LockHelper lock{this->threadLock}
#define _unlock
#elif ESP8266
#define _lock
#define _unlock
#elif ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \
defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \
defined(STM32WB) || defined(STM32MP1) )
#define _lock
#define _unlock
#endif
}
//************************************************************************************************************** //**************************************************************************************************************
AsyncHTTPRequest::AsyncHTTPRequest(): _readyState(ReadyState::Unsent), _HTTPcode(0), _chunked(false), _debug(DEBUG_IOTA_HTTP_SET) AsyncHTTPRequest::AsyncHTTPRequest(): _readyState(ReadyState::Idle), _HTTPcode(0), _chunked(false), _debug(DEBUG_IOTA_HTTP_SET)
, _timeout(DEFAULT_RX_TIMEOUT), _lastActivity(0), _requestStartTime(0), _requestEndTime(0), _URL(nullptr) , _timeout(DEFAULT_RX_TIMEOUT), _lastActivity(0), _requestStartTime(0), _requestEndTime(0), _URL(nullptr)
, _connectedHost(nullptr), _connectedPort(-1), _client(nullptr), _contentLength(0), _contentRead(0) , _connectedHost(nullptr), _connectedPort(-1), _client(nullptr), _contentLength(0), _contentRead(0)
, _readyStateChangeCB(nullptr), _readyStateChangeCBarg(nullptr), _onDataCB(nullptr), _onDataCBarg(nullptr) , _readyStateChangeCB(nullptr), _readyStateChangeCBarg(nullptr), _onDataCB(nullptr), _onDataCBarg(nullptr)
@@ -38,6 +69,7 @@ AsyncHTTPRequest::AsyncHTTPRequest(): _readyState(ReadyState::Unsent), _HTTPcode
#endif #endif
} }
//************************************************************************************************************** //**************************************************************************************************************
AsyncHTTPRequest::~AsyncHTTPRequest() AsyncHTTPRequest::~AsyncHTTPRequest()
{ {
@@ -79,7 +111,7 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL)
{ {
AHTTP_LOGDEBUG3("open(", method, ", url =", URL); AHTTP_LOGDEBUG3("open(", method, ", url =", URL);
if (_readyState != ReadyState::Unsent && _readyState != ReadyState::Done) if (_readyState != ReadyState::Idle && _readyState != ReadyState::Unsent && _readyState != ReadyState::Done)
{ {
return false; return false;
} }
@@ -121,10 +153,9 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL)
return false; return false;
} }
char* hostName = new char[strlen(_URL->host) + 10]; char hostName[strlen(_URL->host) + 10];
sprintf(hostName, "%s:%d", _URL->host, _URL->port); sprintf(hostName, "%s:%d", _URL->host, _URL->port);
_addHeader("host", hostName); _addHeader("host", hostName);
delete[] hostName;
_lastActivity = millis(); _lastActivity = millis();
return _connect(); return _connect();

View File

@@ -45,22 +45,16 @@
#if ESP32 #if ESP32
#include <AsyncTCP.h> #include <AsyncTCP.h>
#define _lock xSemaphoreTakeRecursive(threadLock,portMAX_DELAY)
#define _unlock xSemaphoreGiveRecursive(threadLock)
#elif ESP8266 #elif ESP8266
#include <ESPAsyncTCP.h> #include <ESPAsyncTCP.h>
#define _lock
#define _unlock
#elif ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ #elif ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \
defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \
defined(STM32WB) || defined(STM32MP1) ) defined(STM32WB) || defined(STM32MP1) )
#include "STM32AsyncTCP.h" #include "STM32AsyncTCP.h"
#define _lock
#define _unlock
#endif #endif
@@ -87,11 +81,12 @@
enum class ReadyState enum class ReadyState
{ {
Unsent = 0, // Client created, open not yet called Idle, // Client created, open not yet called
Opened = 1, // open() has been called, connected Unsent, // open() has been called, not connected
HdrsRecvd = 2, // send() called, response headers available Opened, // open() has been called, connected
Loading = 3, // receiving, partial data available HdrsRecvd, // send() called, response headers available
Done = 4 // Request complete, all data available. Loading, // receiving, partial data available
Done // Request complete, all data available.
}; };
class AsyncHTTPRequest class AsyncHTTPRequest