From 963d926659290f7c3a65b37c50358f9156f39620 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Fri, 6 Sep 2013 19:12:40 -0700 Subject: [PATCH] Timeline: Fix diskstream flushing/shutdown. --- timeline/src/Engine/Disk_Stream.C | 4 +--- timeline/src/Engine/Playback_DS.C | 2 ++ timeline/src/Engine/Playback_DS.H | 2 ++ timeline/src/Engine/Record_DS.C | 2 ++ timeline/src/Engine/Record_DS.H | 4 +++- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/timeline/src/Engine/Disk_Stream.C b/timeline/src/Engine/Disk_Stream.C index 8f36f30..8e8b4c6 100644 --- a/timeline/src/Engine/Disk_Stream.C +++ b/timeline/src/Engine/Disk_Stream.C @@ -77,8 +77,6 @@ Disk_Stream::~Disk_Stream ( ) // timeline->wrlock(); - shutdown(); - _track = NULL; sem_destroy( &_blocks ); @@ -134,7 +132,7 @@ Disk_Stream::shutdown ( void ) while ( _terminate ) { block_processed(); - usleep( 1000 ); + usleep( 10 * 1000 ); } _thread.join(); diff --git a/timeline/src/Engine/Playback_DS.C b/timeline/src/Engine/Playback_DS.C index 6909c98..5c59c8b 100644 --- a/timeline/src/Engine/Playback_DS.C +++ b/timeline/src/Engine/Playback_DS.C @@ -183,6 +183,8 @@ done: free(buf); free(cbuf); +// flush(); + _terminate = false; _thread.exit(); diff --git a/timeline/src/Engine/Playback_DS.H b/timeline/src/Engine/Playback_DS.H index cea5c75..408b9c9 100644 --- a/timeline/src/Engine/Playback_DS.H +++ b/timeline/src/Engine/Playback_DS.H @@ -39,6 +39,8 @@ public: run(); } + virtual ~Playback_DS ( ) { shutdown(); } + bool seek_pending ( void ); void seek ( nframes_t frame ); nframes_t process ( nframes_t nframes ); diff --git a/timeline/src/Engine/Record_DS.C b/timeline/src/Engine/Record_DS.C index 284ee2d..9c26bc7 100644 --- a/timeline/src/Engine/Record_DS.C +++ b/timeline/src/Engine/Record_DS.C @@ -152,6 +152,8 @@ Record_DS::disk_thread ( void ) delete c; + flush(); + _terminate = false; DMESSAGE( "capture thread gone" ); diff --git a/timeline/src/Engine/Record_DS.H b/timeline/src/Engine/Record_DS.H index 278ada7..776a7e0 100644 --- a/timeline/src/Engine/Record_DS.H +++ b/timeline/src/Engine/Record_DS.H @@ -44,7 +44,7 @@ class Record_DS : public Disk_Stream void write_block ( sample_t *buf, nframes_t nframes ); void disk_thread ( void ); - void flush ( void ) { base_flush( false ); } + virtual void flush ( void ) { base_flush( false ); } public: @@ -60,6 +60,8 @@ public: _frames_written = 0; } + virtual ~Record_DS ( ) { shutdown(); } + /* bool seek_pending ( void ); */ /* void seek ( nframes_t frame ); */ const Audio_Region * capture_region ( void ) const;