Skip to content

Mouser v3.7.1

Choose a tag to compare

@github-actions github-actions released this 25 Jul 09:15
450093a

Mouser v3.7.1

The macOS memory leak is fixed. If Mouser's memory usage grew into the hundreds of MB (or GB) over long sessions on your Mac, this release is for you: a long-running instance now stays flat instead of climbing until restart.

🧠 Memory fixes (macOS)

Three complementary fixes, each validated on real hardware by the community:

  • HID reconnect leak (#240) — the IOKit backend never called IOHIDManagerClose, so every BLE discovery/reconnect cycle leaked a manager plus Mach ports; a 24-hour session could reach 3.3 GB with 33,000 leaked managers and 67,000 ports. Managers are now closed and reconnect probing is throttled with exponential backoff. Validated: manager count pinned at 2 across thousands of cycles.
  • Click-path leak (#242) — the threads that execute your remapped actions had no NSAutoreleasePool, so every injected click/keystroke left native CGEvent temporaries behind forever. All action-execution paths now drain pools. Validated: click bursts no longer accumulate.
  • Scroll-path leak (#247) — the native HID read loop delivered input reports (15 per hi-res wheel detent!) on threads that never drained a pool, leaking HIDEvent objects by the million during scrolling. The read-loop pump and every IOKit entry point are now pooled. Validated: memory flat at ~393 MB across an 11-hour monitored window that previously forced a restart at 700 MB every ~2 hours.

Also: background HID polls no longer wake a sleeping Mac.

Huge thanks to @maxhis for the exceptional vmmap/heap/leaks forensics, @bdhwrsh for the scroll-vs-click A/B isolation, @skinnyshy for days of threshold monitoring, and @Spoon94, @XXC385, and @mizi for reports and long-run testing.

Known residual: a very slow creep (~1 MB/h) from foreground-app polling remains and is next on the roadmap (MEMORY_LEAK_PLAN.md). Fast growth tied to clicking/scrolling/reconnects is gone.

🖱️ New device support

  • Logitech M585 / M590 with wheel-tilt configuration and interactive layout — thanks @unijiang.

✨ New features

  • Gesture Swipe — turn any button into a hold-and-slide gesture pad (all platforms).
  • Scroll force support for enhanced SmartShift devices — thanks @mizi (#232).
  • Zoom In / Zoom Out actions on Windows and Linux.
  • Battery badge now shows a charging indicator — thanks @davidnoyes (#239).

🔧 Fixes

  • Hi-res smooth scrolling survives device reconnects (0x2121 resolution bit preserved, #244).
  • UWP apps now receive side-button copy/paste correctly — thanks @zeward-lee (#226).
  • Idle-timer improvements — thanks @ArtisticZhao (#225).

📦 For contributors

  • MEMORY_LEAK_PLAN.md documents the full memory investigation, evidence, and remaining roadmap.
  • A new spec-coverage guard (tests/test_spec_coverage.py) fails CI if a change adds modules, assets, or QML imports the PyInstaller specs don't bundle — packaged builds can no longer silently drift from the source tree.

Full changelog: v3.7.0...v3.7.1