Index: trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm
===================================================================
--- trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm	(revision 20018)
+++ trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm	(revision 20019)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: SQL.pm,v 1.68 2008-10-09 20:27:51 jhoblitt Exp $
+# $Id: SQL.pm,v 1.69 2008-10-09 20:37:41 jhoblitt Exp $
 
 package Nebulous::Server::SQL;
@@ -498,9 +498,16 @@
     DECLARE xattrvar BOOLEAN;
     DECLARE trans_level VARCHAR(255);
+    DECLARE key_checks BOOLEAN;
     DECLARE cur1 CURSOR FOR SELECT vol_id, name, host, path, allocate, available, xattr FROM myvolume;
     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
 
---   SET FOREIGN_KEY_CHECKS=0;
-
+    -- store the okey checking state
+    SELECT @@FOREIGN_KEY_CHECKS INTO key_checks; 
+    -- disable foregin check checks to prevent deadlocks on the mountedvol table
+    SET FOREIGN_KEY_CHECKS=0;
+
+    -- make sure the temp table does not already exist... this can happy if the
+    -- stored proc fails for some reason
+    DROP TABLE IF EXISTS myvolume;
     CREATE TEMPORARY TABLE myvolume LIKE volume;
     INSERT INTO myvolume SELECT * FROM volume;
@@ -537,7 +544,10 @@
 --    SET @@session.tx_isolation = trans_level;
 
+    -- restore the original key checking state
+    SET @@FOREIGN_KEY_CHECKS = key_checks; 
+
     DROP TABLE IF EXISTS myvolume;
 
---    SET FOREIGN_KEY_CHECKS=1;
+    SET FOREIGN_KEY_CHECKS=1;
 
     COMMIT;
