Fix mpv being left around on abrupt termination (#4042)

Closes #4015

(cherry picked from commit f81a9bfdfb)
This commit is contained in:
Damien Elmes 2025-06-01 13:16:28 +07:00 committed by Damien Elmes
parent f3acf5fe59
commit 711db1ee0c

View file

@ -68,6 +68,7 @@ if is_win:
# pylint: disable=import-error
import pywintypes
import win32file # pytype: disable=import-error
import win32job
import win32pipe
import winerror
@ -130,6 +131,22 @@ class MPVBase:
def _start_process(self):
"""Start the mpv process."""
self._proc = subprocess.Popen(self.argv, env=self.popenEnv)
if is_win:
# Ensure mpv gets terminated if Anki closes abruptly.
self._job = win32job.CreateJobObject(None, "")
extended_info = win32job.QueryInformationJobObject(
self._job, win32job.JobObjectExtendedLimitInformation
)
extended_info["BasicLimitInformation"][
"LimitFlags"
] = win32job.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
win32job.SetInformationJobObject(
self._job,
win32job.JobObjectExtendedLimitInformation,
extended_info,
)
handle = self._proc._handle # pylint: disable=no-member
win32job.AssignProcessToJobObject(self._job, handle)
def _stop_process(self):
"""Stop the mpv process."""