]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/autochanger.c
Add %D option to edit_job_code, simplify callbacks on director side
[bacula/bacula] / bacula / src / stored / autochanger.c
index b32656e8e7a904e6b88d8c8497c03a02bde33eab..3d38739f44f7fabe0455006d4791d7f9d964d2a5 100644 (file)
@@ -405,10 +405,14 @@ bool unload_autochanger(DCR *dcr, int loaded)
          dev->set_slot(0);         /* nothing loaded */
       }
 
-      free_volume(dev);            /* Free any volume associated with this drive */
       free_pool_memory(changer);
    }
    unlock_changer(dcr);
+
+   if (loaded > 0) {           /* free_volume outside from changer lock */
+      free_volume(dev);        /* Free any volume associated with this drive */
+   }
+
    if (ok) {
       dev->clear_unload();
    }
@@ -556,7 +560,6 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd)
    POOLMEM *changer;
    BPIPE *bpipe;
    int len = sizeof_pool_memory(dir->msg) - 1;
-   bool ok = false;
    int stat;
 
    if (!dev->is_autochanger() || !dcr->device->changer_name ||
@@ -589,7 +592,7 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd)
    bpipe = open_bpipe(changer, timeout, "r");
    if (!bpipe) {
       dir->fsend(_("3996 Open bpipe failed.\n"));
-      goto bail_out;
+      goto bail_out;            /* TODO: check if we need to return false */
    }
    if (bstrcmp(cmd, "list") || bstrcmp(cmd, "listall")) {
       /* Get output from changer */
@@ -618,7 +621,6 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd)
       dir->fsend(_("Autochanger error: ERR=%s\n"), be.bstrerror());
    }
    bnet_sig(dir, BNET_EOD);
-   ok = true;
 
 bail_out:
    unlock_changer(dcr);