extend poll() protection - release

This commit is contained in:
Philippe G
2020-08-28 19:40:57 -07:00
parent c8054ff9d2
commit ce369638da

View File

@@ -43,8 +43,10 @@ static struct buffer buf;
static mutex_type poll_mutex;
struct buffer *streambuf = &buf;
#define LOCK mutex_lock(streambuf->mutex)
#define UNLOCK mutex_unlock(streambuf->mutex)
#define LOCK mutex_lock(streambuf->mutex)
#define UNLOCK mutex_unlock(streambuf->mutex)
#define LOCK_L mutex_lock(poll_mutex)
#define UNLOCK_L mutex_unlock(poll_mutex)
static sockfd fd;
@@ -188,6 +190,7 @@ static void *stream_thread() {
} else {
LOCK_L;
pollinfo.fd = fd;
pollinfo.events = POLLIN;
if (stream.state == SEND_HEADERS) {
@@ -197,12 +200,9 @@ static void *stream_thread() {
UNLOCK;
mutex_lock(poll_mutex);
int pending = _poll(ssl, &pollinfo, 100);
mutex_unlock(poll_mutex);
if (_poll(ssl, &pollinfo, 100)) {
if (pending) {
UNLOCK_L;
LOCK;
// check socket has not been closed while in poll
@@ -355,6 +355,7 @@ static void *stream_thread() {
UNLOCK;
} else {
UNLOCK_L;
LOG_SDEBUG("poll timeout");
}
}
@@ -579,7 +580,6 @@ void stream_sock(u32_t ip, u16_t port, const char *header, size_t header_len, un
bool stream_disconnect(void) {
bool disc = false;
mutex_lock(poll_mutex);
LOCK;
#if USE_SSL
if (ssl) {
@@ -588,13 +588,14 @@ bool stream_disconnect(void) {
ssl = NULL;
}
#endif
LOCK_L;
if (fd != -1) {
closesocket(fd);
fd = -1;
disc = true;
}
UNLOCK_L,
stream.state = STOPPED;
UNLOCK;
mutex_unlock(poll_mutex);
return disc;
}