File indexing completed on 2024-04-21 04:01:29
0001 /* -*- C++ -*- 0002 This file implements the WorkingHardState class. 0003 0004 SPDX-FileCopyrightText: 2005-2013 Mirko Boehm <mirko@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 0008 $Id: WorkingHardState.cpp 30 2005-08-16 16:16:04Z mirko $ 0009 */ 0010 0011 #include "workinghardstate.h" 0012 0013 #include "debuggingaids.h" 0014 #include "job.h" 0015 #include "thread.h" 0016 #include "threadweaver.h" 0017 0018 namespace ThreadWeaver 0019 { 0020 void WorkingHardState::activated() 0021 { 0022 weaver()->reschedule(); 0023 } 0024 0025 WorkingHardState::WorkingHardState(Weaver *weaver) 0026 : WeaverImplState(weaver) 0027 { 0028 } 0029 0030 void WorkingHardState::suspend() 0031 { 0032 weaver()->setState(Suspending); 0033 } 0034 0035 void WorkingHardState::resume() 0036 { 0037 } 0038 0039 JobPointer WorkingHardState::applyForWork(Thread *th, bool wasBusy) 0040 { 0041 // beware: this code is executed in the applying thread! 0042 TWDEBUG(2, "WorkingHardState::applyForWork: thread %i applies for work in %s state.\n", th->id(), qPrintable(weaver()->state()->stateName())); 0043 JobPointer next = weaver()->takeFirstAvailableJobOrSuspendOrWait(th, wasBusy, false, false); 0044 if (next) { 0045 return next; 0046 } else { 0047 // this is no infinite recursion: the state may have changed meanwhile, or jobs may have become available: 0048 TWDEBUG(2, "WorkingHardState::applyForWork: repeating for thread %i in %s state.\n", th->id(), qPrintable(weaver()->state()->stateName())); 0049 return weaver()->applyForWork(th, false); 0050 } 0051 } 0052 0053 StateId WorkingHardState::stateId() const 0054 { 0055 return WorkingHard; 0056 } 0057 0058 }