@@ -396,8 +396,8 @@ extern "C" rac_result_t rac_diffusion_component_generate(rac_handle_t handle,
396396 // Reset cancellation flag (also atomic, but set under lock for consistency)
397397 component->cancel_requested = false ;
398398
399- // Get service from lifecycle manager
400- rac_result_t result = rac_lifecycle_require_service (component->lifecycle , &service);
399+ // Pin service via acquire to prevent unload during generation
400+ rac_result_t result = rac_lifecycle_acquire_service (component->lifecycle , &service);
401401 if (result != RAC_SUCCESS) {
402402 RAC_LOG_ERROR (" Diffusion.Component" , " No model loaded - cannot generate" );
403403 return result;
@@ -418,6 +418,9 @@ extern "C" rac_result_t rac_diffusion_component_generate(rac_handle_t handle,
418418 // Perform generation outside lock
419419 rac_result_t result = rac_diffusion_generate (service, &effective_options, out_result);
420420
421+ // Release pinned service in all exit paths
422+ rac_lifecycle_release_service (component->lifecycle );
423+
421424 if (result != RAC_SUCCESS) {
422425 RAC_LOG_ERROR (" Diffusion.Component" , " Generation failed: %d" , result);
423426 rac_lifecycle_track_error (component->lifecycle , result, " generate" );
@@ -491,8 +494,8 @@ extern "C" rac_result_t rac_diffusion_component_generate_with_callbacks(
491494 // Reset cancellation flag
492495 component->cancel_requested = false ;
493496
494- // Get service from lifecycle manager
495- rac_result_t result = rac_lifecycle_require_service (component->lifecycle , &service);
497+ // Pin service via acquire to prevent unload during generation
498+ rac_result_t result = rac_lifecycle_acquire_service (component->lifecycle , &service);
496499 if (result != RAC_SUCCESS) {
497500 RAC_LOG_ERROR (" Diffusion.Component" , " No model loaded - cannot generate" );
498501 if (error_callback) {
@@ -526,6 +529,9 @@ extern "C" rac_result_t rac_diffusion_component_generate_with_callbacks(
526529 rac_result_t result = rac_diffusion_generate_with_progress (service, &effective_options,
527530 diffusion_progress_wrapper, &ctx, &gen_result);
528531
532+ // Release pinned service in all exit paths
533+ rac_lifecycle_release_service (component->lifecycle );
534+
529535 if (result != RAC_SUCCESS) {
530536 RAC_LOG_ERROR (" Diffusion.Component" , " Generation failed: %d" , result);
531537 rac_lifecycle_track_error (component->lifecycle , result, " generateWithCallbacks" );
0 commit comments