commit 9ddecaa80c15d1abd89f29c9185a464103d9d5aa Author: Kern Sibbald Date: Fri Oct 16 07:50:48 2009 +0200 Fix switching read device reported by Nicolae Mihalache diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index b2bf07e..7042440 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -63,7 +63,8 @@ bool acquire_device_for_read(DCR *dcr) int vol_label_status; int retry = 0; - Dmsg1(950, "jcr->dcr=%p\n", jcr->dcr); + Dmsg2(950, "dcr=%p dev=%p\n", dcr, dcr->dev); + Dmsg2(950, "MediaType dcr=%s dev=%s\n", dcr->media_type, dev->device->media_type); dev->dblock(BST_DOING_ACQUIRE); if (dev->num_writers > 0) { @@ -123,6 +124,7 @@ bool acquire_device_for_read(DCR *dcr) lock_reservations(); memset(&rctx, 0, sizeof(RCTX)); rctx.jcr = jcr; + jcr->read_dcr = dcr; jcr->reserve_msgs = New(alist(10, not_owned_by_alist)); rctx.any_drive = true; rctx.device_name = vol->device; @@ -166,6 +168,7 @@ bool acquire_device_for_read(DCR *dcr) goto get_out; } } + Dmsg2(400, "MediaType dcr=%s dev=%s\n", dcr->media_type, dev->device->media_type); dev->clear_unload(); @@ -329,7 +332,8 @@ get_out: } else { dev->dunlock(); /* dunblock() unlock the device too */ } - Dmsg1(950, "jcr->dcr=%p\n", jcr->dcr); + Dmsg2(950, "dcr=%p dev=%p\n", dcr, dcr->dev); + Dmsg2(950, "MediaType dcr=%s dev=%s\n", dcr->media_type, dev->device->media_type); return ok; } diff --git a/bacula/src/stored/reserve.c b/bacula/src/stored/reserve.c index a4fe70c..6824d16 100644 --- a/bacula/src/stored/reserve.c +++ b/bacula/src/stored/reserve.c @@ -634,7 +634,11 @@ static int reserve_device(RCTX &rctx) rctx.suitable_device = true; Dmsg1(dbglvl, "try reserve %s\n", rctx.device->hdr.name); - dcr = new_dcr(rctx.jcr, rctx.jcr->dcr, rctx.device->dev); + if (rctx.store->append) { + dcr = new_dcr(rctx.jcr, rctx.jcr->dcr, rctx.device->dev); + } else { + dcr = new_dcr(rctx.jcr, rctx.jcr->read_dcr, rctx.device->dev); + } if (!dcr) { BSOCK *dir = rctx.jcr->dir_bsock; dir->fsend(_("3926 Could not get dcr for device: %s\n"), rctx.device_name);