Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed several underallocation issues that could trigger data corruption on `binary:replace`, `zlib:compress` and bsd socket recv code.
- Fixed a bug where `catch` would raise on regular atom results
- Fixed ESP32 socket driver holding the global socket-list lock across blocking TCP connects, leaking the port on connect failure, losing concurrent `accept` waiters, leaking `netbuf` on receive error paths, and a recycled-`netconn` race between socket close and the event handler
- Fixed the ESP32 event poller re-blocking after running a listener, which could delay a process
readied by a driver (e.g. an active-mode socket message) until the next event or timer tick

## [0.7.0-alpha.1] - 2026-04-06

Expand Down
3 changes: 3 additions & 0 deletions src/platforms/esp32/components/avm_sys/sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ static void receive_events(GlobalContext *glb, TickType_t wait_ticks)
void *sender = NULL;
QueueSetMemberHandle_t event_source;
while ((event_source = xQueueSelectFromSet(event_set, wait_ticks))) {
// Drain without re-blocking after the first event, then return so the
// scheduler loop can run any process a listener just made ready
wait_ticks = 0;
// Listener used shared event_queue.
if (event_source == event_queue) {
if (UNLIKELY(xQueueReceive(event_queue, &sender, 0) == pdFALSE)) {
Expand Down
Loading