@@ -246,12 +246,15 @@ fd_funkier_rec_publish( fd_funkier_rec_prepare_t * prepare ) {
246
246
if ( FD_ATOMIC_CAS ( rec_tail_idx , rec_prev_idx , rec_idx ) == rec_prev_idx ) break ;
247
247
FD_COMPILER_MFENCE (); /* TODO: maybe not necessary */
248
248
}
249
+
250
+ fd_funkier_rec_pool_lock ( & rec_pool , 1 );
249
251
rec -> prev_idx = rec_prev_idx ;
250
252
if ( fd_funkier_rec_idx_is_null ( rec_prev_idx ) ) {
251
253
* rec_head_idx = rec_idx ;
252
254
} else {
253
255
rec_pool .ele [ rec_prev_idx ].next_idx = rec_idx ;
254
256
}
257
+ fd_funkier_rec_pool_unlock ( & rec_pool );
255
258
256
259
if ( fd_funkier_rec_map_insert ( & rec_map , rec , FD_MAP_FLAG_BLOCKING ) ) {
257
260
FD_LOG_CRIT (( "fd_funkier_rec_map_insert failed" ));
@@ -336,6 +339,7 @@ fd_funkier_rec_hard_remove( fd_funkier_t * funk,
336
339
break ;
337
340
}
338
341
342
+ fd_funkier_rec_pool_lock ( & rec_pool , 1 );
339
343
ulong prev_idx = rec -> prev_idx ;
340
344
ulong next_idx = rec -> next_idx ;
341
345
if ( txn == NULL ) {
@@ -349,6 +353,7 @@ fd_funkier_rec_hard_remove( fd_funkier_t * funk,
349
353
if ( fd_funkier_rec_idx_is_null ( next_idx ) ) txn -> rec_tail_idx = prev_idx ;
350
354
else rec_pool .ele [ next_idx ].prev_idx = prev_idx ;
351
355
}
356
+ fd_funkier_rec_pool_unlock ( & rec_pool );
352
357
353
358
fd_funkier_val_flush ( rec , alloc , wksp );
354
359
fd_funkier_rec_pool_release ( & rec_pool , rec , 1 );
0 commit comments