LCOV - code coverage report
Current view: top level - vinyl/cq - fd_vinyl_cq.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 74 0.0 %
Date: 2026-03-19 18:19:27 Functions: 0 6 0.0 %

          Line data    Source code
       1             : #include "fd_vinyl_cq.h"
       2             : 
       3             : ulong
       4           0 : fd_vinyl_cq_align( void ) {
       5           0 :   return alignof(fd_vinyl_cq_t);
       6           0 : }
       7             : 
       8             : ulong
       9           0 : fd_vinyl_cq_footprint( ulong comp_cnt ) {
      10           0 :   if( FD_UNLIKELY( !((4UL<=comp_cnt) & (comp_cnt<(1UL<<63)/sizeof(fd_vinyl_comp_t)) & fd_ulong_is_pow2( comp_cnt )) ) ) return 0UL;
      11           0 :   return fd_ulong_align_up( sizeof(fd_vinyl_cq_t) + comp_cnt*sizeof(fd_vinyl_comp_t), alignof(fd_vinyl_cq_t) ); /* no overflow */
      12           0 : }
      13             : 
      14             : void *
      15             : fd_vinyl_cq_new( void * shmem,
      16           0 :                  ulong  comp_cnt ) {
      17           0 :   fd_vinyl_cq_t * cq = (fd_vinyl_cq_t *)shmem;
      18             : 
      19           0 :   if( FD_UNLIKELY( !cq ) ) {
      20           0 :     FD_LOG_WARNING(( "NULL shmem"));
      21           0 :     return NULL;
      22           0 :   }
      23             : 
      24           0 :   if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)cq, fd_vinyl_cq_align() ) ) ) {
      25           0 :     FD_LOG_WARNING(( "bad align"));
      26           0 :     return NULL;
      27           0 :   }
      28             : 
      29           0 :   ulong footprint = fd_vinyl_cq_footprint( comp_cnt );
      30           0 :   if( FD_UNLIKELY( !footprint) ) {
      31           0 :     FD_LOG_WARNING(( "bad comp_cnt"));
      32           0 :     return NULL;
      33           0 :   }
      34             : 
      35           0 :   memset( cq, 0, footprint );
      36             : 
      37           0 :   cq->comp_cnt = comp_cnt;
      38           0 :   cq->seq      = 0UL;
      39             : 
      40           0 :   fd_vinyl_comp_t * comp = fd_vinyl_cq_comp( cq );
      41             : 
      42           0 :   for( ulong seq=0UL; seq<comp_cnt; seq++ ) comp[ seq ].seq = seq - 1UL; /* Just before the next seq to be written to this entry */
      43             : 
      44           0 :   FD_COMPILER_MFENCE();
      45           0 :   cq->magic = FD_VINYL_CQ_MAGIC;
      46           0 :   FD_COMPILER_MFENCE();
      47             : 
      48           0 :   return cq;
      49           0 : }
      50             : 
      51             : fd_vinyl_cq_t *
      52           0 : fd_vinyl_cq_join ( void * shcq ) {
      53           0 :   fd_vinyl_cq_t * cq = (fd_vinyl_cq_t *)shcq;
      54             : 
      55           0 :   if( FD_UNLIKELY( !cq ) ) {
      56           0 :     FD_LOG_WARNING(( "NULL shcq"));
      57           0 :     return NULL;
      58           0 :   }
      59             : 
      60           0 :   if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)cq, fd_vinyl_cq_align() ) ) ) {
      61           0 :     FD_LOG_WARNING(( "bad align"));
      62           0 :     return NULL;
      63           0 :   }
      64             : 
      65           0 :   if( FD_UNLIKELY( cq->magic!=FD_VINYL_CQ_MAGIC ) ) {
      66           0 :     FD_LOG_WARNING(( "bad magic"));
      67           0 :     return NULL;
      68           0 :   }
      69             : 
      70           0 :   return (fd_vinyl_cq_t *)shcq;
      71           0 : }
      72             : 
      73             : void *
      74           0 : fd_vinyl_cq_leave( fd_vinyl_cq_t * cq ) {
      75             : 
      76           0 :   if( FD_UNLIKELY( !cq ) ) {
      77           0 :     FD_LOG_WARNING(( "NULL cq"));
      78           0 :     return NULL;
      79           0 :   }
      80             : 
      81           0 :   return cq;
      82           0 : }
      83             : 
      84             : void *
      85           0 : fd_vinyl_cq_delete( void * shcq ) {
      86           0 :   fd_vinyl_cq_t * cq = (fd_vinyl_cq_t *)shcq;
      87             : 
      88           0 :   if( FD_UNLIKELY( !cq ) ) {
      89           0 :     FD_LOG_WARNING(( "NULL shcq"));
      90           0 :     return NULL;
      91           0 :   }
      92             : 
      93           0 :   if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)cq, fd_vinyl_cq_align() ) ) ) {
      94           0 :     FD_LOG_WARNING(( "bad align"));
      95           0 :     return NULL;
      96           0 :   }
      97             : 
      98           0 :   if( FD_UNLIKELY( cq->magic!=FD_VINYL_CQ_MAGIC ) ) {
      99           0 :     FD_LOG_WARNING(( "bad magic"));
     100           0 :     return NULL;
     101           0 :   }
     102             : 
     103           0 :   FD_COMPILER_MFENCE();
     104           0 :   cq->magic = 0UL;
     105           0 :   FD_COMPILER_MFENCE();
     106             : 
     107           0 :   return cq;
     108           0 : }

Generated by: LCOV version 1.14