#include "bacula.h" /* pull in global headers */
#include "stored.h" /* pull in Storage Deamon headers */
-
enum {
try_next_vol = 1,
try_read_vol,
dev->print_name());
init_device_wait_timers(dcr);
- lock_volumes();
/*
* Attempt to mount the next volume. If something non-fatal goes
* wrong, we come back here to re-try (new op messages, re-read
* Volume, ...)
*/
+ lock_volumes();
+
mount_next_vol:
Dmsg1(150, "mount_next_vol retry=%d\n", retry);
/* Ignore retry if this is poll request */
* This routine is meant to be called once the first pass
* to ensure that we have a candidate volume to mount.
* Otherwise, we ask the sysop to created one.
- * Note, the the Volumes are locked on entry.
- * They are unlocked on failure and remain locked on
- * success. The caller must know this!!!
+ * Note, the the Volumes are locked on entry and exit.
*/
-bool DCR::find_a_volume()
+bool DCR::find_a_volume()
{
DCR *dcr = this;
+
if (!is_suitable_volume_mounted()) {
bool have_vol = false;
/* Do we have a candidate volume? */
while (!dir_find_next_appendable_volume(dcr)) {
Dmsg0(200, "not dir_find_next\n");
if (job_canceled(jcr)) {
- unlock_volumes();
return false;
}
unlock_volumes();
return false;
}
lock_volumes();
+ if (job_canceled(jcr)) {
+ return false;
+ }
Dmsg0(150, "Again dir_find_next_append...\n");
}
}