Skip to content

fix(ServerUDPSocket): Delete() leaked detached CAsyncDNS on thread Create/Run failure - #878

Merged
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:fix/serverudp-asyncdns-leak
Jun 6, 2026
Merged

fix(ServerUDPSocket): Delete() leaked detached CAsyncDNS on thread Create/Run failure#878
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:fix/serverudp-asyncdns-leak

Conversation

@got3nks

@got3nks got3nks commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Fixes #876.

When the DNS resolver thread fails Create() or Run() before sending a queued UDP server packet, the dropped path released the packet without disposing of the detached wxThread object, leaking the CAsyncDNS heap allocation. Mirror the cleanup pattern already used in DownloadQueue.cpp:1352 and :1401.

Tested: macOS local build (Apple Silicon, Homebrew) — clean.

…eate/Run failure

When the DNS resolver thread fails Create() or Run() before sending a
queued UDP server packet, the dropped path released the packet without
disposing of the detached wxThread object, leaking the CAsyncDNS heap
allocation. Mirror the cleanup pattern already used in DownloadQueue.cpp
(lines 1352, 1401).

Closes amule-project#876.
@mrjimenez
mrjimenez merged commit 160465e into amule-project:master Jun 6, 2026
7 checks passed
got3nks added a commit to got3nks/amule that referenced this pull request Jun 7, 2026
…ule-project#912)

Extends existing categories (preferring extensions over new lines):
- Performance/Upload: amule-project#898 SlotAllocation default raised.
- Networking & Discovery: wire-parser hardening list extended with
  amule-project#879/amule-project#882/amule-project#890/amule-project#886; new amuleweb security hardening bullet
  consolidating ngosang's amule-project#869-amule-project#874 triage (all landed in amule-project#875);
  amulegui list extended with amule-project#857; shared-folder watcher extended
  with amule-project#858.
- Packaging: Windows installer i18n line extended with amule-project#899.
- Internals & Refactoring: new docs-polish + code-quality bullets
  covering amule-project#851/amule-project#855/amule-project#862/amule-project#888/amule-project#900/amule-project#866/amule-project#867/amule-project#895 and amule-project#909/amule-project#910/amule-project#912.
- Translations: new pre-release final-wave bullet covering amule-project#847/amule-project#856/
  amule-project#891/amule-project#908/amule-project#860/amule-project#904/amule-project#859/amule-project#863/amule-project#861/amule-project#880/amule-project#911/amule-project#901/amule-project#902/amule-project#889/amule-project#868/amule-project#853.
- Bug Fixes & Stability: amule-project#850/amule-project#854/amule-project#878/amule-project#906.
- CI: ccache wiring (amule-project#892, amule-project#903) + CodeQL binutils-dev (amule-project#907).

Contributors footer gains mifritscher and nguyenhoangminhhieu2004-gif
(both first-time contributors).

PR index extended through amule-project#912.
mrjimenez pushed a commit that referenced this pull request Jun 8, 2026
Extends existing categories (preferring extensions over new lines):
- Performance/Upload: #898 SlotAllocation default raised.
- Networking & Discovery: wire-parser hardening list extended with
  #879/#882/#890/#886; new amuleweb security hardening bullet
  consolidating ngosang's #869-#874 triage (all landed in #875);
  amulegui list extended with #857; shared-folder watcher extended
  with #858.
- Packaging: Windows installer i18n line extended with #899.
- Internals & Refactoring: new docs-polish + code-quality bullets
  covering #851/#855/#862/#888/#900/#866/#867/#895 and #909/#910/#912.
- Translations: new pre-release final-wave bullet covering #847/#856/
  #891/#908/#860/#904/#859/#863/#861/#880/#911/#901/#902/#889/#868/#853.
- Bug Fixes & Stability: #850/#854/#878/#906.
- CI: ccache wiring (#892, #903) + CodeQL binutils-dev (#907).

Contributors footer gains mifritscher and nguyenhoangminhhieu2004-gif
(both first-time contributors).

PR index extended through #912.
@got3nks
got3nks deleted the fix/serverudp-asyncdns-leak branch June 8, 2026 10:33
got3nks added a commit to got3nks/amule that referenced this pull request Aug 9, 2026
The remote GUI feeds every list from the same poll whether or not its panel
is on screen. A list sorted on a column whose values move -- speed,
transferred, requests -- marks a re-sort pending on each update, so one reply
re-sorts the downloads, shared-files, sources and peers lists in full, once
or twice a second, of which at most one is visible.

Measured with a probe on a modest setup (1228 shared files, 3 downloads):
150 polls produced 696 full sorts, 143 of the 156 shared-list sorts running
while that list was hidden. Each is a std::sort over every row plus a row
index rebuild and a selection round-trip, and the cost grows with the list,
so a user with thousands of files pays it several times a second for lists
they are not looking at (reported in issue amule-project#867).

MaybeResortNow() now returns early when the control is not on screen. The
work is deferred rather than dropped: m_resortPending stays set, so the next
update after the panel comes back sorts it. The poll that marks rows dirty
runs continuously while connected, so that is within a poll interval of
becoming visible -- and a list only has a sort pending because something in
it changed.

This is not the whole of amule-project#867. It removes work that was never needed, but
the reporter's hiccups follow the *visible* panel, and this makes no
difference there. What the visible list costs is being measured separately.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Memory leak: CAsyncDNS thread object leaked when thread creation fails

2 participants