From 67b4aa3a0e588b1fa830a6943279f37d5904b873 Mon Sep 17 00:00:00 2001 From: denny Date: Sun, 13 Dec 2015 09:01:29 -0500 Subject: [PATCH] Adds error handler for new audio recorder starts. Currently chasing a bug where Linux runs out of FileDescriptors, even though we're explicitly closing out file channels. Error handler sets flag to prevent any further audio wave recorders from being started and logs the same. --- src/record/RecorderManager.java | 36 ++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/record/RecorderManager.java b/src/record/RecorderManager.java index b9941926..949ac241 100644 --- a/src/record/RecorderManager.java +++ b/src/record/RecorderManager.java @@ -17,10 +17,10 @@ ******************************************************************************/ package record; - import java.io.File; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,6 +33,7 @@ import audio.AudioPacket; import audio.metadata.Metadata; import audio.metadata.MetadataType; import controller.ThreadPoolManager; +import controller.ThreadPoolManager.ThreadType; public class RecorderManager implements Listener { @@ -43,6 +44,8 @@ public class RecorderManager implements Listener private Map mRecorders = new HashMap<>(); private ThreadPoolManager mThreadPoolManager; + + private boolean mCanStartNewRecorders = true; public RecorderManager( ThreadPoolManager threadPoolManager ) { @@ -78,16 +81,29 @@ public class RecorderManager implements Listener } else if( audioPacket.getType() == AudioPacket.Type.AUDIO ) { - String filePrefix = getFilePrefix( audioPacket ); - - RealBufferWaveRecorder recorder = - new RealBufferWaveRecorder( mThreadPoolManager, - AUDIO_SAMPLE_RATE, filePrefix ); - - recorder.start(); + if( mCanStartNewRecorders ) + { + String filePrefix = getFilePrefix( audioPacket ); - recorder.receive( audioPacket.getAudioBuffer() ); - mRecorders.put( identifier, recorder ); + try + { + RealBufferWaveRecorder recorder = + new RealBufferWaveRecorder( mThreadPoolManager, + AUDIO_SAMPLE_RATE, filePrefix ); + + recorder.start(); + + recorder.receive( audioPacket.getAudioBuffer() ); + mRecorders.put( identifier, recorder ); + } + catch( Exception ioe ) + { + mCanStartNewRecorders = false; + + mLog.error( "Error attempting to start new audio wave recorder." + + " All (future) audio recording is disabled", ioe ); + } + } } } }