fixed lockup and renamed constant

git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@449 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Tobias Doerffel
2006-12-28 19:08:19 +00:00
parent 85bc1d5452
commit f68d4e4b62
12 changed files with 52 additions and 29 deletions

View File

@@ -1,3 +1,22 @@
2006-12-28 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* src/tracks/instrument_track.cpp:
before calling mixer::addPlayHandle(), unlock m_notesMutex as in some
cases (when running into xruns)
instrumentTrack::deleteNotePluginData() is called while the mutex is
locked and the program was frozen
* include/track.h:
* plugins/flp_import/flp_import.cpp:
* plugins/midi_import/midi_import.cpp:
* src/core/file_browser.cpp:
* src/core/preset_preview_play_handle.cpp:
* src/core/song_editor.cpp:
* src/core/track.cpp:
* src/core/track_container.cpp:
* src/tracks/instrument_track.cpp:
changed name of constant CHANNEL_TRACK to INSTRUMENT_TRACK
2006-12-24 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* plugins/kicker/kicker.cpp:
@@ -2522,7 +2541,7 @@
* plugins/flp_import/flp_import.cpp:
improvements for having a working flp-filter as soon as possible
2005-03-28 Danny McRae <khjklujn/at/yahoo/dot/com>
2006-03-28 Danny McRae <khjklujn/at/yahoo/dot/com>
* src/lib/sample_buffer.cpp:
corrected miscalculation of buffer size in resample
@@ -2549,7 +2568,7 @@
support for default-velocity for MIDI-in and/or -out-events - useful
when recording with constant velocity
2005-03-26 Danny McRae <khjklujn/at/yahoo/dot/com>
2006-03-26 Danny McRae <khjklujn/at/yahoo/dot/com>
* plugins/vibed/:
added "Vibed"-plugin, a powerful combination of PluckedStringSynth and

5
TODO
View File

@@ -1,6 +1,6 @@
- select number of channels in export-project-dialog
- MIDI over Ethernet support
- lock m_instrument in instrumentTrack-class for not crashing when using m_instrument in notePlayHandle::supportsParallelizing() while instrument is being deleted or so
- lock m_instrument in instrumentTrack-class for not crashing when using m_instrument in notePlayHandle::supportsParallelizing() while instrument is being deleted or so - toby 061228: already fixed on 061218?
- try to make vestige-plugin-dlls relative
- do song-editor-tempo-connection to vst-plugin inside remoteVSTPlugin
- add/remove-steps button in bb-editor for adding/removing according number of steps to/from all patterns of visible beat/baseline
@@ -23,7 +23,6 @@
- AMS/OMS-bindings
- remove binary-embed-system
- recording-functionality
- show loading-vst-hint when cloning vestige-track
- do not hang when saving while loading VST-plugin (because then we call dispatcher while the load-process is still going on)
- tempo-recogn. and sync of beat-samples
- do not quantize when importing from MIDI-file
@@ -40,10 +39,8 @@
- pre-listen when opening sample with QFileDialog
- panning-editing in piano-roll
- speed up painting of sampleTCO
- solve problems with different keyboard-layouts when playing channel-track with pc-keyboard -> use tr()
- panning env+lfo
- rewrite export-project-dialog using layout-mechanism
- dynamic pitch-change
- make piano-roll use the global clipboard??
- add more localizations:
- Swedish

View File

@@ -2,8 +2,8 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.50)
AC_INIT(lmms, 0.2.1-svn20061224, lmms-devel/at/lists/dot/sf/dot/net)
AM_INIT_AUTOMAKE(lmms, 0.2.1-svn20061224)
AC_INIT(lmms, 0.2.1-svn20061228, lmms-devel/at/lists/dot/sf/dot/net)
AM_INIT_AUTOMAKE(lmms, 0.2.1-svn20061228)
AM_CONFIG_HEADER(config.h)

View File

@@ -399,7 +399,7 @@ class track : public journallingObject
public:
enum trackTypes
{
CHANNEL_TRACK,
INSTRUMENT_TRACK,
BB_TRACK,
SAMPLE_TRACK,
EVENT_TRACK,

View File

@@ -364,7 +364,7 @@ bool flpImport::tryImport( trackContainer * _tc )
printf( "new channel\n" );
it = dynamic_cast<instrumentTrack *>(
track::create( track::CHANNEL_TRACK, _tc->eng()->getBBEditor() ) );
track::create( track::INSTRUMENT_TRACK, _tc->eng()->getBBEditor() ) );
assert( it != NULL );
i_tracks.push_back( it );
it_inst = it->loadInstrument(

View File

@@ -219,7 +219,7 @@ invalid_format:
// now create new channel-track for reading track
instrumentTrack * ct = dynamic_cast<instrumentTrack *>(
track::create(
track::CHANNEL_TRACK,
track::INSTRUMENT_TRACK,
_tc ) );
#ifdef LMMS_DEBUG
assert( ct != NULL );

View File

@@ -331,7 +331,7 @@ void fileBrowser::openInNewInstrumentTrack( trackContainer * _tc )
if( m_contextMenuItem->type() == fileItem::SAMPLE_FILE )
{
instrumentTrack * ct = dynamic_cast<instrumentTrack *>(
track::create( track::CHANNEL_TRACK, _tc ) );
track::create( track::INSTRUMENT_TRACK, _tc ) );
#ifdef LMMS_DEBUG
assert( ct != NULL );
#endif
@@ -346,7 +346,7 @@ void fileBrowser::openInNewInstrumentTrack( trackContainer * _tc )
else if( m_contextMenuItem->type() == fileItem::PRESET_FILE )
{
multimediaProject mmp( m_contextMenuItem->fullName() );
track * t = track::create( track::CHANNEL_TRACK, _tc );
track * t = track::create( track::INSTRUMENT_TRACK, _tc );
instrumentTrack * ct = dynamic_cast<instrumentTrack *>( t );
if( ct != NULL )
{
@@ -418,7 +418,7 @@ void listView::contentsMouseDoubleClickEvent( QMouseEvent * _me )
// samples are per default opened in bb-editor because
// they're likely drum-samples etc.
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
track::create( track::CHANNEL_TRACK,
track::create( track::INSTRUMENT_TRACK,
eng()->getBBEditor() ) );
#ifdef LMMS_DEBUG
assert( it != NULL );
@@ -436,7 +436,7 @@ void listView::contentsMouseDoubleClickEvent( QMouseEvent * _me )
{
// presets are per default opened in bb-editor
multimediaProject mmp( f->fullName() );
track * t = track::create( track::CHANNEL_TRACK,
track * t = track::create( track::INSTRUMENT_TRACK,
eng()->getBBEditor() );
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
t );

View File

@@ -63,7 +63,7 @@ public:
{
setJournalling( FALSE );
m_previewInstrumentTrack = dynamic_cast<instrumentTrack *>(
track::create( track::CHANNEL_TRACK,
track::create( track::INSTRUMENT_TRACK,
this ) );
m_previewInstrumentTrack->setJournalling( FALSE );
hide();

View File

@@ -1470,11 +1470,11 @@ void songEditor::createNewProject( void )
eng()->getProjectJournal()->setJournalling( FALSE );
track * t;
t = track::create( track::CHANNEL_TRACK, this );
t = track::create( track::INSTRUMENT_TRACK, this );
dynamic_cast< instrumentTrack * >( t )->loadInstrument(
"tripleoscillator" );
track::create( track::SAMPLE_TRACK, this );
t = track::create( track::CHANNEL_TRACK, eng()->getBBEditor() );
t = track::create( track::INSTRUMENT_TRACK, eng()->getBBEditor() );
dynamic_cast< instrumentTrack * >( t )->loadInstrument(
"tripleoscillator" );
track::create( track::BB_TRACK, this );

View File

@@ -1659,7 +1659,7 @@ track * track::create( trackTypes _tt, trackContainer * _tc )
switch( _tt )
{
case CHANNEL_TRACK: t = new instrumentTrack( _tc ); break;
case INSTRUMENT_TRACK: t = new instrumentTrack( _tc ); break;
case BB_TRACK: t = new bbTrack( _tc ); break;
case SAMPLE_TRACK: t = new sampleTrack( _tc ); break;
// case EVENT_TRACK:

View File

@@ -495,7 +495,7 @@ void trackContainer::dragEnterEvent( QDragEnterEvent * _dee )
stringPairDrag::processDragEnterEvent( _dee,
QString( "presetfile,sampledata,samplefile,instrument,midifile,"
"track_%1,track_%2" ).
arg( track::CHANNEL_TRACK ).
arg( track::INSTRUMENT_TRACK ).
arg( track::SAMPLE_TRACK ) );
}
@@ -509,7 +509,7 @@ void trackContainer::dropEvent( QDropEvent * _de )
if( type == "instrument" )
{
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
track::create( track::CHANNEL_TRACK,
track::create( track::INSTRUMENT_TRACK,
this ) );
it->loadInstrument( value );
it->toggledInstrumentTrackButton( TRUE );
@@ -518,7 +518,7 @@ void trackContainer::dropEvent( QDropEvent * _de )
else if( type == "sampledata" || type == "samplefile" )
{
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
track::create( track::CHANNEL_TRACK,
track::create( track::INSTRUMENT_TRACK,
this ) );
instrument * i = it->loadInstrument( "audiofileprocessor" );
i->setParameter( type, value );
@@ -529,7 +529,7 @@ void trackContainer::dropEvent( QDropEvent * _de )
{
multimediaProject mmp( value );
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
track::create( track::CHANNEL_TRACK,
track::create( track::INSTRUMENT_TRACK,
this ) );
it->loadTrackSpecificSettings( mmp.content().firstChild().
toElement() );

View File

@@ -106,8 +106,7 @@ const char * surroundarea_help = QT_TRANSLATE_NOOP( "instrumentTrack",
"feature." );
const int CHANNEL_WIDTH = 250;
const int INSTRUMENT_WIDTH = CHANNEL_WIDTH;
const int INSTRUMENT_WIDTH = 250;
const int INSTRUMENT_HEIGHT = INSTRUMENT_WIDTH;
const int PIANO_HEIGHT = 84;
@@ -116,7 +115,7 @@ instrumentTrack::instrumentTrack( trackContainer * _tc ) :
QWidget( _tc->eng()->getMainWindow()->workspace() ),
track( _tc ),
midiEventProcessor(),
m_trackType( CHANNEL_TRACK ),
m_trackType( INSTRUMENT_TRACK ),
m_midiPort( eng()->getMixer()->getMIDIClient()->addPort( this,
tr( "unnamed_channel" ) ) ),
m_audioPort( new audioPort( tr( "unnamed_channel" ), eng() ) ),
@@ -314,7 +313,7 @@ instrumentTrack::instrumentTrack( trackContainer * _tc ) :
// setup piano-widget
m_pianoWidget = new pianoWidget( this );
m_pianoWidget->setFixedSize( CHANNEL_WIDTH, PIANO_HEIGHT );
m_pianoWidget->setFixedSize( INSTRUMENT_WIDTH, PIANO_HEIGHT );
vlayout->addWidget( m_generalSettingsWidget );
@@ -380,7 +379,7 @@ instrumentTrack::instrumentTrack( trackContainer * _tc ) :
_tc->updateAfterTrackAdd();
#ifndef QT3
setFixedWidth( CHANNEL_WIDTH );
setFixedWidth( INSTRUMENT_WIDTH );
resize( sizeHint() );
#endif
@@ -653,9 +652,17 @@ void instrumentTrack::processInEvent( const midiEvent & _me,
_time.frames(
eng()->framesPerTact64th() ),
valueRanges<f_cnt_t>::max, n );
// as mixer::addPlayHandle() might
// delete note (when running into
// critical XRuns) which will call
// deleteNotePluginData which locks
// this mutex, we have to unlock
// it here temporarily
m_notesMutex.unlock();
if( eng()->getMixer()->addPlayHandle(
nph ) )
{
m_notesMutex.lock();
m_notes[_me.key()] = nph;
}
}
@@ -1299,7 +1306,7 @@ void instrumentTrack::invalidateAllMyNPH( void )
// invalidate all note-play-handles linked to this channel
eng()->getMixer()->checkValidityOfPlayHandles();
m_trackType = CHANNEL_TRACK;
m_trackType = INSTRUMENT_TRACK;
}