Changeset d76161


Ignore:
Timestamp:
Jul 2, 2012, 7:54:13 AM (12 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:
3eb035
Parents:
bc1625
git-author:
Frederik Heber <heber@…> (04/24/12 10:36:30)
git-committer:
Frederik Heber <heber@…> (07/02/12 07:54:13)
Message:

FIX: Removed channel JobRemoved from FragmentQueue as it may cause cyclic updates in FragmentScheduler.

  • An update is triggered, when a job is popped from the queue. If a new job has just been pushed and a worker is free to pick it up, the callback function is used to do this. If we trigger an update by popping a job, even if it's now a JobRemoved, not JobAdded, all notifications will again call notifyAll() and the same notification will be triggered twice.
Location:
src/Fragmentation/Automation
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Automation/FragmentQueue.cpp

    rbc1625 rd76161  
    105105FragmentJob::ptr FragmentQueue::popJob()
    106106{
    107   OBSERVE;
    108   NOTIFY(JobRemoved);
    109107  ASSERT(jobs.size(),
    110108      "FragmentQueue::popJob() - there are no jobs on the queue.");
  • src/Fragmentation/Automation/FragmentQueue.hpp

    rbc1625 rd76161  
    3737  ~FragmentQueue();
    3838
     39  /** Channels for this observable.
     40   *
     41   * \note Be especially cautious of cyclic updates here as the updates are
     42   *       used by \ref FragmentScheduler to send new jobs to idle workers!
     43   *       If e.g. JobRemoved is added, then the popping of the job inside
     44   *       the callback will cause a cycle in the update, as the notification
     45   *       for JobAdded is not yet removed because we are still inside the
     46   *       callback!
     47   */
    3948  enum NotificationType {
    4049    JobAdded,
    41     JobRemoved,
    4250    NotificationType_MAX  // denotes the maximum of available notification types
    4351  };
  • src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp

    rbc1625 rd76161  
    5151  queue = new FragmentQueue();
    5252  addobserver = new NotificationObserver(queue->getChannel(FragmentQueue::JobAdded));
    53   removeobserver = new NotificationObserver(queue->getChannel(FragmentQueue::JobRemoved));
    5453
    5554  // and sign on
    5655  queue->signOn(addobserver, FragmentQueue::JobAdded);
    57   queue->signOn(removeobserver, FragmentQueue::JobRemoved);
    5856}
    5957
     
    6260{
    6361  queue->signOff(addobserver, FragmentQueue::JobAdded);
    64   queue->signOff(removeobserver, FragmentQueue::JobRemoved);
    6562
    6663  delete queue;
    67   delete removeobserver;
    6864  delete addobserver;
    6965}
     
    9086#endif
    9187  CPPUNIT_ASSERT( addobserver->wasNotified );
    92   CPPUNIT_ASSERT( !removeobserver->wasNotified );
    9388  addobserver->wasNotified = false;
    9489
     
    118113#endif
    119114  CPPUNIT_ASSERT( !addobserver->wasNotified );
    120   CPPUNIT_ASSERT( removeobserver->wasNotified );
    121115  CPPUNIT_ASSERT( poppedJob == testJob );
    122116
  • src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.hpp

    rbc1625 rd76161  
    4444      FragmentQueue *queue;
    4545      NotificationObserver *addobserver;
    46       NotificationObserver *removeobserver;
    4746};
    4847
Note: See TracChangeset for help on using the changeset viewer.