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;
+
+ lock_reservations();
+ jcr->dcr = NULL;
memset(&rctx, 0, sizeof(RCTX));
rctx.jcr = jcr;
jcr->reserve_msgs = New(alist(10, not_owned_by_alist));
*/
stat = search_res_for_device(rctx);
release_msgs(jcr); /* release queued messages */
+ unlock_reservations();
if (stat == 1) {
DCR *new_dcr = jcr->read_dcr;
dev->unblock();
/* 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;
}
}
goto get_out;
}
+ Dmsg2(190, "Output pos=%u:%u\n", dcr->dev->file, dcr->dev->block_num);
}
dev->num_writers++; /* we are now a writer */
}
/* If no more writers, write an EOF */
if (!dev->num_writers && dev->can_write()) {
- weof_dev(dev, 1);
+ dev->weof(1);
write_ansi_ibm_labels(dcr, ANSI_EOF_LABEL, dev->VolHdr.VolumeName);
}
if (!dev->at_weot()) {