InternetSocket: Use atomics, not volatile

Use a better tool for the job.
pull/9248/head
Kevin Bracey 2019-01-03 17:56:10 +02:00
parent cee814dc29
commit 0f6a4cd0bd
12 changed files with 18 additions and 19 deletions

View File

@ -21,6 +21,7 @@ set(unittest-test-sources
features/netsocket/DTLSSocketWrapper/test_DTLSSocketWrapper.cpp
stubs/Mutex_stub.cpp
stubs/mbed_assert_stub.c
stubs/mbed_critical_stub.c
stubs/equeue_stub.c
../features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c
stubs/EventQueue_stub.cpp

View File

@ -79,14 +79,6 @@ public:
{
_writers--;
}
void add_pending(void)
{
_pending++;
}
void rem_pending(void)
{
_pending--;
}
protected:
virtual nsapi_protocol_t get_proto()

View File

@ -18,6 +18,7 @@ set(unittest-test-sources
features/netsocket/InternetSocket/test_InternetSocket.cpp
stubs/Mutex_stub.cpp
stubs/mbed_assert_stub.c
stubs/mbed_critical_stub.c
stubs/equeue_stub.c
stubs/EventQueue_stub.cpp
stubs/mbed_shared_queues_stub.cpp

View File

@ -22,6 +22,7 @@ set(unittest-sources
set(unittest-test-sources
stubs/Mutex_stub.cpp
stubs/mbed_assert_stub.c
stubs/mbed_critical_stub.c
stubs/equeue_stub.c
stubs/EventQueue_stub.cpp
stubs/mbed_shared_queues_stub.cpp

View File

@ -19,6 +19,7 @@ set(unittest-test-sources
features/netsocket/TCPSocket/test_TCPSocket.cpp
stubs/Mutex_stub.cpp
stubs/mbed_assert_stub.c
stubs/mbed_critical_stub.c
stubs/equeue_stub.c
stubs/EventQueue_stub.cpp
stubs/mbed_shared_queues_stub.cpp

View File

@ -20,6 +20,7 @@ set(unittest-test-sources
features/netsocket/TLSSocketWrapper/test_TLSSocketWrapper.cpp
stubs/Mutex_stub.cpp
stubs/mbed_assert_stub.c
stubs/mbed_critical_stub.c
stubs/equeue_stub.c
../features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c
stubs/EventQueue_stub.cpp

View File

@ -19,6 +19,7 @@ set(unittest-test-sources
features/netsocket/UDPSocket/test_UDPSocket.cpp
stubs/Mutex_stub.cpp
stubs/mbed_assert_stub.c
stubs/mbed_critical_stub.c
stubs/equeue_stub.c
stubs/EventQueue_stub.cpp
stubs/mbed_shared_queues_stub.cpp

View File

@ -21,9 +21,10 @@ using namespace mbed;
InternetSocket::InternetSocket()
: _stack(0), _socket(0), _timeout(osWaitForever),
_readers(0), _writers(0), _pending(0),
_readers(0), _writers(0),
_factory_allocated(false)
{
core_util_atomic_flag_clear(&_pending);
_socket_stats.stats_new_socket_entry(this);
}
@ -199,8 +200,7 @@ void InternetSocket::event()
{
_event_flag.set(READ_FLAG | WRITE_FLAG);
_pending += 1;
if (_callback && _pending == 1) {
if (_callback && !core_util_atomic_flag_test_and_set(&_pending)) {
_callback();
}
}

View File

@ -25,6 +25,7 @@
#include "rtos/Mutex.h"
#include "rtos/EventFlags.h"
#include "Callback.h"
#include "mbed_critical.h"
#include "mbed_toolchain.h"
#include "SocketStats.h"
@ -168,7 +169,7 @@ protected:
SocketAddress _remote_peer;
uint8_t _readers;
uint8_t _writers;
volatile unsigned _pending;
core_util_atomic_flag _pending;
bool _factory_allocated;
// Event flags

View File

@ -38,7 +38,7 @@ nsapi_error_t TCPServer::accept(TCPSocket *connection, SocketAddress *address)
break;
}
_pending = 0;
core_util_atomic_flag_clear(&_pending);
void *socket;
ret = _stack->socket_accept(_socket, &socket, address);

View File

@ -62,7 +62,7 @@ nsapi_error_t TCPSocket::connect(const SocketAddress &address)
break;
}
_pending = 0;
core_util_atomic_flag_clear(&_pending);
ret = _stack->socket_connect(_socket, address);
if ((_timeout == 0) || !(ret == NSAPI_ERROR_IN_PROGRESS || ret == NSAPI_ERROR_ALREADY)) {
_socket_stats.stats_update_socket_state(this, SOCK_CONNECTED);
@ -143,7 +143,7 @@ nsapi_size_or_error_t TCPSocket::send(const void *data, nsapi_size_t size)
break;
}
_pending = 0;
core_util_atomic_flag_clear(&_pending);
ret = _stack->socket_send(_socket, data_ptr + written, size - written);
if (ret >= 0) {
written += ret;
@ -210,7 +210,7 @@ nsapi_size_or_error_t TCPSocket::recv(void *data, nsapi_size_t size)
break;
}
_pending = 0;
core_util_atomic_flag_clear(&_pending);
ret = _stack->socket_recv(_socket, data, size);
if ((_timeout == 0) || (ret != NSAPI_ERROR_WOULD_BLOCK)) {
_socket_stats.stats_update_recv_bytes(this, ret);
@ -281,7 +281,7 @@ TCPSocket *TCPSocket::accept(nsapi_error_t *error)
break;
}
_pending = 0;
core_util_atomic_flag_clear(&_pending);
void *socket;
SocketAddress address;
ret = _stack->socket_accept(_socket, &socket, &address);

View File

@ -70,7 +70,7 @@ nsapi_size_or_error_t UDPSocket::sendto(const SocketAddress &address, const void
break;
}
_pending = 0;
core_util_atomic_flag_clear(&_pending);
nsapi_size_or_error_t sent = _stack->socket_sendto(_socket, address, data, size);
if ((0 == _timeout) || (NSAPI_ERROR_WOULD_BLOCK != sent)) {
_socket_stats.stats_update_sent_bytes(this, sent);
@ -130,7 +130,7 @@ nsapi_size_or_error_t UDPSocket::recvfrom(SocketAddress *address, void *buffer,
break;
}
_pending = 0;
core_util_atomic_flag_clear(&_pending);
nsapi_size_or_error_t recv = _stack->socket_recvfrom(_socket, address, buffer, size);
// Filter incomming packets using connected peer address