2 ===================================================================
3 --- src/dird/job.c (révision 4696)
4 +++ src/dird/job.c (copie de travail)
6 if (job_canceled(jcr)) {
7 return false; /* already canceled */
9 + if (!job_waiting(jcr)) {
12 if (job->MaxWaitTime == 0 && job->FullMaxWaitTime == 0 &&
13 job->IncMaxWaitTime == 0 && job->DiffMaxWaitTime == 0) {
16 if (jcr->JobLevel == L_FULL && job->FullMaxWaitTime != 0 &&
17 - (watchdog_time - jcr->start_time) >= job->FullMaxWaitTime) {
18 + (watchdog_time - jcr->wait_time) >= job->FullMaxWaitTime) {
20 } else if (jcr->JobLevel == L_DIFFERENTIAL && job->DiffMaxWaitTime != 0 &&
21 - (watchdog_time - jcr->start_time) >= job->DiffMaxWaitTime) {
22 + (watchdog_time - jcr->wait_time) >= job->DiffMaxWaitTime) {
24 } else if (jcr->JobLevel == L_INCREMENTAL && job->IncMaxWaitTime != 0 &&
25 - (watchdog_time - jcr->start_time) >= job->IncMaxWaitTime) {
26 + (watchdog_time - jcr->wait_time) >= job->IncMaxWaitTime) {
28 } else if (job->MaxWaitTime != 0 &&
29 - (watchdog_time - jcr->start_time) >= job->MaxWaitTime) {
30 + (watchdog_time - jcr->wait_time) >= job->MaxWaitTime) {
35 ===================================================================
36 --- src/jcr.h (révision 4696)
37 +++ src/jcr.h (copie de travail)
39 jcr->JobStatus == JS_ErrorTerminated || \
40 jcr->JobStatus == JS_FatalError)
42 +#define job_waiting(jcr) \
43 + (jcr->JobStatus == JS_WaitFD || \
44 + jcr->JobStatus == JS_WaitSD || \
45 + jcr->JobStatus == JS_WaitMedia || \
46 + jcr->JobStatus == JS_WaitMount || \
47 + jcr->JobStatus == JS_WaitStoreRes || \
48 + jcr->JobStatus == JS_WaitJobRes || \
49 + jcr->JobStatus == JS_WaitClientRes|| \
50 + jcr->JobStatus == JS_WaitMaxJobs || \
51 + jcr->JobStatus == JS_WaitPriority)
54 #define foreach_jcr(jcr) \
55 for (jcr=jcr_walk_start(); jcr; (jcr=jcr_walk_next(jcr)) )
58 time_t start_time; /* when job actually started */
59 time_t run_time; /* used for computing speed */
60 time_t end_time; /* job end time */
61 + time_t wait_time; /* when job have started to wait */
62 POOLMEM *client_name; /* client name */
63 POOLMEM *RestoreBootstrap; /* Bootstrap file to restore */
64 POOLMEM *stime; /* start time for incremental/differential */
66 ===================================================================
67 --- src/lib/jcr.c (révision 4696)
68 +++ src/lib/jcr.c (copie de travail)
71 void set_jcr_job_status(JCR *jcr, int JobStatus)
73 + bool set_waittime=false;
75 + /* if wait state is new, we keep current time for watchdog MaxWaitTime */
76 + switch (JobStatus) {
81 + case JS_WaitStoreRes:
83 + case JS_WaitClientRes:
84 + case JS_WaitMaxJobs:
85 + case JS_WaitPriority:
86 + set_waittime = true;
91 + switch (jcr->JobStatus) {
93 * For a set of errors, ... keep the current status
94 * so it isn't lost. For all others, set it.
96 - switch (jcr->JobStatus) {
97 case JS_ErrorTerminated:
104 + * For a set of Wait situation, keep old time.
110 + case JS_WaitStoreRes:
111 + case JS_WaitJobRes:
112 + case JS_WaitClientRes:
113 + case JS_WaitMaxJobs:
114 + case JS_WaitPriority:
115 + set_waittime = false; /* keep old time */
117 + if (set_waittime) {
118 + /* set it before JobStatus */
119 + jcr->wait_time = time(NULL);
121 jcr->JobStatus = JobStatus;