diff --git a/jsonrpc.go b/jsonrpc.go index cfc777ad..3400312e 100644 --- a/jsonrpc.go +++ b/jsonrpc.go @@ -964,6 +964,21 @@ func rpcSetUsbDevices(usbDevices usbgadget.Devices) error { 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 if audioSupervisor != nil && audioSupervisor.IsRunning() { 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") } + // 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 if audioSupervisor != nil && audioSupervisor.IsRunning() { logger.Info().Msg("stopping audio output supervisor")