Skip to content

Commit 0f6a4cd

Browse files
committed
InternetSocket: Use atomics, not volatile
Use a better tool for the job.
1 parent cee814d commit 0f6a4cd

File tree

12 files changed

+18
-19
lines changed

12 files changed

+18
-19
lines changed

UNITTESTS/features/netsocket/DTLSSocketWrapper/unittest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ set(unittest-test-sources
2121
features/netsocket/DTLSSocketWrapper/test_DTLSSocketWrapper.cpp
2222
stubs/Mutex_stub.cpp
2323
stubs/mbed_assert_stub.c
24+
stubs/mbed_critical_stub.c
2425
stubs/equeue_stub.c
2526
../features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c
2627
stubs/EventQueue_stub.cpp

UNITTESTS/features/netsocket/InternetSocket/test_InternetSocket.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,6 @@ class stubInternetSocket : public InternetSocket {
7979
{
8080
_writers--;
8181
}
82-
void add_pending(void)
83-
{
84-
_pending++;
85-
}
86-
void rem_pending(void)
87-
{
88-
_pending--;
89-
}
9082

9183
protected:
9284
virtual nsapi_protocol_t get_proto()

UNITTESTS/features/netsocket/InternetSocket/unittest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ set(unittest-test-sources
1818
features/netsocket/InternetSocket/test_InternetSocket.cpp
1919
stubs/Mutex_stub.cpp
2020
stubs/mbed_assert_stub.c
21+
stubs/mbed_critical_stub.c
2122
stubs/equeue_stub.c
2223
stubs/EventQueue_stub.cpp
2324
stubs/mbed_shared_queues_stub.cpp

UNITTESTS/features/netsocket/TCPServer/unittest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ set(unittest-sources
2222
set(unittest-test-sources
2323
stubs/Mutex_stub.cpp
2424
stubs/mbed_assert_stub.c
25+
stubs/mbed_critical_stub.c
2526
stubs/equeue_stub.c
2627
stubs/EventQueue_stub.cpp
2728
stubs/mbed_shared_queues_stub.cpp

UNITTESTS/features/netsocket/TCPSocket/unittest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ set(unittest-test-sources
1919
features/netsocket/TCPSocket/test_TCPSocket.cpp
2020
stubs/Mutex_stub.cpp
2121
stubs/mbed_assert_stub.c
22+
stubs/mbed_critical_stub.c
2223
stubs/equeue_stub.c
2324
stubs/EventQueue_stub.cpp
2425
stubs/mbed_shared_queues_stub.cpp

UNITTESTS/features/netsocket/TLSSocketWrapper/unittest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ set(unittest-test-sources
2020
features/netsocket/TLSSocketWrapper/test_TLSSocketWrapper.cpp
2121
stubs/Mutex_stub.cpp
2222
stubs/mbed_assert_stub.c
23+
stubs/mbed_critical_stub.c
2324
stubs/equeue_stub.c
2425
../features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c
2526
stubs/EventQueue_stub.cpp

UNITTESTS/features/netsocket/UDPSocket/unittest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ set(unittest-test-sources
1919
features/netsocket/UDPSocket/test_UDPSocket.cpp
2020
stubs/Mutex_stub.cpp
2121
stubs/mbed_assert_stub.c
22+
stubs/mbed_critical_stub.c
2223
stubs/equeue_stub.c
2324
stubs/EventQueue_stub.cpp
2425
stubs/mbed_shared_queues_stub.cpp

features/netsocket/InternetSocket.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ using namespace mbed;
2121

2222
InternetSocket::InternetSocket()
2323
: _stack(0), _socket(0), _timeout(osWaitForever),
24-
_readers(0), _writers(0), _pending(0),
24+
_readers(0), _writers(0),
2525
_factory_allocated(false)
2626
{
27+
core_util_atomic_flag_clear(&_pending);
2728
_socket_stats.stats_new_socket_entry(this);
2829
}
2930

@@ -199,8 +200,7 @@ void InternetSocket::event()
199200
{
200201
_event_flag.set(READ_FLAG | WRITE_FLAG);
201202

202-
_pending += 1;
203-
if (_callback && _pending == 1) {
203+
if (_callback && !core_util_atomic_flag_test_and_set(&_pending)) {
204204
_callback();
205205
}
206206
}

features/netsocket/InternetSocket.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "rtos/Mutex.h"
2626
#include "rtos/EventFlags.h"
2727
#include "Callback.h"
28+
#include "mbed_critical.h"
2829
#include "mbed_toolchain.h"
2930
#include "SocketStats.h"
3031

@@ -168,7 +169,7 @@ class InternetSocket : public Socket {
168169
SocketAddress _remote_peer;
169170
uint8_t _readers;
170171
uint8_t _writers;
171-
volatile unsigned _pending;
172+
core_util_atomic_flag _pending;
172173
bool _factory_allocated;
173174

174175
// Event flags

features/netsocket/TCPServer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ nsapi_error_t TCPServer::accept(TCPSocket *connection, SocketAddress *address)
3838
break;
3939
}
4040

41-
_pending = 0;
41+
core_util_atomic_flag_clear(&_pending);
4242
void *socket;
4343
ret = _stack->socket_accept(_socket, &socket, address);
4444

0 commit comments

Comments
 (0)