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");
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;
}
}
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;
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;
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) {
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);
}