Line data Source code
1 : #include "fd_quic_pkt_meta.h" 2 : 3 : void * 4 : fd_quic_pkt_meta_tracker_init( fd_quic_pkt_meta_tracker_t * tracker, 5 : ulong total_meta_cnt, 6 316671 : fd_quic_pkt_meta_t * pool ) { 7 1583355 : for( ulong enc_level=0; enc_level<4; enc_level++ ) { 8 1266684 : void* mem = fd_quic_pkt_meta_treap_new( &tracker->sent_pkt_metas[enc_level], 9 1266684 : total_meta_cnt ); 10 1266684 : mem = fd_quic_pkt_meta_treap_join( mem ); 11 1266684 : if( FD_UNLIKELY( !mem ) ) return NULL; 12 1266684 : } 13 316671 : tracker->pool = pool; 14 : 15 316671 : return tracker; 16 316671 : } 17 : 18 : void 19 : fd_quic_pkt_meta_ds_init_pool( fd_quic_pkt_meta_t * pool, 20 3387 : ulong total_meta_cnt ) { 21 3387 : fd_quic_pkt_meta_treap_seed( pool, total_meta_cnt, (ulong)fd_log_wallclock() ); 22 3387 : } 23 : 24 : void 25 : fd_quic_pkt_meta_insert( fd_quic_pkt_meta_ds_t * ds, 26 : fd_quic_pkt_meta_t * pkt_meta, 27 13142738 : fd_quic_pkt_meta_t * pool ) { 28 13142738 : fd_quic_pkt_meta_treap_ele_insert( ds, pkt_meta, pool ); 29 13142738 : } 30 : 31 : 32 : ulong 33 : fd_quic_pkt_meta_remove_range( fd_quic_pkt_meta_ds_t * ds, 34 : fd_quic_pkt_meta_t * pool, 35 : ulong pkt_number_lo, 36 247954 : ulong pkt_number_hi ) { 37 : 38 247954 : fd_quic_pkt_meta_ds_fwd_iter_t l_iter = fd_quic_pkt_meta_ds_idx_ge( ds, pkt_number_lo, pool ); 39 247954 : fd_quic_pkt_meta_t * prev = NULL; 40 247954 : ulong cnt_removed = 0; 41 : 42 247954 : for( fd_quic_pkt_meta_ds_fwd_iter_t iter = l_iter; 43 13366330 : !fd_quic_pkt_meta_ds_fwd_iter_done( iter ); 44 13124454 : iter = fd_quic_pkt_meta_ds_fwd_iter_next( iter, pool ) ) { 45 13124454 : fd_quic_pkt_meta_t * e = fd_quic_pkt_meta_ds_fwd_iter_ele( iter, pool ); 46 13124454 : if( FD_UNLIKELY( e->key.pkt_num > pkt_number_hi ) ) break; 47 13118376 : if( FD_LIKELY( prev ) ) { 48 12870491 : fd_quic_pkt_meta_treap_ele_remove( ds, prev, pool ); 49 12870491 : fd_quic_pkt_meta_pool_ele_release( pool, prev ); 50 12870491 : cnt_removed++; 51 12870491 : } 52 13118376 : prev = e; 53 13118376 : } 54 247954 : if( FD_LIKELY( prev ) ) { 55 247885 : fd_quic_pkt_meta_treap_ele_remove( ds, prev, pool ); 56 247885 : fd_quic_pkt_meta_pool_ele_release( pool, prev ); 57 247885 : cnt_removed++; 58 247885 : } 59 247954 : return cnt_removed; 60 247954 : } 61 : 62 : fd_quic_pkt_meta_t * 63 : fd_quic_pkt_meta_min( fd_quic_pkt_meta_ds_t * ds, 64 53667052 : fd_quic_pkt_meta_t * pool ) { 65 : 66 53667052 : fd_quic_pkt_meta_ds_fwd_iter_t iter = fd_quic_pkt_meta_ds_fwd_iter_init( ds, pool ); 67 53667052 : if( FD_UNLIKELY( fd_quic_pkt_meta_ds_fwd_iter_done( iter ) ) ) return NULL; 68 12901207 : return fd_quic_pkt_meta_ds_fwd_iter_ele( iter, pool ); 69 53667052 : } 70 : 71 : void 72 : fd_quic_pkt_meta_ds_clear( fd_quic_pkt_meta_tracker_t * tracker, 73 48168 : uint enc_level ) { 74 48168 : ulong ele_max = fd_quic_pkt_meta_treap_ele_max( &tracker->sent_pkt_metas[enc_level] ); 75 48168 : fd_quic_pkt_meta_treap_new( &tracker->sent_pkt_metas[enc_level], ele_max ); 76 48168 : }