Index: realname.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/realname/realname.module,v
retrieving revision 1.4.4.57
diff -u -p -r1.4.4.57 realname.module
--- realname.module	13 Oct 2009 17:48:06 -0000	1.4.4.57
+++ realname.module	11 Mar 2010 18:44:10 -0000
@@ -686,7 +686,8 @@ function realname_privatemsg_autocomplet
  *   The retreived "real name" string.
  */
 function realname_make_name(&$account) {
-  static $users = array();
+  $users = &realname_static('users',array());
+  $links = &realname_static('links',array());
 
   // Return anonymous user right away.
   if ($account->uid == 0) {
@@ -698,7 +699,7 @@ function realname_make_name(&$account) {
     $account->homepage = isset($links[$account->uid]) ? $links[$account->uid] : NULL;
     return $users[$account->uid];
   }
-
+  
   $result = _realname_make_name($account);
   if (empty($result)) {
     return $account->name;
@@ -723,9 +724,9 @@ function realname_make_name(&$account) {
  */
 function _realname_make_name(&$account) {
   static $fields, $pattern_saved, $homepage, $use_theme, $type, $module, $profile_privacy;
-  static $users = array();
-  static $links = array();
-  static $edit = array();
+  $users = &realname_static('users',array());
+  $links = &realname_static('links',array());
+  $edit = &realname_static('edit',array());
 
   // Get our controlling variables (static makes it once per page load).
   if (!isset($fields)) {
@@ -809,6 +810,38 @@ function _realname_make_name(&$account) 
   return filter_xss_admin($string);
 }
 
+function &realname_static($name, $default_value = NULL, $reset = FALSE) {
+  static $data = array(), $default = array();
+  if (!isset($name)) {
+    // All variables are reset. This needs to be done one at a time so that
+    // references returned by earlier invocations of drupal_static() also get
+    // reset.
+    foreach ($default as $name => $value) {
+      $data[$name] = $value;
+    }
+    // As the function returns a reference, the return should always be a
+    // variable.
+    return $data;
+  }
+  if ($reset) {
+    // The reset means the default is loaded.
+    if (array_key_exists($name, $default)) {
+      $data[$name] = $default[$name];
+    }
+    else {
+      // Reset was called before a default is set and yet a variable must be
+      // returned.
+      return $data;
+    }
+  }
+  elseif (!array_key_exists($name, $data)) {
+    // Store the default value internally and also copy it to the reference to
+    // be returned.
+    $default[$name] = $data[$name] = $default_value;
+  }
+  return $data[$name];
+}
+
 /**
  * Provides array sorting function for uasort.
  *  @link http://us2.php.net/manual/en/function.uasort.php PHP Manual @end-link
