Ignore:
Timestamp:
Jul 2, 2012, 7:54:13 AM (13 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
86a1e8
Parents:
d76161
git-author:
Frederik Heber <heber@…> (04/24/12 10:38:54)
git-committer:
Frederik Heber <heber@…> (07/02/12 07:54:13)
Message:

FIX: Removed channel WorkerRemoved in WorkerPool as it may cause cyclic updates in FragmentScheduler.

  • If jobs are already present in the queue and an idle worker arrices, then marking a worker busy will cause an update inside the callback that is used to send the job to the new idle worker. This will trigger the same notification that is not yet removed to be called in notifyAll(). This causes a cycle in the updates.
Location:
src/Fragmentation/Automation/Pool
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Automation/Pool/WorkerPool.cpp

    rd76161 r3eb035  
    154154  Pool_t::iterator iter = pool.find( address );
    155155  if (iter != pool.end()) {
    156     OBSERVE;
    157     NOTIFY(WorkerRemoved);
    158156    Idle_Queue_t::iterator idleiter = getIdleWorker(address);
    159157    if (idleiter != idle_queue.end())
     
    182180void WorkerPool::removeAllWorkers()
    183181{
    184   OBSERVE;
    185   NOTIFY(WorkerRemoved);
    186182  // empty pool and queue
    187183  idle_queue.clear();
  • src/Fragmentation/Automation/Pool/WorkerPool.hpp

    rd76161 r3eb035  
    3939  ~WorkerPool();
    4040
     41  /** Channels for this observable.
     42   *
     43   * \note Be especially cautious of cyclic updates here as the updates are
     44   *       used by \ref FragmentScheduler to send new jobs to idle workers!
     45   *       If e.g. WorkerRemoved is added, then the marking of the one idle
     46   *       worker as now busy inside the callback will cause a cycle in the
     47   *       update, as the notification for WorkerIdle/Added is not yet
     48   *       removed because we are still inside the callback!
     49   */
    4150  enum NotificationType {
    4251    WorkerIdle,
    4352    WorkerAdded,
    44     WorkerRemoved,
    4553    NotificationType_MAX  // denotes the maximum of available notification types
    4654  };
Note: See TracChangeset for help on using the changeset viewer.