--- copy_node.module	2008-07-25 12:01:16.000000000 +0200
+++ node.module	2008-07-25 11:58:57.000000000 +0200
@@ -959,11 +959,10 @@
  */
 function node_delete($nid) {
 
+  // do not cache the node to save memory on mass deletions
   $node = node_load($nid, NULL, TRUE);
 
   if (node_access('delete', $node)) {
-    db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
-    db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);
 
     // Call the node-specific callback (if any):
     node_invoke($node, 'delete');
@@ -976,6 +975,11 @@
     if (function_exists('search_wipe')) {
       search_wipe($node->nid, 'node');
     }
+
+    // Last step: Delete node and it's revisions from database
+    db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);
+    db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
+
     watchdog('content', '@type: deleted %title.', array('@type' => $node->type, '%title' => $node->title));
     drupal_set_message(t('@type %title has been deleted.', array('@type' => node_get_types('name', $node), '%title' => $node->title)));
   }
