Problem/Motivation
I see the error while running any Drush command:
Circular reference detected for service "hook_event_dispatcher.module_handler", path: "hook_event_dispatcher.module_handler -> hook_event_dispatcher.manager -> event_dispatcher -> tracer.tracer -> tracer.tracer_
factory -> plugin.manager.tracer".
Drupal 10.1.2
I can't run any Drush command anymore
Steps to reproduce
In my I enabled hook_event_dispacther, core_event_dispatcher. Created custom EventSubscriber with using EntityHookEvents::ENTITY_VIEW => 'entityViewCallback' in getSubscribedEvents() function
Issue fork tracer-3401896
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #2
mikkmiggur commentedWe got the same issue from today.
Getting it after drush cr command.
If I do drush cim then 1 time it's clean and I can run any command.
After that, I'm getting again this error.
The only solution at the moment is to uninstall webprofiler and tracer.
Comment #3
lussolucamikkmiggur are you using the hook_event_dispacther module as bob.hinrichs ?
Comment #4
cleverhoods commentedThere's a hotfix patch that would circumvent the error: https://www.drupal.org/project/hook_event_dispatcher/issues/3385203#comm...
Comment #5
robin.houtevelts commentedAfter applying the patch above I was still seeing this error.
In my case I was using drupal/office_hours which seems to call the ModuleHandler very very early in their .module file.
I fixed it by replacing those two lines with:
Leaving it here in case it might help someone else.
Comment #8
lussolucaComment #10
bob.hinrichs commentedThis problem has resurfaced for us:
hook_event_dispatcher: 4.2.0
tracer: 1.0.4
drupal core: 10.4.5
We are running lando with a pantheon recipe (if that matters).
When hook_event_dispatcher and tracer are enabled, and one runs drush updb, the following error results:
Circular reference detected for service "hook_event_dispatcher.module_handler", path: "hook_event_dispatcher.module_handler -> hook_event_dispatcher.manager -> hook_event_dispatcher.module_handler".Some guesses as to why this is:
This error occurs during updb, because it has a special bootstrap mode that ensures all modules are loaded and update hooks are discovered in a single run, so it is instantiating the whole thing at once, and bringing the circular reference to light. Whereas in a normal page request, some services are only loaded on demand.
Tracer’s services include:
plugin.manager.tracer:
class: Drupal\tracer\TracerPluginManager
parent: default_plugin_manager
TracerPluginManager extends Drupal’s DefaultPluginManager. That core base class automatically loads the module_handler. If you then have a circular dependency from module_handler → hook_event_dispatcher.manager → module_handler, enabling Tracer is the catalyst that triggers it during drush updb. \Drupal\tracer\TracerPluginManager extends DefaultPluginManager and calls parent::__construct. This parent class requires module_handler.
I will add a new comment for the linked hook_event_dispatcher issue and cross-reference this, since I don't have enough understanding to know where the fix would reside, if a fix is possible.
Curious to see if this is reproducible by others.
Comment #11
bob.hinrichs commented