*/
DCR *new_dcr(JCR *jcr, DEVICE *dev)
{
- if (jcr && jcr->dcr) {
- return jcr->dcr;
- }
DCR *dcr = (DCR *)malloc(sizeof(DCR));
memset(dcr, 0, sizeof(DCR));
dcr->jcr = jcr;
if (dev) {
- if (jcr) {
- jcr->dcr = dcr;
- }
dcr->dev = dev;
dcr->device = dev->device;
dcr->block = new_block(dev);
goto default_path;
}
-#ifdef xxx_needed
- /* If we have a dvd that requires mount,
- * we need to try to open the label, so the info can be reported
- * if a wrong volume has been mounted.
- */
- if (dev->is_dvd() && (dcr->VolCatInfo.VolCatParts > 0)) {
- break;
- }
-#endif
-
Jmsg3(jcr, M_FATAL, 0, _("Open device %s Volume \"%s\" failed: ERR=%s\n"),
dev->print_name(), dcr->VolumeName, strerror_dev(dev));
goto get_out;
get_out:
dev->unblock();
if (!vol_ok) {
- free_dcr(dcr);
dcr = NULL;
}
return dcr;
JCR *jcr = dcr->jcr;
DEVICE *dev = dcr->dev;
bool ok = true;
+ bool was_reading = false;
lock_device(dev);
Dmsg1(100, "release_device device is %s\n", dev->is_tape()?"tape":"disk");
if (dev->can_read()) {
dev->clear_read(); /* clear read bit */
+ was_reading = true;
/******FIXME**** send read volume usage statistics to director */
}
unlock_device(dev);
free_dcr(dcr);
- jcr->dcr = NULL;
+ if (was_reading) {
+ jcr->read_dcr = NULL;
+ } else {
+ jcr->dcr = NULL;
+ }
pthread_cond_broadcast(&wait_device_release);
return ok;
}