--- announcements.module.orig	2008-10-03 16:52:43.000000000 -0700
+++ announcements.module	2008-10-03 17:00:08.000000000 -0700
@@ -194,11 +194,17 @@
  * More detail at @link http://api.drupal.org/api/HEAD/function/hook_cron API page @endlink .
  */
 function announcements_cron() {
+  // Make it a transaction
+  $query_result = db_query("BEGIN");
+
   // Mark ready announcements as published.
-  $query_result = db_query("UPDATE {node} AS n INNER JOIN {announcements} AS a ON n.nid = a.nid SET n.status = 1 WHERE n.type='announcements' AND n.status = 0 AND a.publish_date <= %d", time());
+  $query_result = db_query("UPDATE {node} SET status = 1 WHERE type = 'announcements' AND status = 0 AND nid IN (SELECT nid FROM {announcements} WHERE publish_date <= %d)", time());
 
   // Mark expired announcements as unpublished.
-  $query_result = db_query("UPDATE {node} AS n INNER JOIN {announcements} AS a ON n.nid = a.nid SET n.status = 0 WHERE n.type='announcements' AND n.status = 1 AND a.expiration_date < %d", time());
+  $query_result = db_query("UPDATE {node} SET status = 0 WHERE type = 'announcements' AND status = 1 AND nid IN (SELECT nid FROM {announcements} WHERE expiration_date < %d)", time());
+
+  // Success
+  $query_result = db_query("COMMIT");
 }
 
 /**
