Browse Source

For threaded drivers, AcquireRealTime is called after Init step.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2226 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
b6692a61c6
2 changed files with 24 additions and 21 deletions
  1. +1
    -0
      ChangeLog
  2. +23
    -21
      common/JackThreadedDriver.cpp

+ 1
- 0
ChangeLog View File

@@ -24,6 +24,7 @@ Fernando Lopez-Lezcano

* Fix JackMachClientChannel::InternalClientLoad.
* Correct internal client loading.
* For threaded drivers, AcquireRealTime is called after Init step.

2008-04-30 Stephane Letz <letz@grame.fr>


+ 23
- 21
common/JackThreadedDriver.cpp View File

@@ -47,23 +47,14 @@ JackThreadedDriver::~JackThreadedDriver()
int JackThreadedDriver::Start()
{
jack_log("JackThreadedDriver::Start");
int res;

if ((res = fDriver->Start()) < 0) {
if (fDriver->Start() < 0) {
jack_error("Cannot start driver");
return res;
return -1;
}
if ((res = fThread->Start()) < 0) {
if (fThread->Start() < 0) {
jack_error("Cannot start thread");
return res;
}

if (fDriver->IsRealTime()) {
jack_log("JackThreadedDriver::Start IsRealTime");
// Will do "something" on OSX only...
fThread->SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint);
if (fThread->AcquireRealTime(GetEngineControl()->fPriority) < 0)
jack_error("AcquireRealTime error");
return -1;
}

return 0;
@@ -72,23 +63,22 @@ int JackThreadedDriver::Start()
int JackThreadedDriver::Stop()
{
jack_log("JackThreadedDriver::Stop");
int res;
switch (fThread->GetStatus()) {
// Kill the thread in Init phase
case JackThread::kStarting:
if ((res = fThread->Kill()) < 0) {
if (fThread->Kill() < 0) {
jack_error("Cannot kill thread");
return res;
return -1;
}
break;
// Stop when the thread cycle is finished
case JackThread::kRunning:
if ((res = fThread->Stop()) < 0) {
if (fThread->Stop() < 0) {
jack_error("Cannot stop thread");
return res;
return -1;
}
break;
@@ -96,9 +86,9 @@ int JackThreadedDriver::Stop()
break;
}

if ((res = fDriver->Stop()) < 0) {
if (fDriver->Stop() < 0) {
jack_error("Cannot stop driver");
return res;
return -1;
}
return 0;
}
@@ -110,7 +100,18 @@ bool JackThreadedDriver::Execute()

bool JackThreadedDriver::Init()
{
return fDriver->Init();
if (fDriver->Init()) {
if (fDriver->IsRealTime()) {
jack_log("JackThreadedDriver::Init IsRealTime");
// Will do "something" on OSX only...
fThread->SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint);
if (fThread->AcquireRealTime(GetEngineControl()->fPriority) < 0)
jack_error("AcquireRealTime error");
}
return true;
} else {
return false;
}
}

bool JackRestartThreadedDriver::Execute()
@@ -123,6 +124,7 @@ bool JackRestartThreadedDriver::Execute()
} catch (JackDriverException e) {
e.PrintMessage();
jack_log("Driver is restarted");
fThread->DropRealTime();
return Init();
}
return false;


Loading…
Cancel
Save