Timeline: Avoid deadlock in diskthread.
This commit is contained in:
parent
55bbce6d24
commit
d881dce874
|
@ -82,7 +82,10 @@ Disk_Stream::~Disk_Stream ( )
|
||||||
sem_destroy( &_blocks );
|
sem_destroy( &_blocks );
|
||||||
|
|
||||||
for ( int i = channels(); i--; )
|
for ( int i = channels(); i--; )
|
||||||
|
{
|
||||||
jack_ringbuffer_free( _rb[ i ] );
|
jack_ringbuffer_free( _rb[ i ] );
|
||||||
|
_rb[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// timeline->unlock();
|
// timeline->unlock();
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,8 @@ Record_DS::disk_thread ( void )
|
||||||
sample_t *buf = buffer_alloc( nframes * channels() * _disk_io_blocks );
|
sample_t *buf = buffer_alloc( nframes * channels() * _disk_io_blocks );
|
||||||
sample_t *cbuf = buffer_alloc( nframes );
|
sample_t *cbuf = buffer_alloc( nframes );
|
||||||
|
|
||||||
|
_recording = true;
|
||||||
|
|
||||||
// const size_t block_size = nframes * sizeof( sample_t );
|
// const size_t block_size = nframes * sizeof( sample_t );
|
||||||
|
|
||||||
nframes_t frames_read = 0;
|
nframes_t frames_read = 0;
|
||||||
|
@ -242,6 +244,7 @@ again:
|
||||||
flush();
|
flush();
|
||||||
|
|
||||||
_terminate = false;
|
_terminate = false;
|
||||||
|
_recording = false;
|
||||||
|
|
||||||
DMESSAGE( "capture thread gone" );
|
DMESSAGE( "capture thread gone" );
|
||||||
|
|
||||||
|
@ -267,14 +270,11 @@ Record_DS::start ( nframes_t frame, nframes_t start_frame, nframes_t stop_frame
|
||||||
DMESSAGE( "recording started at frame %lu", (unsigned long)frame);
|
DMESSAGE( "recording started at frame %lu", (unsigned long)frame);
|
||||||
|
|
||||||
_frame = start_frame;
|
_frame = start_frame;
|
||||||
_stop_frame = stop_frame;
|
_stop_frame = stop_frame ? stop_frame : JACK_MAX_FRAMES;
|
||||||
|
|
||||||
_first_frame = frame;
|
_first_frame = frame;
|
||||||
|
|
||||||
run();
|
run();
|
||||||
|
|
||||||
_recording = true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** finalize the recording process. */
|
/** finalize the recording process. */
|
||||||
|
@ -289,10 +289,11 @@ Record_DS::stop ( nframes_t frame )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_recording = false;
|
|
||||||
|
|
||||||
_stop_frame = frame;
|
_stop_frame = frame;
|
||||||
|
|
||||||
|
// _recording = false;
|
||||||
|
|
||||||
|
|
||||||
// detach();
|
// detach();
|
||||||
|
|
||||||
DMESSAGE( "recording finished" );
|
DMESSAGE( "recording finished" );
|
||||||
|
@ -308,7 +309,7 @@ Record_DS::process ( nframes_t nframes )
|
||||||
{
|
{
|
||||||
THREAD_ASSERT( RT );
|
THREAD_ASSERT( RT );
|
||||||
|
|
||||||
if ( ! _recording )
|
if ( ! ( _recording && _thread.running() ) )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* if ( transport->frame < _frame ) */
|
/* if ( transport->frame < _frame ) */
|
||||||
|
@ -340,13 +341,19 @@ Record_DS::process ( nframes_t nframes )
|
||||||
|
|
||||||
if ( engine->freewheeling() )
|
if ( engine->freewheeling() )
|
||||||
{
|
{
|
||||||
while ( transport->recording && jack_ringbuffer_write_space( _rb[i] ) < block_size )
|
while ( _thread.running() && jack_ringbuffer_write_space( _rb[i] ) < block_size )
|
||||||
usleep( 10 * 1000 );
|
usleep( 10 * 1000 );
|
||||||
|
|
||||||
|
if ( ! _thread.running() )
|
||||||
|
return 0;
|
||||||
|
|
||||||
jack_ringbuffer_write( _rb[ i ], ((char*)buf) + offset_size, block_size );
|
jack_ringbuffer_write( _rb[ i ], ((char*)buf) + offset_size, block_size );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if ( ! _thread.running() )
|
||||||
|
return 0;
|
||||||
|
|
||||||
if ( jack_ringbuffer_write_space( _rb[i] ) < block_size )
|
if ( jack_ringbuffer_write_space( _rb[i] ) < block_size )
|
||||||
{
|
{
|
||||||
memset( buf, 0, block_size );
|
memset( buf, 0, block_size );
|
||||||
|
|
|
@ -57,7 +57,7 @@ public:
|
||||||
|
|
||||||
_capture = NULL;
|
_capture = NULL;
|
||||||
_recording = false;
|
_recording = false;
|
||||||
_stop_frame = 0;
|
_stop_frame = JACK_MAX_FRAMES;
|
||||||
_frames_written = 0;
|
_frames_written = 0;
|
||||||
_first_frame = 0;
|
_first_frame = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue