function menu_router_rebuild

Populates the database tables used by various menu functions.

This function will clear and populate the {menu_router} table, add entries to {menu_links} for new router items, and then remove stale items from {menu_links}.

Return value

TRUE if the menu was rebuilt, FALSE if another thread was rebuilding in parallel and the current thread just waited for completion.

Related topics

22 calls to menu_router_rebuild()

File

drupal/core/includes/menu.inc, line 2683
API for the Drupal menu system.

Code

function menu_router_rebuild() {
  if (!lock()
    ->acquire(__FUNCTION__)) {

    // Wait for another request that is already doing this work.
    // We choose to block here since otherwise the router item may not
    // be available during routing resulting in a 404.
    lock()
      ->wait(__FUNCTION__);
    return FALSE;
  }
  $transaction = db_transaction();
  try {
    list($menu, $masks) = menu_router_build(TRUE);
    _menu_navigation_links_rebuild($menu);

    // Clear the menu, page and block caches.
    menu_cache_clear_all();
    _menu_clear_page_cache();

    // Indicate that the menu has been successfully rebuilt.
    Drupal::state()
      ->delete('menu_rebuild_needed');
  } catch (Exception $e) {
    $transaction
      ->rollback();
    watchdog_exception('menu', $e);
  }
  lock()
    ->release(__FUNCTION__);
  return TRUE;
}