Index: wp-includes/cron.php
===================================================================
--- wp-includes/cron.php	(revision 21117)
+++ wp-includes/cron.php	(working copy)
@@ -18,6 +18,7 @@
  * @param int $timestamp Timestamp for when to run the event.
  * @param string $hook Action hook to execute when cron is run.
  * @param array $args Optional. Arguments to pass to the hook's callback function.
+ * @return bool False on failure, true when complete with scheduling event.
  */
 function wp_schedule_single_event( $timestamp, $hook, $args = array()) {
 	// don't schedule a duplicate if there's already an identical event due in the next 10 minutes
@@ -37,7 +38,7 @@
 
 	$crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args );
 	uksort( $crons, "strnatcasecmp" );
-	_set_cron_array( $crons );
+	return _set_cron_array( $crons );
 }
 
 /**
@@ -58,7 +59,7 @@
  * @param string $recurrence How often the event should recur.
  * @param string $hook Action hook to execute when cron is run.
  * @param array $args Optional. Arguments to pass to the hook's callback function.
- * @return bool|null False on failure, null when complete with scheduling event.
+ * @return bool False on failure, true when complete with scheduling event.
  */
 function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) {
 	$crons = _get_cron_array();
@@ -78,7 +79,7 @@
 
 	$crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args, 'interval' => $event->interval );
 	uksort( $crons, "strnatcasecmp" );
-	_set_cron_array( $crons );
+	return _set_cron_array( $crons );
 }
 
 /**
@@ -90,7 +91,7 @@
  * @param string $recurrence How often the event should recur.
  * @param string $hook Action hook to execute when cron is run.
  * @param array $args Optional. Arguments to pass to the hook's callback function.
- * @return bool|null False on failure. Null when event is rescheduled.
+ * @return bool False on failure. True when event is rescheduled.
  */
 function wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array()) {
 	$crons = _get_cron_array();
@@ -115,7 +116,7 @@
 	else
 		$timestamp = $now + ($interval - (($now - $timestamp) % $interval));
 
-	wp_schedule_event( $timestamp, $recurrence, $hook, $args );
+	return wp_schedule_event( $timestamp, $recurrence, $hook, $args );
 }
 
 /**
@@ -132,6 +133,7 @@
  * Although not passed to a callback function, these arguments are used
  * to uniquely identify the scheduled event, so they should be the same
  * as those used when originally scheduling the event.
+ * @return bool False on failure, true when complete with unscheduling event.
  */
 function wp_unschedule_event( $timestamp, $hook, $args = array() ) {
 	$crons = _get_cron_array();
@@ -141,7 +143,7 @@
 		unset( $crons[$timestamp][$hook] );
 	if ( empty($crons[$timestamp]) )
 		unset( $crons[$timestamp] );
-	_set_cron_array( $crons );
+	return _set_cron_array( $crons );
 }
 
 /**
@@ -151,6 +153,7 @@
  *
  * @param string $hook Action hook, the execution of which will be unscheduled.
  * @param array $args Optional. Arguments that were to be pass to the hook's callback function.
+ * @return array Boolean values, for each unscheduled event with timestamps as keys.
  */
 function wp_clear_scheduled_hook( $hook, $args = array() ) {
 	// Backward compatibility
@@ -160,8 +163,11 @@
 		$args = array_slice( func_get_args(), 1 );
 	}
 
-	while ( $timestamp = wp_next_scheduled( $hook, $args ) )
-		wp_unschedule_event( $timestamp, $hook, $args );
+	$results = array();
+	while ( $timestamp = wp_next_scheduled( $hook, $args ) ) {
+		$results[$timestamp] = wp_unschedule_event( $timestamp, $hook, $args )
+
+	return $results;
 }
 
 /**
@@ -190,7 +196,8 @@
  *
  * @since 2.1.0
  *
- * @return null Cron could not be spawned, because it is not needed to run.
+ * @return null|WP_Error|array Null when cron could not be spawned, because it is not needed to run.
+ * When cron runs, return the result of wp_remote_post().
  */
 function spawn_cron( $local_time = 0 ) {
 
@@ -245,7 +252,7 @@
 	set_transient( 'doing_cron', $doing_wp_cron );
 
 	$cron_url = site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron );
-	wp_remote_post( $cron_url, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) ) );
+	return wp_remote_post( $cron_url, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) ) );
 }
 
 /**
@@ -253,7 +260,7 @@
  *
  * @since 2.1.0
  *
- * @return null When doesn't need to run Cron.
+ * @return null|array Null when doesn't need to run Cron. Array of spawn_cron() results when cron does run.
  */
 function wp_cron() {
 
@@ -269,16 +276,19 @@
 	if ( isset($keys[0]) && $keys[0] > $local_time )
 		return;
 
+	$results = array();
 	$schedules = wp_get_schedules();
 	foreach ( $crons as $timestamp => $cronhooks ) {
 		if ( $timestamp > $local_time ) break;
 		foreach ( (array) $cronhooks as $hook => $args ) {
 			if ( isset($schedules[$hook]['callback']) && !call_user_func( $schedules[$hook]['callback'] ) )
 				continue;
-			spawn_cron( $local_time );
+			$results[] = spawn_cron( $local_time );
 			break 2;
 		}
 	}
+
+	return $results;
 }
 
 /**
@@ -376,7 +386,7 @@
  */
 function _set_cron_array($cron) {
 	$cron['version'] = 2;
-	update_option( 'cron', $cron );
+	return update_option( 'cron', $cron );
 }
 
 /**
