Fix: ensure audio subprocesses are not started, even after reboots, if Audio USB Gadget functions are disabled

This commit is contained in:
Alex P 2025-09-20 21:14:02 +00:00
parent a84f63c0c4
commit 2f7374f748
1 changed files with 30 additions and 0 deletions

View File

@ -964,6 +964,21 @@ func rpcSetUsbDevices(usbDevices usbgadget.Devices) error {
logger.Info().Msg("audio input manager stopped") logger.Info().Msg("audio input manager stopped")
} }
// Stop global audio input supervisor if active
audioInputSupervisor := audio.GetAudioInputSupervisor()
if audioInputSupervisor != nil && audioInputSupervisor.IsRunning() {
logger.Info().Msg("stopping global audio input supervisor")
audioInputSupervisor.Stop()
// Wait for audio input supervisor to fully stop
for i := 0; i < 50; i++ { // Wait up to 5 seconds
if !audioInputSupervisor.IsRunning() {
break
}
time.Sleep(100 * time.Millisecond)
}
logger.Info().Msg("global audio input supervisor stopped")
}
// Stop audio output supervisor // Stop audio output supervisor
if audioSupervisor != nil && audioSupervisor.IsRunning() { if audioSupervisor != nil && audioSupervisor.IsRunning() {
logger.Info().Msg("stopping audio output supervisor") logger.Info().Msg("stopping audio output supervisor")
@ -1058,6 +1073,21 @@ func rpcSetUsbDeviceState(device string, enabled bool) error {
logger.Info().Msg("audio input manager stopped") logger.Info().Msg("audio input manager stopped")
} }
// Stop global audio input supervisor if active
audioInputSupervisor := audio.GetAudioInputSupervisor()
if audioInputSupervisor != nil && audioInputSupervisor.IsRunning() {
logger.Info().Msg("stopping global audio input supervisor")
audioInputSupervisor.Stop()
// Wait for audio input supervisor to fully stop
for i := 0; i < 50; i++ { // Wait up to 5 seconds
if !audioInputSupervisor.IsRunning() {
break
}
time.Sleep(100 * time.Millisecond)
}
logger.Info().Msg("global audio input supervisor stopped")
}
// Stop audio output supervisor // Stop audio output supervisor
if audioSupervisor != nil && audioSupervisor.IsRunning() { if audioSupervisor != nil && audioSupervisor.IsRunning() {
logger.Info().Msg("stopping audio output supervisor") logger.Info().Msg("stopping audio output supervisor")