@@ -702,6 +702,12 @@ export class EngineActorDriver implements ActorDriver {
702702 preloadMap ,
703703 ) ;
704704
705+ // Resolve start promise after start() fully completes
706+ // (including resetSleepTimer). This ensures forceStopActor
707+ // cannot call onStop until the actor is fully initialized.
708+ handler . actorStartPromise ?. resolve ( ) ;
709+ handler . actorStartPromise = undefined ;
710+
705711 logger ( ) . debug ( { msg : "runner actor started" , actorId, name, key } ) ;
706712 } catch ( innerError ) {
707713 const error =
@@ -1153,14 +1159,13 @@ export class EngineActorDriver implements ActorDriver {
11531159 }
11541160
11551161 async onBeforeActorStart ( actor : AnyActorInstance ) : Promise < void > {
1156- // Resolve promise if waiting
11571162 const handler = this . #actors. get ( actor . id ) ;
11581163 invariant ( handler , "missing actor handler in onBeforeActorReady" ) ;
11591164 handler . actorStartError = undefined ;
1160- handler . actorStartPromise ?. resolve ( ) ;
1161- handler . actorStartPromise = undefined ;
11621165
1163- // Restore hibernating requests
1166+ // Restore hibernating requests. The start promise is resolved in
1167+ // #runnerOnActorStart after start() fully completes (including
1168+ // resetSleepTimer), so forceStopActor cannot interfere here.
11641169 const metaEntries = await this . #hwsLoadAll( actor . id ) ;
11651170 await this . #runner. restoreHibernatingRequests ( actor . id , metaEntries ) ;
11661171 }
0 commit comments