Skip to content

Commit 67dd449

Browse files
authored
Merge pull request #9248 from kjbracey-arm/socket_pending_atomic
InternetSocket: use atomics, not volatile
2 parents 091fe2b + ab037c6 commit 67dd449

File tree

14 files changed

+22
-21
lines changed

14 files changed

+22
-21
lines changed

UNITTESTS/features/netsocket/DTLSSocket/unittest.cmake

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

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/TLSSocket/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/TLSSocket/test_TLSSocket.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/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: 5 additions & 5 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,17 +200,16 @@ 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
}
207207

208208
void InternetSocket::sigio(Callback<void()> callback)
209209
{
210-
_lock.lock();
210+
core_util_critical_section_enter();
211211
_callback = callback;
212-
_lock.unlock();
212+
core_util_critical_section_exit();
213213
}
214214

215215
void InternetSocket::attach(Callback<void()> callback)

0 commit comments

Comments
 (0)