Comparing main...release-0.7 · atomvm/AtomVM · GitHub
Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: atomvm/AtomVM
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: main
Choose a base ref
...
head repository: atomvm/AtomVM
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: release-0.7
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 18 commits
  • 15 files changed
  • 6 contributors

Commits on Oct 1, 2026

  1. .github: Use rebar3 3.27.1 to publish the atomvm Hex package

    rebar3_hex 7.3.0 leaves HEX_API_KEY to rebar3, which reads it from
    3.27.1 on; with the 3.25.1 the workflow installed, publishing crashed.
    
    Install rebar3 3.27.1 and pin the plugin to 7.3.0, so that a plugin
    release cannot change what a tag runs.
    
    Signed-off-by: Davide Bettio <davide@uninstall.it>
    bettio committed Oct 1, 2026
    Configuration menu
    Copy the full SHA
    94300ae View commit details
    Browse the repository at this point in the history

Commits on Oct 2, 2026

  1. Prepare next development cycle

    Update CHANGELOG.md, bump version number in version.cmake.
    
    Signed-off-by: Davide Bettio <davide@uninstall.it>
    bettio committed Oct 2, 2026
    Configuration menu
    Copy the full SHA
    2de0d61 View commit details
    Browse the repository at this point in the history

Commits on Oct 3, 2026

  1. Merge pull request #2414 from bettio/prepare-v0.7.0-beta.1-dev-cycle

    Prepare next development cycle
    
    These changes are made under both the "Apache 2.0" and the "GNU Lesser General
    Public License 2.1 or later" license terms (dual license).
    
    SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
    bettio committed Oct 3, 2026
    Configuration menu
    Copy the full SHA
    abda4a5 View commit details
    Browse the repository at this point in the history
  2. Fix key order of maps decoded from MAP_EXT

    Maps are expected to hold their keys in term order, but MAP_EXT
    decoding kept them in the encoder's order. OTP writes maps of more
    than 32 keys in hash order, and since OTP 26 smaller maps with atom
    keys in atom index order, so such maps arriving through
    binary_to_term or distribution compared unequal to the same map
    built at runtime, and a `=>` update of an existing key produced
    duplicate keys. Sending that map back to an OTP node is then rejected
    as a corrupted external term and the distribution connection is
    dropped.
    
    Sort the entries once decoded, and reject a map with duplicate keys
    with badarg, as OTP does.
    
    Fixes: #2408
    Fixes: #2412
    Signed-off-by: Matt Beanland <beanland@live.com.au>
    matt-beanland committed Oct 3, 2026
    Configuration menu
    Copy the full SHA
    e185380 View commit details
    Browse the repository at this point in the history

Commits on Oct 4, 2026

  1. Merge pull request #2413 from matt-beanland/fix-map-ext-key-order

    Fix key order of maps decoded from MAP_EXT
    
    Fixes #2408
    Fixes #2412
    
    These changes are made under both the "Apache 2.0" and the "GNU Lesser General
    Public License 2.1 or later" license terms (dual license).
    
    SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
    bettio committed Oct 4, 2026
    Configuration menu
    Copy the full SHA
    1f37255 View commit details
    Browse the repository at this point in the history

Commits on Oct 12, 2026

  1. Fix cancellation of send_after/3 timers

    send_after/3 returned a fresh reference while the timer it spawned was
    registered under another one, so cancel_timer/1 never found it and the
    message was delivered anyway. erlang:send_after/3 and
    timer:send_after/2,3 delegate to it and were affected too.
    
    Route send_after/3 through the same gen_server path as start_timer/3,
    with a delivery mode that sends the bare message instead of the
    {timeout, Ref, Msg} tuple.
    
    Originally submitted by Qata in PR #2358, squashed and rebased onto
    release-0.7 as requested in review.
    
    These changes are made under both the "Apache 2.0" and the "GNU Lesser
    General Public License 2.1 or later" license terms (dual license).
    
    SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
    
    See also: #2358
    Signed-off-by: Davide Bettio <davide@uninstall.it>
    Made In Heaven authored and bettio committed Oct 12, 2026
    Configuration menu
    Copy the full SHA
    d3eab09 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #2425 from bettio/fix-send-after-cancel

    Fix cancellation of send_after/3 timers
    bettio committed Oct 12, 2026
    Configuration menu
    Copy the full SHA
    c8fbd4c View commit details
    Browse the repository at this point in the history

Commits on Oct 13, 2026

  1. Keep pending signals in order when dumping a crashed process

    mailbox_crashdump moved the normal messages of the outer list to the
    inner list and then stored the remaining signals back with a plain
    assignment to outer_first. Two things went wrong with that:
    
    - a signal enqueued by another scheduler between the detach and the
      store was overwritten and lost. With a process monitored twice by a
      process that is killed while the monitored one crashes, one of the
      two DemonitorSignals could be lost this way, and context_destroy
      then aborted in context_monitors_handle_terminate on
      `assert(target != NULL)`;
    - the signals were stored back oldest first while the outer list is
      newest first, so context_destroy processed them in reverse order.
    
    Store the signals back newest first with a compare and exchange,
    chaining anything enqueued in the meantime in front of them.
    
    Fixes: #2415
    Signed-off-by: Zhaoqi Xu <lzy00419@outlook.com>
    r3wretrhy committed Oct 13, 2026
    Configuration menu
    Copy the full SHA
    720cf33 View commit details
    Browse the repository at this point in the history
  2. Fix order of messages sent from tasks

    globalcontext_send_message_from_task pushes onto the head of the global
    message queue when it cannot enqueue directly, and
    globalcontext_process_message_queue drained it from the head, so the
    messages a task sent in a row reached the mailbox in reverse order.
    Without SMP every message from a task goes through this queue: on the
    ESP32-C3 the network driver's eth_connected arrived before eth_started.
    With SMP it happens when the process table or spinlock is busy.
    
    Reverse the queue before enqueuing. test-mailbox sends two batches with
    the spinlock held, which forces the queued path with SMP too, and checks
    they arrive in order; it is built only with AVM_TASK_DRIVER_ENABLED.
    
    Signed-off-by: Gabriel Mancini <gabriel.mancini@gmail.com>
    gabrielmancini committed Oct 13, 2026
    Configuration menu
    Copy the full SHA
    761e200 View commit details
    Browse the repository at this point in the history

Commits on Oct 14, 2026

  1. Merge pull request #2426 from r3wretrhy/fix/crashdump-keep-outer-sign…

    …als-2415
    
    Keep pending signals in order when dumping a crashed process
    
    Fixes #2415
    
    These changes are made under both the "Apache 2.0" and the "GNU Lesser General
    Public License 2.1 or later" license terms (dual license).
    
    SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
    bettio committed Oct 14, 2026
    Configuration menu
    Copy the full SHA
    72311ba View commit details
    Browse the repository at this point in the history
  2. Merge pull request #2423 from iobee-io/message-queue-order

    Fix order of messages sent from tasks
    
    These changes are made under both the "Apache 2.0" and the "GNU Lesser General
    Public License 2.1 or later" license terms (dual license).
    
    SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
    bettio committed Oct 14, 2026
    Configuration menu
    Copy the full SHA
    4ef1369 View commit details
    Browse the repository at this point in the history
  3. generic_unix: Fix poll set overflow on select

    enif_select sets read/write on a select event while holding the
    select_events lock, but marks select_events_poll_count dirty only after
    releasing it (sys_register_select_event). If another scheduler rebuilds
    the pollfd array in between because the listeners are dirty, it reuses
    the cached select event count and then writes one entry for every
    select event with read or write set: one more than it allocated.
    
    AddressSanitizer reports it as a heap-buffer-overflow in
    sys_poll_events_with_poll; without it, glibc aborts later with
    "realloc(): invalid next size". Counting the select events on every
    rebuild, under the lock the loop already holds, keeps the count and the
    loop in agreement.
    
    Signed-off-by: Gabriel Mancini <gabriel.mancini@gmail.com>
    gabrielmancini committed Oct 14, 2026
    Configuration menu
    Copy the full SHA
    049d5dc View commit details
    Browse the repository at this point in the history
  4. Add regression test for poll set overflow

    Arm a select event the way enif_select does under the select_events
    lock, but before sys_register_select_event marks the cached count
    dirty, then run a listener-only rebuild. On the parent commit the
    pollfd array is sized from the stale count and ASan reports a heap
    buffer overflow; with the fix the event is polled and notified.
    
    Not built on kqueue: an fd armed this way never reaches the kqueue.
    
    Co-authored-by: Davide Bettio <davide.bettio@ispirata.com>
    Signed-off-by: Gabriel Mancini <gabriel.mancini@gmail.com>
    gabrielmancini and bettio committed Oct 14, 2026
    Configuration menu
    Copy the full SHA
    a70d545 View commit details
    Browse the repository at this point in the history

Commits on Oct 15, 2026

  1. Merge pull request #2417 from iobee-io/poll-set-overflow

    generic_unix: Fix poll set overflow on select
    bettio committed Oct 15, 2026
    Configuration menu
    Copy the full SHA
    7b8e698 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #2411 from bettio/hex-publish-rebar3

    .github: Use rebar3 3.27.1 to publish the atomvm Hex package
    
    These changes are made under both the "Apache 2.0" and the "GNU Lesser General
    Public License 2.1 or later" license terms (dual license).
    
    SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
    bettio committed Oct 15, 2026
    Configuration menu
    Copy the full SHA
    3f4eb1b View commit details
    Browse the repository at this point in the history
  3. esp32 uart: Fix read blocking on a stale event

    A read that finds data takes every buffered byte, including the bytes
    of UART_DATA events still queued. When the listener then handles one
    of those events, uart_read_bytes waits forever for bytes that were
    already delivered, blocking the scheduler: with a peer that then goes
    quiet (a modem after ATH), the task watchdog resets the chip.
    
    Read only what the buffer holds, without waiting, and skip an event
    that finds it empty.
    
    Signed-off-by: Gabriel Mancini <gabriel.mancini@gmail.com>
    gabrielmancini committed Oct 15, 2026
    Configuration menu
    Copy the full SHA
    d326239 View commit details
    Browse the repository at this point in the history
  4. esp32 uart: Build the read binary from the bytes read

    With a 0 tick timeout uart_read_bytes can return -1 (rx mutex busy) or
    fewer bytes than counted (the other scheduler drained the buffer), and
    the result was dropped: {ok, Bin} went out with uninitialized bytes.
    
    uart:read/2 had the same race with portMAX_DELAY: after counting the
    buffered bytes, the listener on the other scheduler could take some,
    and the read then waited for the peer to send more.
    
    Both paths now read into a temporary buffer without waiting, build the
    binary from the returned length, and keep the reader registered when
    nothing was read. The UART and USB-Serial/JTAG branches share it.
    
    Signed-off-by: Gabriel Mancini <gabriel.mancini@gmail.com>
    gabrielmancini committed Oct 15, 2026
    Configuration menu
    Copy the full SHA
    e06bba2 View commit details
    Browse the repository at this point in the history

Commits on Oct 16, 2026

  1. Merge pull request #2428 from iobee-io/uart-stale-event

    esp32 uart: Fix read blocking on a stale event
    bettio committed Oct 16, 2026
    Configuration menu
    Copy the full SHA
    18b3587 View commit details
    Browse the repository at this point in the history
Loading