diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-03-16 04:09:03 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-03-16 04:09:03 +0000 |
commit | bca0450c188cdac82fbc74d05b5d72aff9115646 (patch) | |
tree | 688870950203e270b1dbc9baf975daa4c6d0d56c /libs/ardour/audio_diskstream.cc | |
parent | 0b7a7cba788c20d9554ab8aa5b38bacf16e72ab6 (diff) |
possible fix for crash while adding new tracks
git-svn-id: svn://localhost/ardour2/trunk@1603 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audio_diskstream.cc')
-rw-r--r-- | libs/ardour/audio_diskstream.cc | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 1a117661e3..e72519ef7d 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -36,6 +36,7 @@ #include <pbd/xml++.h> #include <pbd/memento_command.h> #include <pbd/enumwriter.h> +#include <pbd/stacktrace.h> #include <ardour/ardour.h> #include <ardour/audioengine.h> @@ -912,25 +913,25 @@ AudioDiskstream::overwrite_existing_buffers () int AudioDiskstream::seek (nframes_t frame, bool complete_refill) { - Glib::Mutex::Lock lm (state_lock); uint32_t n; int ret; ChannelList::iterator chan; - + Glib::Mutex::Lock lm (state_lock); + for (n = 0, chan = channels.begin(); chan != channels.end(); ++chan, ++n) { (*chan).playback_buf->reset (); (*chan).capture_buf->reset (); } /* can't rec-enable in destructive mode if transport is before start */ - + if (destructive() && record_enabled() && frame < _session.current_start_frame()) { disengage_record_enable (); } - + playback_sample = frame; file_frame = frame; - + if (complete_refill) { while ((ret = do_refill_with_alloc ()) > 0) ; } else { @@ -1065,7 +1066,7 @@ AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, } int -AudioDiskstream::do_refill_with_alloc() +AudioDiskstream::do_refill_with_alloc () { Sample* mix_buf = new Sample[disk_io_chunk_frames]; float* gain_buf = new float[disk_io_chunk_frames]; @@ -1100,7 +1101,6 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) vector.len[1] = 0; channels.front().playback_buf->get_write_vector (&vector); - if ((total_space = vector.len[0] + vector.len[1]) == 0) { return 0; @@ -1833,9 +1833,6 @@ AudioDiskstream::set_state (const XMLNode& node) if (nchans > _n_channels) { - // we need to add new channel infos - //LockMonitor lm (state_lock, __LINE__, __FILE__); - int diff = nchans - channels.size(); for (int i=0; i < diff; ++i) { @@ -1844,9 +1841,6 @@ AudioDiskstream::set_state (const XMLNode& node) } else if (nchans < _n_channels) { - // we need to get rid of channels - //LockMonitor lm (state_lock, __LINE__, __FILE__); - int diff = channels.size() - nchans; for (int i = 0; i < diff; ++i) { |