mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
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.
This commit is contained in:
@@ -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<AudioPacket>
|
||||
{
|
||||
@@ -43,6 +44,8 @@ public class RecorderManager implements Listener<AudioPacket>
|
||||
private Map<String,RealBufferWaveRecorder> mRecorders = new HashMap<>();
|
||||
|
||||
private ThreadPoolManager mThreadPoolManager;
|
||||
|
||||
private boolean mCanStartNewRecorders = true;
|
||||
|
||||
public RecorderManager( ThreadPoolManager threadPoolManager )
|
||||
{
|
||||
@@ -78,16 +81,29 @@ public class RecorderManager implements Listener<AudioPacket>
|
||||
}
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user