From a2c039fdd138e615736cec1bccabba7652d5233e Mon Sep 17 00:00:00 2001 From: subh Date: Thu, 1 Jan 2026 04:20:30 +0530 Subject: [PATCH 1/2] fix: Ensure status channel always receives response to prevent RPC hang (#454) --- crates/core/src/surfnet/locker.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/crates/core/src/surfnet/locker.rs b/crates/core/src/surfnet/locker.rs index 0dcc7d95..9bb73b15 100644 --- a/crates/core/src/surfnet/locker.rs +++ b/crates/core/src/surfnet/locker.rs @@ -831,16 +831,29 @@ impl SurfnetSvmLocker { ) -> SurfpoolResult<()> { let do_propagate_status_updates = true; let signature = transaction.signatures[0]; - let profile_result = self + let profile_result = match self .fetch_all_tx_accounts_then_process_tx_returning_profile_res( remote_ctx, transaction, - status_tx, + status_tx.clone(), skip_preflight, sigverify, do_propagate_status_updates, ) - .await?; + .await + { + Ok(result) => result, + Err(e) => { + // Ensure the status channel always receives a response to prevent + // the RPC handler from hanging on recv() when errors occur during + // account fetching, ALT resolution, or other pre-processing steps. + // This is critical for issue #454 where program close stops block production. + let _ = status_tx.try_send(TransactionStatusEvent::VerificationFailure( + e.to_string(), + )); + return Err(e); + } + }; self.with_svm_writer(|svm_writer| { svm_writer.write_executed_profile_result(signature, profile_result); From 19225dff966925bec5d5bef9f81d98b1d92a8b1c Mon Sep 17 00:00:00 2001 From: subh Date: Wed, 7 Jan 2026 20:00:20 +0530 Subject: [PATCH 2/2] chore: run cargo +nightly fmt --all --- crates/core/src/surfnet/locker.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/core/src/surfnet/locker.rs b/crates/core/src/surfnet/locker.rs index 23ca184e..b524d4ec 100644 --- a/crates/core/src/surfnet/locker.rs +++ b/crates/core/src/surfnet/locker.rs @@ -1024,9 +1024,8 @@ impl SurfnetSvmLocker { // the RPC handler from hanging on recv() when errors occur during // account fetching, ALT resolution, or other pre-processing steps. // This is critical for issue #454 where program close stops block production. - let _ = status_tx.try_send(TransactionStatusEvent::VerificationFailure( - e.to_string(), - )); + let _ = + status_tx.try_send(TransactionStatusEvent::VerificationFailure(e.to_string())); return Err(e); } };