Avoid critical sections where possible #1063
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Recently, there was a request in #1058: "Please document how the synchronisation works".
This was about the socket's
List_t
that stores UDP packets, calledxWaitingPacketsList
.I showed that the addition and removal of packets is protected by a critical section, and/or a suspended scheduler.
Non protected access is only seen when
listCURRENT_LIST_LENGTH()
is called. That is OK because a variable of typeUBaseType_t
is read.These are the proposed changes:
In FreeRTOS_UDP_IPv4.c and in FreeRTOS_UDP_IPv6.c :
And here in FreeRTOS_Sockets.c :
Test Steps
I tested the changes by using ncat: I started multiple instances and had it exchange UDP packets with the DUT. I added stress by running iperf3 at the same time.
Checklist:
Related Issue
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.