Index: /trunk/Nebulous-Server/lib/Nebulous/Server.pm
===================================================================
--- /trunk/Nebulous-Server/lib/Nebulous/Server.pm	(revision 13310)
+++ /trunk/Nebulous-Server/lib/Nebulous/Server.pm	(revision 13311)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: Server.pm,v 1.44 2007-05-09 00:27:03 jhoblitt Exp $
+# $Id: Server.pm,v 1.45 2007-05-09 00:45:21 jhoblitt Exp $
 
 package Nebulous::Server;
@@ -501,110 +501,73 @@
 
     eval {
-        # this will set update locks
-        $query = $db->prepare_cached( $sql->get_object_locks );
-        my $rows = $query->execute( $key );
-        unless ( $rows == 1 ) {
-            $log->logdie( "storage object does not exist" );
-        }
-
-        my $row = $query->fetchrow_hashref;
-        $query->finish;
-
-        $so_id      = $row->{ 'so_id' };
-        $read_lock  = $row->{ 'read_lock' };
-        $write_lock = $row->{ 'write_lock' };
-    };
-    if ( $@ ) {
-        $query->finish;
-        $db->rollback;
-        $log->debug("rollback");
-        $log->logdie( "database error: $@" );
-    }
-
-    if ( $type eq 'write' ) {
-        # can't remove a write lock if it doesn't exist
-        if ( $read_lock ) {
-            eval { $db->rollback; };
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" ) if $@;
-           
-            $log->logdie( "can not have a write lock under a read lock" );
-        }
-        unless ( $write_lock ) {
-            eval { $db->rollback; };
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" ) if $@;
-
-            $log->logdie( "can not remove non-existant write lock" );
-        }
-
-        eval {
-            my $query = $db->prepare_cached( $sql->delete_write_lock );
-            my $rows = $query->execute( $key );
-        
-            # if we affected more then one row something very bad has happened.
-            unless ( $rows == 1 ) {
-                $log->logdie( "affected row count is $rows instead of 1" );
-            }
-
-            $db->commit;
-            $log->debug("commit");
-        };
-        if ( $@ ) {
-            $db->rollback;
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" );
-        }
-
-        $log->debug( "leaving" );
-
-        return 1;
-    }
-
-    if ( $type eq 'read' ) {
-        # can't remove a read lock if there's a write lock and
-        # can't remove a read lock if there aren't any
-        if ( $write_lock ) {
-            eval { $db->rollback; };
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" ) if $@;
-           
-            $log->logdie( "can not have a read lock under a write lock" );
-        }
-           
-        if ( $read_lock == 0 ) {
-            eval { $db->rollback; };
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" ) if $@;
-           
-            $log->logdie( "can not remove non-existant read lock" );
-        }
-
-        eval {
-            my $query = $db->prepare_cached( $sql->decrement_read_lock );
-            my $rows = $query->execute( $key );
-        
-            # if we affected more then one row something very bad has happened.
-            unless ( $rows == 1 ) {
-
-                $log->logdie( "affected row count is $rows instead of 1" );
-            }
-
-            $db->commit;
-            $log->debug("commit");
-        };
-        if ( $@ ) {
-            $db->rollback;
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" );
-        }
-
-        $log->debug( "leaving" );
-
-        return 1;
-    }
-
-    # never reached
-    $log->logdie( "this should never happen" );
+        {
+            # this will set update locks
+            $query = $db->prepare_cached( $sql->get_object_locks );
+            my $rows = $query->execute($key);
+            unless ($rows == 1) {
+                $log->logdie("storage object does not exist");
+            }
+
+            my $row = $query->fetchrow_hashref;
+            $query->finish;
+
+            $so_id      = $row->{ 'so_id' };
+            $read_lock  = $row->{ 'read_lock' };
+            $write_lock = $row->{ 'write_lock' };
+        }
+
+        if ($type eq 'write') {
+            # can't remove a write lock if it doesn't exist
+            if ($read_lock) {
+                $log->logdie("can not have a write lock under a read lock");
+            }
+
+            unless ($write_lock) {
+                $log->logdie("can not remove non-existant write lock");
+            }
+
+            {
+                my $query = $db->prepare_cached( $sql->delete_write_lock );
+                my $rows = $query->execute($key);
+            
+                # if we affected more then one row something very bad has happened.
+                unless ($rows == 1) {
+                    $log->logdie("affected row count is $rows instead of 1");
+                }
+            }
+        } elsif ($type eq 'read') {
+            # can't remove a read lock if there's a write lock and
+            # can't remove a read lock if there aren't any
+            if ($write_lock) {
+                $log->logdie("can not have a read lock under a write lock");
+            }
+               
+            if ($read_lock == 0) {
+                $log->logdie("can not remove non-existant read lock");
+            }
+
+            {
+                my $query = $db->prepare_cached( $sql->decrement_read_lock );
+                my $rows = $query->execute($key);
+            
+                # if we affected more then one row something very bad has happened.
+                unless ($rows == 1) {
+                    $log->logdie("affected row count is $rows instead of 1");
+                }
+
+            }
+        }
+        $db->commit;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
+        $log->logdie("error: $@");
+    }
+
+    $log->debug( "leaving" );
+
+    return 1;
 }
 
Index: /trunk/Nebulous/lib/Nebulous/Server.pm
===================================================================
--- /trunk/Nebulous/lib/Nebulous/Server.pm	(revision 13310)
+++ /trunk/Nebulous/lib/Nebulous/Server.pm	(revision 13311)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: Server.pm,v 1.44 2007-05-09 00:27:03 jhoblitt Exp $
+# $Id: Server.pm,v 1.45 2007-05-09 00:45:21 jhoblitt Exp $
 
 package Nebulous::Server;
@@ -501,110 +501,73 @@
 
     eval {
-        # this will set update locks
-        $query = $db->prepare_cached( $sql->get_object_locks );
-        my $rows = $query->execute( $key );
-        unless ( $rows == 1 ) {
-            $log->logdie( "storage object does not exist" );
-        }
-
-        my $row = $query->fetchrow_hashref;
-        $query->finish;
-
-        $so_id      = $row->{ 'so_id' };
-        $read_lock  = $row->{ 'read_lock' };
-        $write_lock = $row->{ 'write_lock' };
-    };
-    if ( $@ ) {
-        $query->finish;
-        $db->rollback;
-        $log->debug("rollback");
-        $log->logdie( "database error: $@" );
-    }
-
-    if ( $type eq 'write' ) {
-        # can't remove a write lock if it doesn't exist
-        if ( $read_lock ) {
-            eval { $db->rollback; };
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" ) if $@;
-           
-            $log->logdie( "can not have a write lock under a read lock" );
-        }
-        unless ( $write_lock ) {
-            eval { $db->rollback; };
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" ) if $@;
-
-            $log->logdie( "can not remove non-existant write lock" );
-        }
-
-        eval {
-            my $query = $db->prepare_cached( $sql->delete_write_lock );
-            my $rows = $query->execute( $key );
-        
-            # if we affected more then one row something very bad has happened.
-            unless ( $rows == 1 ) {
-                $log->logdie( "affected row count is $rows instead of 1" );
-            }
-
-            $db->commit;
-            $log->debug("commit");
-        };
-        if ( $@ ) {
-            $db->rollback;
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" );
-        }
-
-        $log->debug( "leaving" );
-
-        return 1;
-    }
-
-    if ( $type eq 'read' ) {
-        # can't remove a read lock if there's a write lock and
-        # can't remove a read lock if there aren't any
-        if ( $write_lock ) {
-            eval { $db->rollback; };
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" ) if $@;
-           
-            $log->logdie( "can not have a read lock under a write lock" );
-        }
-           
-        if ( $read_lock == 0 ) {
-            eval { $db->rollback; };
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" ) if $@;
-           
-            $log->logdie( "can not remove non-existant read lock" );
-        }
-
-        eval {
-            my $query = $db->prepare_cached( $sql->decrement_read_lock );
-            my $rows = $query->execute( $key );
-        
-            # if we affected more then one row something very bad has happened.
-            unless ( $rows == 1 ) {
-
-                $log->logdie( "affected row count is $rows instead of 1" );
-            }
-
-            $db->commit;
-            $log->debug("commit");
-        };
-        if ( $@ ) {
-            $db->rollback;
-            $log->debug("rollback");
-            $log->logdie( "database error: $@" );
-        }
-
-        $log->debug( "leaving" );
-
-        return 1;
-    }
-
-    # never reached
-    $log->logdie( "this should never happen" );
+        {
+            # this will set update locks
+            $query = $db->prepare_cached( $sql->get_object_locks );
+            my $rows = $query->execute($key);
+            unless ($rows == 1) {
+                $log->logdie("storage object does not exist");
+            }
+
+            my $row = $query->fetchrow_hashref;
+            $query->finish;
+
+            $so_id      = $row->{ 'so_id' };
+            $read_lock  = $row->{ 'read_lock' };
+            $write_lock = $row->{ 'write_lock' };
+        }
+
+        if ($type eq 'write') {
+            # can't remove a write lock if it doesn't exist
+            if ($read_lock) {
+                $log->logdie("can not have a write lock under a read lock");
+            }
+
+            unless ($write_lock) {
+                $log->logdie("can not remove non-existant write lock");
+            }
+
+            {
+                my $query = $db->prepare_cached( $sql->delete_write_lock );
+                my $rows = $query->execute($key);
+            
+                # if we affected more then one row something very bad has happened.
+                unless ($rows == 1) {
+                    $log->logdie("affected row count is $rows instead of 1");
+                }
+            }
+        } elsif ($type eq 'read') {
+            # can't remove a read lock if there's a write lock and
+            # can't remove a read lock if there aren't any
+            if ($write_lock) {
+                $log->logdie("can not have a read lock under a write lock");
+            }
+               
+            if ($read_lock == 0) {
+                $log->logdie("can not remove non-existant read lock");
+            }
+
+            {
+                my $query = $db->prepare_cached( $sql->decrement_read_lock );
+                my $rows = $query->execute($key);
+            
+                # if we affected more then one row something very bad has happened.
+                unless ($rows == 1) {
+                    $log->logdie("affected row count is $rows instead of 1");
+                }
+
+            }
+        }
+        $db->commit;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
+        $log->logdie("error: $@");
+    }
+
+    $log->debug( "leaving" );
+
+    return 1;
 }
 
