]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/job.c
Restore win32 dir from Branch-5.2 and update it
[bacula/bacula] / bacula / src / dird / job.c
index a48806c4d3ba04128b9de6f7b579597c29d42ccd..c3833ec6577b2b5a3fe3bd166362b0a7e9898ab2 100644 (file)
@@ -680,8 +680,14 @@ cancel_job(UAContext *ua, JCR *jcr, int wait,  bool cancel)
    int status;
    const char *reason, *cmd;
 
-   Dmsg3(10, "cancel_job jcr=%p jobid=%d use_count\n", jcr, jcr->JobId, jcr->use_count());
-
+   if (!cancel) {               /* stop the job */
+      if (!jcr->can_be_stopped()) {
+         ua->error_msg(_("Cannot stop JobId %s, Job %s is not a regular Backup Job\n"),
+                       edit_uint64(jcr->JobId, ed1), jcr->Job);
+         return true;
+      }
+   }
+   
    if (cancel) {
       status = JS_Canceled;
       reason = _("canceled");
@@ -1059,6 +1065,7 @@ bool allow_duplicate_job(JCR *jcr)
              djcr->getJobType() == 'B' && jcr->getJobType() == 'B') {
             switch (jcr->getJobLevel()) {
             case L_FULL:
+            case L_VIRTUAL_FULL:
                if (djcr->getJobLevel() == L_DIFFERENTIAL ||
                    djcr->getJobLevel() == L_INCREMENTAL) {
                   cancel_dup = true;
@@ -1212,6 +1219,17 @@ void apply_pool_overrides(JCR *jcr)
          }
       }
       break;
+      case L_VIRTUAL_FULL:
+         if (jcr->vfull_pool) {
+            jcr->pool = jcr->vfull_pool;
+            pool_override = true;
+            if (jcr->run_vfull_pool_override) {
+               pm_strcpy(jcr->pool_source, _("Run VFullPool override"));
+            } else {
+               pm_strcpy(jcr->pool_source, _("Job VFullPool override"));
+            }
+         }
+         break;
    case L_INCREMENTAL:
       if (jcr->inc_pool) {
          jcr->pool = jcr->inc_pool;
@@ -1447,6 +1465,10 @@ void dird_free_jcr(JCR *jcr)
    Dmsg0(200, "Start dird free_jcr\n");
 
    dird_free_jcr_pointers(jcr);
+   if (jcr->bsr_list) {
+      free_bsr(jcr->bsr_list);
+      jcr->bsr_list = NULL;
+   }
    if (jcr->wjcr) {
       free_jcr(jcr->wjcr);
       jcr->wjcr = NULL;
@@ -1587,6 +1609,7 @@ void set_jcr_defaults(JCR *jcr, JOB *job)
       pm_strcpy(jcr->next_pool_source, _("Job Pool's NextPool resource"));
    }
    jcr->full_pool = job->full_pool;
+   jcr->vfull_pool = job->vfull_pool;
    jcr->inc_pool = job->inc_pool;
    jcr->diff_pool = job->diff_pool;
    if (job->pool->catalog) {
@@ -1603,11 +1626,8 @@ void set_jcr_defaults(JCR *jcr, JOB *job)
    jcr->spool_size = job->spool_size;
    jcr->write_part_after_job = job->write_part_after_job;
    jcr->MaxRunSchedTime = job->MaxRunSchedTime;
-   if (jcr->RestoreBootstrap) {
-      free(jcr->RestoreBootstrap);
-      jcr->RestoreBootstrap = NULL;
-   }
    /* This can be overridden by Console program */
+   bfree_and_null(jcr->RestoreBootstrap);
    if (job->RestoreBootstrap) {
       jcr->RestoreBootstrap = bstrdup(job->RestoreBootstrap);
    }