*: =Dag::_readyQ=: a queue of all jobs that are ready to be submitted (all of their parent nodes have finished, and their PRE scripts, if any, have also finished). *: =Job::_queues[Q_WAITING]=: a list of Job objects (nodes) that this Job is waiting on (Jobs are removed from this queue as they finish). (The Job object also has parents and children queues.) -When DAGMan starts up, the ready queue is empty. =Dag::Bootstrap()= calls =Dag::StartNode()= on all jobs with empty waiting queues. =Dag::StartNode()= either runs the node's PRE script (if there is one) or puts the node into the ready queue. +When DAGMan starts up, the ready queue is empty. =Dag::Bootstrap()= calls =Dag::StartNode()= on all jobs with empty waiting queues. =Dag::StartNode()= either runs the node's PRE script (if there is one) or puts the node into the ready queue. If a job does have a PRE script, and the PRE script succeeds, =Dag::PreScriptReaper()= puts the job into the ready queue. (If the PRE script fails, =Dag::PreScriptReaper()= marks the job as failed, except in special cases.) +Once a job is in the ready queue, it will eventually get submitted by =Dag::SubmitReadyJobs()=, which is called from =condor_event_timer()= in _dagman_main.cpp_; =condor_event_timer()= is called by daemoncore (every 5 seconds by default).