Index: includes/cache.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/cache.inc,v
retrieving revision 1.48
diff -u -p -r1.48 cache.inc
--- includes/cache.inc	18 May 2010 18:26:30 -0000	1.48
+++ includes/cache.inc	21 Sep 2010 18:44:30 -0000
@@ -147,11 +147,8 @@ function cache_set($cid, $data, $bin = '
  * @param $cid
  *   If set, the cache ID to delete. Otherwise, all cache entries that can
  *   expire are deleted.
- *
  * @param $bin
- *   If set, the bin $bin to delete from. Mandatory
- *   argument if $cid is set.
- *
+ *   If set, the bin $bin to delete from. Mandatory argument if $cid is set.
  * @param $wildcard
  *   If $wildcard is TRUE, cache IDs starting with $cid are deleted in
  *   addition to the exact cache ID specified by $cid.  If $wildcard is
@@ -167,7 +164,19 @@ function cache_clear_all($cid = NULL, $b
     cache_clear_all(NULL, 'cache_page');
     return;
   }
-  return _cache_get_object($bin)->clear($cid, $wildcard);
+  $result = _cache_get_object($bin)->clear($cid, $wildcard);
+
+  // Allow modules to react on cleared caches.
+  // @todo D8: Replace this with a proper cache invalidation API.
+  if (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'install') {
+    $context = array(
+      'wildcard' => $wildcard,
+      'result' => $result,
+    );
+    drupal_alter(array('cache_clear', "cache_$bin_clear"), $bin, $cid, $context);
+  }
+
+  return $result;
 }
 
 /**
