From ab037c6f69f03b8cad3559d1ba1d050ce5363c07 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Thu, 3 Jan 2019 17:57:04 +0200 Subject: [PATCH] InternetSocket: better protect _callback sigio callbacks can be triggered from interrupt, so changing _callback needs critical section protection, not just a mutex. --- UNITTESTS/features/netsocket/DTLSSocket/unittest.cmake | 1 + UNITTESTS/features/netsocket/TLSSocket/unittest.cmake | 1 + features/netsocket/InternetSocket.cpp | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/UNITTESTS/features/netsocket/DTLSSocket/unittest.cmake b/UNITTESTS/features/netsocket/DTLSSocket/unittest.cmake index 8a8840dc83..d049b8632e 100644 --- a/UNITTESTS/features/netsocket/DTLSSocket/unittest.cmake +++ b/UNITTESTS/features/netsocket/DTLSSocket/unittest.cmake @@ -22,6 +22,7 @@ set(unittest-test-sources features/netsocket/DTLSSocket/test_DTLSSocket.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 diff --git a/UNITTESTS/features/netsocket/TLSSocket/unittest.cmake b/UNITTESTS/features/netsocket/TLSSocket/unittest.cmake index 76a9669840..43b03193f2 100644 --- a/UNITTESTS/features/netsocket/TLSSocket/unittest.cmake +++ b/UNITTESTS/features/netsocket/TLSSocket/unittest.cmake @@ -21,6 +21,7 @@ set(unittest-test-sources features/netsocket/TLSSocket/test_TLSSocket.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 diff --git a/features/netsocket/InternetSocket.cpp b/features/netsocket/InternetSocket.cpp index 61903c7ec2..815e2d5de8 100644 --- a/features/netsocket/InternetSocket.cpp +++ b/features/netsocket/InternetSocket.cpp @@ -207,9 +207,9 @@ void InternetSocket::event() void InternetSocket::sigio(Callback callback) { - _lock.lock(); + core_util_critical_section_enter(); _callback = callback; - _lock.unlock(); + core_util_critical_section_exit(); } void InternetSocket::attach(Callback callback)