Index: wp-includes/default-filters.php
===================================================================
--- wp-includes/default-filters.php	(revision 11405)
+++ wp-includes/default-filters.php	(working copy)
@@ -186,6 +186,7 @@
 add_action('do_feed_rss2', 'do_feed_rss2', 10, 1);
 add_action('do_feed_atom', 'do_feed_atom', 10, 1);
 add_action('do_pings', 'do_all_pings', 10, 1);
+add_action('do_generic_ping', 'generic_ping', 10, 1);
 add_action('do_robots', 'do_robots');
 add_action('sanitize_comment_cookies', 'sanitize_comment_cookies');
 add_action('admin_print_scripts', 'print_head_scripts', 20);
Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 11405)
+++ wp-includes/post.php	(working copy)
@@ -3244,6 +3244,9 @@
 		if ( '' == get_the_guid($post->ID) )
 			$wpdb->update( $wpdb->posts, array( 'guid' => get_permalink( $post->ID ) ), array( 'ID' => $post->ID ) );
 		do_action('private_to_published', $post->ID);  // Deprecated, use private_to_publish
+		// do generic pings once per hour at most
+		if ( !wp_next_scheduled('do_generic_ping') )
+			wp_schedule_single_event(time() + 3600, 'do_generic_ping');
 	}
 
 	// Always clears the hook in case the post status bounced from future to draft.
Index: wp-includes/comment.php
===================================================================
--- wp-includes/comment.php	(revision 11405)
+++ wp-includes/comment.php	(working copy)
@@ -1324,9 +1324,6 @@
 	if ( is_array($trackbacks) )
 		foreach ( $trackbacks as $trackback )
 			do_trackbacks($trackback);
-
-	//Do Update Services/Generic Pings
-	generic_ping();
 }
 
 /**
