diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-07-04 03:20:23 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-07-04 16:58:29 +0900 |
| commit | 31f6ac69794361cdaee52cba0213a1b4da4932ac (patch) | |
| tree | 7cdc57124a13daea5c74ef03161098bb4664fa0c /crates/shirabe/src/package/complete_alias_package.rs | |
| parent | f7b0eee15f17a4fa5db717cda5ddc387f884afd0 (diff) | |
| download | php-shirabe-31f6ac69794361cdaee52cba0213a1b4da4932ac.tar.gz php-shirabe-31f6ac69794361cdaee52cba0213a1b4da4932ac.tar.zst php-shirabe-31f6ac69794361cdaee52cba0213a1b4da4932ac.zip | |
fix(event-dispatcher): avoid reentrant RefCell panics
Two related "already borrowed" panics reachable from
AutoloadGenerator::dump() (which holds the local-repository,
installation-manager, and config RefCells for the duration of its own
statement, per the temporary-lifetime-extension pattern fixed
separately in create_project_command.rs):
- ensure_bin_dir_is_in_path called config.borrow_mut() to read
"bin-dir", but Config::get only needs &self; use borrow() so it can
coexist with an outer borrow instead of conflicting with it.
- make_autoloader's real body needed composer_handle.borrow_mut() plus
the same local-repository/installation-manager RefCells the caller
already holds mutably, which cannot be made reentrant-safe without a
larger restructuring. Since all 3 call sites already discard its
return value, and its only effect (registering a Composer-generated
ClassLoader for autoloading during event-listener PHP execution) is
unobservable in this port — there's no embedded PHP interpreter to
register it into, and class_exists for user-defined classes is a
hardcoded-false shim so the caller's very next check always treats
the class as unavailable regardless — make it a genuine no-op.
This unblocks the post-autoload-dump event for any script listener
naming a PHP class (e.g. Illuminate\Foundation\ComposerScripts), which
every create-project/install run reaches once real packages get
installed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/package/complete_alias_package.rs')
0 files changed, 0 insertions, 0 deletions
