@@ -1331,27 +1331,22 @@ pub unsafe extern "C" fn dash_spv_ffi_client_load_filters(
13311331 let inner = client. inner . clone ( ) ;
13321332
13331333 let result = client. runtime . block_on ( async {
1334- let spv_client = {
1335- let mut guard = inner. lock ( ) . unwrap ( ) ;
1336- match guard. take ( ) {
1337- Some ( client) => client,
1334+ // Get storage reference without taking the client
1335+ let storage = {
1336+ let guard = inner. lock ( ) . unwrap ( ) ;
1337+ match guard. as_ref ( ) {
1338+ Some ( client) => client. storage ( ) ,
13381339 None => {
13391340 set_last_error ( "Client not initialized" ) ;
13401341 return None ;
13411342 }
13421343 }
13431344 } ;
13441345
1345- // Get the storage
1346- let storage = spv_client. storage ( ) ;
1346+ // Access storage directly - works even during sync
13471347 let storage_guard = storage. lock ( ) . await ;
1348-
1349- // Load filters in range
13501348 let filters_result = storage_guard. load_filters ( start_height..end_height) . await ;
1351-
1352- // Put the client back
1353- let mut guard = inner. lock ( ) . unwrap ( ) ;
1354- * guard = Some ( spv_client) ;
1349+ drop ( storage_guard) ;
13551350
13561351 match filters_result {
13571352 Ok ( filters) => {
@@ -1723,27 +1718,21 @@ pub unsafe extern "C" fn dash_spv_ffi_client_get_filter_matched_heights(
17231718 let inner = client. inner . clone ( ) ;
17241719
17251720 let result = client. runtime . block_on ( async {
1726- let spv_client = {
1727- let mut guard = inner. lock ( ) . unwrap ( ) ;
1728- match guard. take ( ) {
1729- Some ( client) => client,
1721+ // Get chain state without taking the client
1722+ let chain_state = {
1723+ let guard = inner. lock ( ) . unwrap ( ) ;
1724+ match guard. as_ref ( ) {
1725+ Some ( client) => client. chain_state ( ) . await ,
17301726 None => {
17311727 set_last_error ( "Client not initialized" ) ;
17321728 return None ;
17331729 }
17341730 }
17351731 } ;
17361732
1737- // Get the chain state
1738- let chain_state = spv_client. chain_state ( ) . await ;
1739-
1740- // Get filter matches in range
1733+ // Get filter matches in range - works even during sync
17411734 let matches_result = chain_state. get_filter_matched_heights ( start_height..end_height) ;
17421735
1743- // Put the client back
1744- let mut guard = inner. lock ( ) . unwrap ( ) ;
1745- * guard = Some ( spv_client) ;
1746-
17471736 match matches_result {
17481737 Ok ( matches) => {
17491738 // Convert BTreeMap to FFI format
0 commit comments