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 }