LCOV - code coverage report
Current view: top level - disco/keyguard - fd_keyswitch.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 6 66 9.1 %
Date: 2025-03-20 12:08:36 Functions: 2 6 33.3 %

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

Generated by: LCOV version 1.14