fix: prevent 'Object has been destroyed' crash on update - #213
Conversation
Add broadcastToWindows() helper that checks both win.isDestroyed() and win.webContents.isDestroyed() with try/catch to handle the race condition where a window is destroyed between the check and send. Applied to all IPC broadcast patterns: - Auto-updater events (available, progress, complete, error) - Theme system change notification - Sync status change - Plugin reload - Settings sync (also added webContents.isDestroyed check) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 15 minutes and 20 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
#217) ## Patch v0.12.1 Critical fixes since v0.12.0: ### Bug Fixes - **Fix "Object has been destroyed" crash on update** — safe broadcast helper with double isDestroyed check + try/catch (#213) - **Move single-instance lock before whenReady()** — prevents secondary instances from initializing DB/IPC (#216) ### Architecture Refactor - **main/index.ts**: 3,046 → 887 lines (10 IPC handler modules) (#214) - **preload/index.ts**: 1,227 → 161 lines (14 API modules) (#215) - **App.tsx**: 1,010 → 643 lines (4 hooks extracted) (#215) - **PluginsSection.tsx**: 1,043 → 11 lines (3 sub-components) (#215) - **syncService.ts**: 1,065 → 18 lines (types + helpers extracted) (#215) ### CI Improvements - Fix Linux build: expanded cache cleanup, removed corrupted fpm (#212) - Remove broken dart-actions/tweet action (#210) - Node.js 24 via FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 (#212) - Branch protection configured on develop + main (#216) ## Test plan - [x] `pnpm typecheck` — 17/17 pass - [x] `pnpm test` — 16/16 pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Summary
Fixes the
TypeError: Object has been destroyedcrash that occurs whenthe app auto-updates. The error happens because IPC broadcasts try to
send to a WebContents that was destroyed during the update/restart.
Adds
broadcastToWindows()helper with double-check (win.isDestroyed()win.webContents.isDestroyed()) and try/catch to handle the racecondition. Applied to all 6 broadcast patterns in main process.
Test plan
pnpm typecheck— 17/17 pass🤖 Generated with Claude Code