Index: includes/path.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/path.inc,v
retrieving revision 1.65
diff -u -p -r1.65 path.inc
--- includes/path.inc	16 Jul 2010 02:51:44 -0000	1.65
+++ includes/path.inc	19 Jul 2010 22:28:22 -0000
@@ -74,8 +74,10 @@ function drupal_lookup_path($action, $pa
   $path_language = $path_language ? $path_language : $language_content->language;
 
   if ($action == 'wipe') {
-    $cache = array();
-    $cache['whitelist'] = drupal_path_alias_whitelist_rebuild();
+    $cache = array(
+      'whitelist' => drupal_path_alias_whitelist_rebuild(),
+      'first_call' => TRUE,
+    );
   }
   elseif ($cache['whitelist'] && $path != '') {
     if ($action == 'alias') {
@@ -127,6 +129,7 @@ function drupal_lookup_path($action, $pa
     // isn't a path that has this alias
     elseif ($action == 'source' && !isset($cache['no_source'][$path_language][$path])) {
       // Look for the value $path within the cached $map
+      $source = FALSE;
       if (!isset($cache['map'][$path_language]) || !($source = array_search($path, $cache['map'][$path_language]))) {
         // Get the most fitting result falling back with alias without language
         if ($source = db_query("SELECT source FROM {url_alias} WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language DESC, pid DESC", array(
@@ -135,7 +138,6 @@ function drupal_lookup_path($action, $pa
                      ':language_none' => LANGUAGE_NONE))
             ->fetchField()) {
           $cache['map'][$path_language][$source] = $path;
-          return $source;
         }
         else {
           // We can't record anything into $map because we do not have a valid
@@ -144,6 +146,7 @@ function drupal_lookup_path($action, $pa
           $cache['no_source'][$path_language][$path] = TRUE;
         }
       }
+      return $source;
     }
   }
 
Index: modules/path/path.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.test,v
retrieving revision 1.35
diff -u -p -r1.35 path.test
--- modules/path/path.test	26 Mar 2010 12:37:30 -0000	1.35
+++ modules/path/path.test	19 Jul 2010 22:28:22 -0000
@@ -306,6 +306,22 @@ class PathLanguageTestCase extends Drupa
     $languages = language_list();
     $url = url('node/' . $french_node->nid, array('language' => $languages[$french_node->language]));
     $this->assertTrue(strpos($url, $edit['path[alias]']), t('URL contains the path alias.'));
+
+    // drupal_lookup_path() has an internal static cache. Check to see that
+    // it has the appropriate contents at this point.
+    drupal_lookup_path('wipe');
+    $french_node_path = drupal_lookup_path('source', $edit['path[alias]'], $french_node->language);
+    $this->assertEqual($french_node_path, 'node/' . $french_node->nid, t('Normal path works.'));
+    // Second call should return the same path.
+    $french_node_path = drupal_lookup_path('source', $edit['path[alias]'], $french_node->language);
+    $this->assertEqual($french_node_path, 'node/' . $french_node->nid, t('Normal path is the same.'));
+
+    // Confirm that the alias works.
+    $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language);
+    $this->assertEqual($french_node_alias, $edit['path[alias]'], t('Alias works.'));
+    // Second call should return the same alias.
+    $french_node_alias = drupal_lookup_path('alias', $edit['path[alias]'], $french_node->language);
+    $this->assertEqual($french_node_alias, 'node/' . $french_node->nid, t('Alias is the same.'));
   }
 }
 
