LCOV - code coverage report
Current view: top level - disco/keyguard - fd_keyswitch.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 66 0.0 %
Date: 2026-10-22 18:10:43 Functions: 0 6 0.0 %

          Line data    Source code
       1             : #include "fd_keyswitch.h"
       2             : 
       3             : FD_STATIC_ASSERT( sizeof(fd_keyswitch_t)==FD_KEYSWITCH_FOOTPRINT, keyswitch_footprint );
       4             : 
       5             : FD_FN_CONST ulong
       6           0 : fd_keyswitch_align( void ) {
       7           0 :     return FD_KEYSWITCH_ALIGN;
       8           0 : }
       9             : 
      10             : FD_FN_CONST ulong
      11           0 : fd_keyswitch_footprint( void ) {
      12           0 :     return FD_KEYSWITCH_FOOTPRINT;
      13           0 : }
      14             : 
      15             : void *
      16             : fd_keyswitch_new( void * shmem,
      17           0 :                   ulong  state ) {
      18           0 :   fd_keyswitch_t * ks = (fd_keyswitch_t *)shmem;
      19             : 
      20           0 :   if( FD_UNLIKELY( !shmem ) ) {
      21           0 :     FD_LOG_WARNING(( "NULL shmem" ));
      22           0 :     return NULL;
      23           0 :   }
      24             : 
      25           0 :   if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)shmem, fd_keyswitch_align() ) ) ) {
      26           0 :     FD_LOG_WARNING(( "misaligned shmem" ));
      27           0 :     return NULL;
      28           0 :   }
      29             : 
      30           0 :   ulong footprint = fd_keyswitch_footprint();
      31             : 
      32           0 :   fd_memset( ks, 0, footprint );
      33           0 :   ks->state = state;
      34             : 
      35           0 :   FD_COMPILER_MFENCE();
      36           0 :   FD_VOLATILE( ks->magic ) = FD_KEYSWITCH_MAGIC;
      37           0 :   FD_COMPILER_MFENCE();
      38             : 
      39           0 :   return (void *)ks;
      40           0 : }
      41             : 
      42             : fd_keyswitch_t *
      43           0 : fd_keyswitch_join( void * shks ) {
      44             : 
      45           0 :   if( FD_UNLIKELY( !shks ) ) {
      46           0 :     FD_LOG_WARNING(( "NULL shks" ));
      47           0 :     return NULL;
      48           0 :   }
      49             : 
      50           0 :   if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)shks, fd_keyswitch_align() ) ) ) {
      51           0 :     FD_LOG_WARNING(( "misaligned shks" ));
      52           0 :     return NULL;
      53           0 :   }
      54             : 
      55           0 :   fd_keyswitch_t * ks = (fd_keyswitch_t *)shks;
      56             : 
      57           0 :   if( FD_UNLIKELY( ks->magic!=FD_KEYSWITCH_MAGIC ) ) {
      58           0 :     FD_LOG_WARNING(( "bad magic" ));
      59           0 :     return NULL;
      60           0 :   }
      61             : 
      62           0 :   return ks;
      63           0 : }
      64             : 
      65             : void *
      66           0 : fd_keyswitch_leave( fd_keyswitch_t const * ks ) {
      67             : 
      68           0 :   if( FD_UNLIKELY( !ks ) ) {
      69           0 :     FD_LOG_WARNING(( "NULL ks" ));
      70           0 :     return NULL;
      71           0 :   }
      72             : 
      73           0 :   return (void *)ks;
      74           0 : }
      75             : 
      76             : void *
      77           0 : fd_keyswitch_delete( void * shks ) {
      78             : 
      79           0 :   if( FD_UNLIKELY( !shks ) ) {
      80           0 :     FD_LOG_WARNING(( "NULL shks" ));
      81           0 :     return NULL;
      82           0 :   }
      83             : 
      84           0 :   if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)shks, fd_keyswitch_align() ) ) ) {
      85           0 :     FD_LOG_WARNING(( "misaligned shks" ));
      86           0 :     return NULL;
      87           0 :   }
      88             : 
      89           0 :   fd_keyswitch_t * ks = (fd_keyswitch_t *)shks;
      90             : 
      91           0 :   if( FD_UNLIKELY( ks->magic!=FD_KEYSWITCH_MAGIC ) ) {
      92           0 :     FD_LOG_WARNING(( "bad magic" ));
      93           0 :     return NULL;
      94           0 :   }
      95             : 
      96           0 :   FD_COMPILER_MFENCE();
      97           0 :   FD_VOLATILE( ks->magic ) = 0UL;
      98           0 :   FD_COMPILER_MFENCE();
      99             : 
     100           0 :   return (void *)ks;
     101           0 : }

Generated by: LCOV version 1.14