2 This patch should fix the logic error in checking for the MaxWaitTime of
3 a job in src/dird/job.c. It fixes bug #802.
5 Apply it to Bacula version 2.0.3 with:
8 patch -p0 <2.0.3-maxwaittime.patch
16 ===================================================================
17 --- src/dird/job.c (revision 4349)
18 +++ src/dird/job.c (working copy)
20 static bool job_check_maxwaittime(JCR *control_jcr, JCR *jcr)
23 - bool ok_to_cancel = false;
26 if (job_canceled(jcr)) {
29 if (jcr->JobLevel == L_FULL && job->FullMaxWaitTime != 0 &&
30 (watchdog_time - jcr->start_time) >= job->FullMaxWaitTime) {
31 - ok_to_cancel = true;
33 } else if (jcr->JobLevel == L_DIFFERENTIAL && job->DiffMaxWaitTime != 0 &&
34 (watchdog_time - jcr->start_time) >= job->DiffMaxWaitTime) {
35 - ok_to_cancel = true;
37 } else if (jcr->JobLevel == L_INCREMENTAL && job->IncMaxWaitTime != 0 &&
38 (watchdog_time - jcr->start_time) >= job->IncMaxWaitTime) {
39 - ok_to_cancel = true;
41 } else if (job->MaxWaitTime != 0 &&
42 (watchdog_time - jcr->start_time) >= job->MaxWaitTime) {
43 - ok_to_cancel = true;
45 - if (!ok_to_cancel) {
50 - * I don't see the need for all this -- kes 17Dec06
53 - Dmsg3(800, "Job %d (%s): MaxWaitTime of %d seconds exceeded, "
54 - "checking status\n",
55 - jcr->JobId, jcr->Job, job->MaxWaitTime);
56 - switch (jcr->JobStatus) {
61 - case JS_WaitStoreRes:
62 - case JS_WaitClientRes:
64 - case JS_WaitPriority:
65 - case JS_WaitMaxJobs:
66 - case JS_WaitStartTime:
68 - Dmsg0(200, "JCR blocked in #1\n");
71 - Dmsg0(800, "JCR running, checking SD status\n");
72 - switch (jcr->SDJobStatus) {
77 - Dmsg0(800, "JCR blocked in #2\n");
80 - Dmsg0(800, "JCR not blocked in #2\n");
85 - case JS_ErrorTerminated:
88 - Dmsg0(800, "JCR already dead in #3\n");
91 - Jmsg1(jcr, M_ERROR, 0, _("Unhandled job status code %d\n"),
94 - Dmsg3(800, "MaxWaitTime result: %scancel JCR %p (%s)\n",
95 - cancel ? "" : "do not ", jcr, jcr->Job);
106 - switch (jcr->JobStatus) {
112 - case JS_WaitStoreRes:
113 - case JS_WaitClientRes:
114 - case JS_WaitJobRes:
115 - case JS_WaitPriority:
116 - case JS_WaitMaxJobs:
117 - case JS_WaitStartTime:
118 - case JS_Differences:
121 - case JS_Terminated:
122 - case JS_ErrorTerminated:
124 - case JS_FatalError:
128 - Jmsg1(jcr, M_ERROR, 0, _("Unhandled job status code %d\n"),
132 - Dmsg3(200, "MaxRunTime result: %scancel JCR %p (%s)\n",
133 - cancel ? "" : "do not ", jcr, jcr->Job);