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. * Fix JackMachClientChannel::InternalClientLoad.
* Correct internal client loading. * Correct internal client loading.
* For threaded drivers, AcquireRealTime is called after Init step.


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


+ 23
- 21
common/JackThreadedDriver.cpp View File

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


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


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


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


Loading…
Cancel
Save