
 This patch is backported from the development SVN and should fix
 bug #1213, which is a deadlock in the SD when a volume is on the
 wrong drive.

 Apply it to version 2.4.4 with:

 cd <bacula-source>
 patch -p0 <2.4.4-sd-deadlock.patch
 ./configure <your options>
 make
 ...
 make install


Index: src/stored/reserve.c
===================================================================
--- src/stored/reserve.c	(revision 8426)
+++ src/stored/reserve.c	(working copy)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2009 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -498,7 +498,6 @@
 void DCR::unreserve_device()
 {
    lock_volumes();
-   dev->dlock();
    if (is_reserved()) {
       clear_reserved();
       reserved_volume = false;
@@ -514,7 +513,6 @@
          volume_unused(this);
       }
    }
-   dev->dunlock();
    unlock_volumes();
 }
 
Index: src/stored/acquire.c
===================================================================
--- src/stored/acquire.c	(revision 8426)
+++ src/stored/acquire.c	(working copy)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2002-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2002-2009 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -647,8 +647,8 @@
 
    /* Detach this dcr only if attached */
    if (dcr->attached_to_dev && dev) {
+      dev->dlock();
       dcr->unreserve_device();
-      dev->dlock();
       dcr->dev->attached_dcrs->remove(dcr);  /* detach dcr from device */
       dcr->attached_to_dev = false;
 //    remove_dcr_from_dcrs(dcr);      /* remove dcr from jcr list */
