{"version":"2.1.222","anchor":"file-watcher-teardown-no-longer-assumes-a-watcher-exists","canonical_anchor":"file-watcher-teardown-no-longer-assumes-a-watcher-exists","heading":"File watcher teardown no longer assumes a watcher exists","tier":"notice","area":"Elsewhere","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.222\/e\/file-watcher-teardown-no-longer-assumes-a-watcher-exists","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.222","markdown":"### File watcher teardown no longer assumes a watcher exists\n\nA crash when unwatching a file that was never actually being watched is fixed.\n\n**What**\n\nRemoving the last listener for a watched entry whose watcher never started no longer throws.\n\n**Details**\n\n- Both unsubscribe paths check for a watcher object before calling close or unwatch.\n\n**Evidence**\n\n`mku(a.listeners) && a.watcher`\n\n- Area: Elsewhere\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 0\/5"}