You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
pop-upgrade daemon enters a persistent 100%-of-one-core userspace busy loop during a release check on Pop!_OS 22.04, despite running commit f2903ce, which was intended to fix the metadata-fetch infinite retry / 100% CPU issue.
The daemon remained in this state for multiple days. A one-minute watcher recorded 3,791 consecutive samples at approximately 98–101% CPU. APT/DPKG were idle and held no locks.
strace -f showed the Tokio worker threads waiting in futex/epoll calls, while the CPU-burning main thread made no meaningful system calls.
GDB confirmed that thread 1 (the daemon main thread) was running continuously in stripped Rust code. The Tokio worker threads were asleep.
The sampled main-thread instruction was in an atomic reference-count cleanup path (lock decq / return), consistent with an async future being polled/dropped repeatedly in userspace.
The daemon process mapped the current /usr/bin/pop-upgrade inode; it was not an older, deleted executable left running after package replacement.
Expected behavior
The release API request should either complete successfully or return an error after the configured timeout. The daemon should not spin indefinitely or consume a full CPU core.
Additional evidence available
I have retained:
per-minute CPU/thermal/process samples;
process tree and /proc state;
strace summary and raw trace;
six-hour journal capture around detection;
complete GDB thread apply all bt output;
exact package version, binary build ID, and upstream source revision.
I can attach sanitized captures if useful. The full journal is not attached initially because it may contain unrelated host information.
Possible regression/incomplete fix
The installed revision is the commit from #396, “Remove Infinite Retry on Metadata Fetch To Prevent 100% CPU Usage.” This capture suggests either another busy-loop path remains in the release API request/future handling or the fix does not cover this trigger.
Summary
pop-upgrade daemonenters a persistent 100%-of-one-core userspace busy loop during a release check on Pop!_OS 22.04, despite running commitf2903ce, which was intended to fix the metadata-fetch infinite retry / 100% CPU issue.The daemon remained in this state for multiple days. A one-minute watcher recorded 3,791 consecutive samples at approximately 98–101% CPU. APT/DPKG were idle and held no locks.
Environment
pop-upgrade:1.0.0~1778861967~22.04~f2903ce(amd64)f549629fb753e75a2c415efd24b915ad2fba5bf4f2903ce2631c18d721530ee263aff6e31c5951b11233442Trigger and last daemon messages
The busy loop began after a routine source refresh completed and the daemon entered its release check:
No subsequent completion or error was logged.
The endpoint used by this path was tested separately and returned HTTP 200 with valid release JSON:
Observations
apt,apt-get, ordpkgchild existed beneathpop-upgrade.apt-getchild.strace -fshowed the Tokio worker threads waiting in futex/epoll calls, while the CPU-burning main thread made no meaningful system calls.lock decq/ return), consistent with an async future being polled/dropped repeatedly in userspace./usr/bin/pop-upgradeinode; it was not an older, deleted executable left running after package replacement.Expected behavior
The release API request should either complete successfully or return an error after the configured timeout. The daemon should not spin indefinitely or consume a full CPU core.
Additional evidence available
I have retained:
/procstate;stracesummary and raw trace;thread apply all btoutput;I can attach sanitized captures if useful. The full journal is not attached initially because it may contain unrelated host information.
Possible regression/incomplete fix
The installed revision is the commit from #396, “Remove Infinite Retry on Metadata Fetch To Prevent 100% CPU Usage.” This capture suggests either another busy-loop path remains in the release API request/future handling or the fix does not cover this trigger.