diff --git a/features/netsocket/TCPSocket.cpp b/features/netsocket/TCPSocket.cpp index da88eb2460d..69703a9bb71 100644 --- a/features/netsocket/TCPSocket.cpp +++ b/features/netsocket/TCPSocket.cpp @@ -18,8 +18,10 @@ #include "Timer.h" #include "mbed_assert.h" + +// Max count for Sockets is set as 1: as we need Binary Semaphore. TCPSocket::TCPSocket() - : _pending(0), _read_sem(0), _write_sem(0), + : _pending(0), _read_sem(0, 1), _write_sem(0, 1), _read_in_progress(false), _write_in_progress(false) { } diff --git a/features/netsocket/UDPSocket.cpp b/features/netsocket/UDPSocket.cpp index 8baae204ba5..b974941dffb 100644 --- a/features/netsocket/UDPSocket.cpp +++ b/features/netsocket/UDPSocket.cpp @@ -18,8 +18,9 @@ #include "Timer.h" #include "mbed_assert.h" +// Max count for Sockets is set as 1: as we need Binary Semaphore. UDPSocket::UDPSocket() - : _pending(0), _read_sem(0), _write_sem(0) + : _pending(0), _read_sem(0, 1), _write_sem(0, 1) { } diff --git a/platform/mbed_retarget.cpp b/platform/mbed_retarget.cpp index a505d13ee9e..3e8466992bb 100644 --- a/platform/mbed_retarget.cpp +++ b/platform/mbed_retarget.cpp @@ -1014,6 +1014,12 @@ extern "C" void EvrRtxMutexError (osMutexId_t mutex_id, int32_t status) extern "C" void EvrRtxSemaphoreError (osSemaphoreId_t semaphore_id, int32_t status) { + /* In case of binary sempahore do not set this failure, + * Binary semaphore is allowed to perform release without acquire + */ + if ((osRtxErrorSemaphoreCountLimit == status) && (1 == svcRtxSemaphoreGetCount(semaphore_id))) { + return; + } error("Semaphore %p error %i\r\n", semaphore_id, status); }