Skip to content

Commit 3c8a2a9

Browse files
riptlripatel-fd
authored andcommitted
Fix fdctl netconf
1 parent fd8b2f3 commit 3c8a2a9

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

src/waltz/ip/fd_fib4.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -399,24 +399,24 @@ fd_fib4_fprintf( fd_fib4_t const * fib,
399399
fd_fib4_hmap_t hmap[1];
400400
fd_fib4_hmap_entry_t * elems = fd_fib4_hmap_ele_mem( (fd_fib4_t *)fib );
401401
FD_TEST( fd_fib4_hmap_join( hmap, fd_fib4_hmap_mem( (fd_fib4_t *)fib ), elems ) );
402-
ulong elem_max = fd_fib4_hmap_get_ele_max( fib->hmap_max );
403-
ulong lock_cnt = fd_fib4_hmap_get_lock_cnt( elem_max );
404-
ulong ignored[ fd_fib4_hmap_lock_max( ) ];
405-
FD_TEST( fd_fib4_hmap_lock_range( hmap, 0, lock_cnt, FD_MAP_FLAG_BLOCKING | FD_MAP_FLAG_RDONLY, ignored )==FD_MAP_SUCCESS );
406-
407-
// loop through the hmap elements
402+
ulong elem_max = fd_fib4_hmap_get_ele_max( fib->hmap_max );
408403
for( ulong i=0; i<elem_max; i++ ) {
409-
if( elems[i].dst_addr!=0 ) {
404+
ulong * lock = hmap->lock+fd_fib4_hmap_ele_lock( hmap, i );
405+
fd_fib4_hmap_entry_t e;
406+
for(;;) {
407+
ulong ver = fd_fib4_hmap_private_try( lock );
408+
e = FD_VOLATILE_CONST( elems[ i ] );
409+
if( FD_LIKELY( fd_fib4_hmap_private_test( lock, 1UL, &ver, 0UL, 1UL )==FD_MAP_SUCCESS ) ) break;
410+
}
411+
if( e.dst_addr!=0 ) {
410412
fd_fib4_key_t key;
411-
key.addr = fd_uint_bswap( elems[i].dst_addr );
413+
key.addr = fd_uint_bswap( e.dst_addr );
412414
key.mask = 31;
413415
key.prio = 0;
414-
fd_fib4_fprintf_route( &key, &elems[i].next_hop, file );
416+
fd_fib4_fprintf_route( &key, &e.next_hop, file );
415417
}
416418
}
417419

418-
fd_fib4_hmap_unlock_range( hmap, 0, lock_cnt, ignored );
419-
420420
return 0;
421421
}
422422

0 commit comments

Comments
 (0)