]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/butil.c
Fix btape for files + more doc
[bacula/bacula] / bacula / src / stored / butil.c
index 68b2b9365fa4ded13838646d960f7580c6e33a4d..4b372fca6e39669e8fa5a59ee2882a1d4a037b24 100644 (file)
@@ -112,8 +112,22 @@ DEVICE *setup_to_access_device(JCR *jcr, int read_access)
    if (read_access) {
       if (!acquire_device_for_read(jcr, dev, block)) {
         Emsg0(M_ERROR, 0, dev->errmsg);
+        free_block(block);
         return NULL;
       }
+   } else {
+      lock_device(dev);
+      if (!(dev->state & ST_OPENED)) {
+         Dmsg0(129, "Opening device.\n");
+        if (open_dev(dev, jcr->VolumeName, READ_WRITE) < 0) {
+            Emsg1(M_FATAL, 0, _("dev open failed: %s\n"), dev->errmsg);
+           unlock_device(dev);
+           free_block(block);
+           return NULL;
+        }
+      }
+      Dmsg1(129, "open_dev %s OK\n", dev_name(dev));
+      unlock_device(dev);
    }
    free_block(block);
    return dev;
@@ -181,6 +195,9 @@ static void my_free_jcr(JCR *jcr)
       free_pool_memory(jcr->dev_name);
       jcr->dev_name = NULL;
    }
+   if (jcr->VolList) {
+      free_vol_list(jcr);
+   }  
      
    return;
 }