diff -u b/core/includes/update.inc b/core/includes/update.inc --- b/core/includes/update.inc +++ b/core/includes/update.inc @@ -618,14 +618,23 @@ } } } - // Find update functions without edges to the system update and add such - // updates as edges to the system update as they have to be executed after the - // system update. + // Find update functions without edges to system updates and add such updates + // as edges to system updates so that system updates are executed first. foreach ($graph as $system_function => &$system_data) { if ($system_data['module'] === 'system') { foreach ($graph as $non_system_function => $non_system_data) { - if (($non_system_data['module'] !== 'system') && !isset($non_system_data['edges'][$system_function])) { - $system_data['edges'][$non_system_function] = TRUE; + if ($non_system_data['module'] !== 'system') { + $contains_system_update_edge = FALSE; + $edges = empty($non_system_data['edges']) ? [] : array_keys($non_system_data['edges']); + foreach ($edges as $edge) { + if ($graph[$edge]['module'] === 'system') { + $contains_system_update_edge = TRUE; + break; + } + } + if (!$contains_system_update_edge) { + $system_data['edges'][$non_system_function] = TRUE; + } } } }