bool try_autochanger = true;
int i;
int vol_label_status;
+ int retry = 0;
+ Dmsg1(50, "jcr->dcr=%p\n", jcr->dcr);
dev->block(BST_DOING_ACQUIRE);
if (dev->num_writers > 0) {
RCTX rctx;
DIRSTORE *store;
int stat;
+ DCR *dcr_save = jcr->dcr;
+
+ jcr->dcr = NULL;
memset(&rctx, 0, sizeof(RCTX));
rctx.jcr = jcr;
jcr->reserve_msgs = New(alist(10, not_owned_by_alist));
/* error */
Jmsg1(jcr, M_FATAL, 0, _("No suitable device found to read Volume \"%s\"\n"),
vol->VolumeName);
+ jcr->dcr = dcr_save;
goto get_out;
}
+ jcr->dcr = dcr_save;
}
+
init_device_wait_timers(dcr);
tape_previously_mounted = dev->can_read() || dev->can_append() ||
Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg);
}
- for (i=0; i<5; i++) {
+ for ( ;; ) {
+ /* If not polling limit retries */
+ if (!dev->poll && retry++ > 10) {
+ break;
+ }
dev->clear_labeled(); /* force reread of label */
if (job_canceled(jcr)) {
Mmsg1(dev->errmsg, _("Job %d canceled.\n"), jcr->JobId);
tape_initially_mounted = false;
goto default_path;
}
+ /* If polling and got a previous bad name, ignore it */
+ if (dev->poll && strcmp(dev->BadVolName, dev->VolHdr.VolumeName) == 0) {
+ goto default_path;
+ } else {
+ bstrncpy(dev->BadVolName, dev->VolHdr.VolumeName, sizeof(dev->BadVolName));
+ }
/* Fall through */
default:
Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg);
}
V(dev->mutex);
dev->unblock();
+ Dmsg1(50, "jcr->dcr=%p\n", jcr->dcr);
return ok;
}