Line data Source code
1 : #include "fd_vinyl_admin.h" 2 : #include "../../../util/log/fd_log.h" 3 : 4 : ulong 5 0 : fd_vinyl_admin_align( void ) { 6 0 : return alignof(fd_vinyl_admin_t); 7 0 : } 8 : 9 : ulong 10 0 : fd_vinyl_admin_footprint( void ){ 11 0 : return sizeof(fd_vinyl_admin_t); 12 0 : } 13 : 14 : void * 15 0 : fd_vinyl_admin_new( void * mem ) { 16 0 : fd_vinyl_admin_t * admin = (fd_vinyl_admin_t *)mem; 17 : 18 0 : memset( admin, 0UL, sizeof(fd_vinyl_admin_t) ); 19 : 20 0 : admin->magic = FD_VINYL_ADMIN_MAGIC; 21 : 22 0 : fd_rwlock_new( &admin->lock ); 23 : 24 : /* verbose initialization */ 25 0 : admin->status = FD_VINYL_ADMIN_STATUS_INIT_PENDING; 26 : 27 0 : return (void *)admin; 28 0 : } 29 : 30 : fd_vinyl_admin_t * 31 0 : fd_vinyl_admin_join( void * _admin ) { 32 0 : if( FD_UNLIKELY( !_admin ) ) { 33 0 : FD_LOG_WARNING(( "vinyl admin join NULL" )); 34 0 : return NULL; 35 0 : } 36 : 37 0 : if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)_admin, fd_vinyl_admin_align() ) ) ) { 38 0 : FD_LOG_WARNING(( "vinyl admin join misaligned %p", _admin )); 39 0 : return NULL; 40 0 : } 41 : 42 0 : fd_vinyl_admin_t * admin = (fd_vinyl_admin_t *)_admin; 43 0 : if( FD_UNLIKELY( admin->magic!=FD_VINYL_ADMIN_MAGIC ) ) { 44 0 : FD_LOG_WARNING(( "vinyl admin invalid magic %016lx", admin->magic )); 45 0 : return NULL; 46 0 : } 47 0 : return admin; 48 0 : } 49 : 50 : void * 51 0 : fd_vinyl_admin_leave( fd_vinyl_admin_t * _admin ) { 52 0 : return (void *)_admin; 53 0 : } 54 : 55 : void * 56 0 : fd_vinyl_admin_delete( void * _admin ) { 57 0 : return (void *)_admin; 58 0 : } 59 : 60 : ulong 61 0 : fd_vinyl_admin_ulong_query( ulong const * _field ) { 62 0 : FD_COMPILER_MFENCE(); 63 0 : ulong field = FD_VOLATILE_CONST( *_field ); 64 0 : FD_COMPILER_MFENCE(); 65 0 : return field; 66 0 : } 67 : 68 : void 69 : fd_vinyl_admin_ulong_update( ulong * _field, 70 0 : ulong value ) { 71 0 : FD_COMPILER_MFENCE(); 72 0 : FD_VOLATILE( *_field ) = value; 73 0 : FD_COMPILER_MFENCE(); 74 0 : }