Jack2 1.9.6
|
00001 /* 00002 Copyright (C) 2001 Paul Davis 00003 Copyright (C) 2004-2008 Grame 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00018 00019 */ 00020 00021 #include "JackSystemDeps.h" 00022 #include "JackFreewheelDriver.h" 00023 #include "JackEngineControl.h" 00024 #include "JackLockedEngine.h" 00025 00026 namespace Jack 00027 { 00028 00029 int JackFreewheelDriver::Process() 00030 { 00031 if (fIsMaster) { 00032 jack_log("JackFreewheelDriver::Process master %lld", fEngineControl->fTimeOutUsecs); 00033 JackDriver::CycleTakeBeginTime(); 00034 fEngine->Process(fBeginDateUst, fEndDateUst); 00035 fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); // Signal all clients 00036 if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, FREEWHEEL_DRIVER_TIMEOUT * 1000000) < 0) { // Wait for all clients to finish for 10 sec 00037 jack_error("JackFreewheelDriver::ProcessSync SuspendRefNum error"); 00038 /* We have a client time-out error, but still continue to process, until a better recovery strategy is chosen */ 00039 return 0; 00040 } 00041 } else { 00042 fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); // Signal all clients 00043 if (fEngineControl->fSyncMode) { 00044 if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, DRIVER_TIMEOUT_FACTOR * fEngineControl->fTimeOutUsecs) < 0) { 00045 jack_error("JackFreewheelDriver::ProcessSync SuspendRefNum error"); 00046 return -1; 00047 } 00048 } 00049 } 00050 return 0; 00051 } 00052 00053 } // end of namespace