diff --git a/common/JackTransportEngine.cpp b/common/JackTransportEngine.cpp index 13a25b20..a2a2b3f4 100644 --- a/common/JackTransportEngine.cpp +++ b/common/JackTransportEngine.cpp @@ -116,14 +116,27 @@ void JackTransportEngine::MakeAllStopping(JackClientInterface** table) for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { JackClientInterface* client = table[i]; if (client) { + client->GetClientControl()->fTransportState = JackTransportStopped; client->GetClientControl()->fTransportSync = false; client->GetClientControl()->fTransportTimebase = false; - client->GetClientControl()->fTransportState = JackTransportStopped; jack_log("MakeAllStopping ref = %ld", i); } } } +// RT +void JackTransportEngine::MakeAllLocating(JackClientInterface** table) +{ + for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { + JackClientInterface* client = table[i]; + if (client) { + client->GetClientControl()->fTransportState = JackTransportStopped; + client->GetClientControl()->fTransportTimebase = true; + jack_log("MakeAllLocating ref = %ld", i); + } + } +} + // RT void JackTransportEngine::CycleBegin(jack_nframes_t frame_rate, jack_time_t time) // really needed?? (would be done in CycleEnd...) { @@ -157,7 +170,10 @@ void JackTransportEngine::CycleEnd(JackClientInterface** table, jack_nframes_t f fTransportState = JackTransportStarting; MakeAllStartingLocating(table); SyncTimeout(frame_rate, buffer_size); - } + } else if (fPendingPos) { + jack_log("transport stopped ==> stopped (locating)"); + MakeAllLocating(table); + } break; case JackTransportStarting: diff --git a/common/JackTransportEngine.h b/common/JackTransportEngine.h index 76e002e3..3c8288fb 100644 --- a/common/JackTransportEngine.h +++ b/common/JackTransportEngine.h @@ -106,6 +106,7 @@ class JackTransportEngine : public JackAtomicArrayState void MakeAllStartingLocating(JackClientInterface** table); void MakeAllStopping(JackClientInterface** table); + void MakeAllLocating(JackClientInterface** table); void SyncTimeout(jack_nframes_t frame_rate, jack_nframes_t buffer_size);