Line data Source code
1 : #include "fd_capture_ctx.h" 2 : 3 : #include <time.h> 4 : 5 : void * 6 0 : fd_capture_ctx_new( void * mem ) { 7 0 : if( FD_UNLIKELY( !mem ) ) { 8 0 : FD_LOG_WARNING(( "NULL mem" )); 9 0 : return NULL; 10 0 : } 11 : 12 0 : if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)mem, FD_CAPTURE_CTX_ALIGN ) ) ) { 13 0 : FD_LOG_WARNING(( "misaligned mem" )); 14 0 : return NULL; 15 0 : } 16 : 17 0 : fd_memset(mem, 0, FD_CAPTURE_CTX_FOOTPRINT); 18 : 19 0 : fd_capture_ctx_t * self = (fd_capture_ctx_t *) mem; 20 0 : self->capture = (fd_solcap_writer_t *)((uchar *)mem + sizeof(fd_capture_ctx_t)); 21 0 : fd_solcap_writer_new( self->capture ); 22 : 23 0 : FD_COMPILER_MFENCE(); 24 0 : self->magic = FD_CAPTURE_CTX_MAGIC; 25 0 : FD_COMPILER_MFENCE(); 26 : 27 0 : return mem; 28 0 : } 29 : 30 : fd_capture_ctx_t * 31 0 : fd_capture_ctx_join( void * mem ) { 32 0 : if( FD_UNLIKELY( !mem ) ) { 33 0 : FD_LOG_WARNING(( "NULL block" )); 34 0 : return NULL; 35 0 : } 36 : 37 0 : fd_capture_ctx_t * ctx = (fd_capture_ctx_t *) mem; 38 : 39 0 : if( FD_UNLIKELY( ctx->magic!=FD_CAPTURE_CTX_MAGIC ) ) { 40 0 : FD_LOG_WARNING(( "bad magic" )); 41 0 : return NULL; 42 0 : } 43 : 44 0 : return ctx; 45 0 : } 46 : 47 : void * 48 0 : fd_capture_ctx_leave( fd_capture_ctx_t * ctx) { 49 0 : if( FD_UNLIKELY( !ctx ) ) { 50 0 : FD_LOG_WARNING(( "NULL block" )); 51 0 : return NULL; 52 0 : } 53 : 54 0 : if( FD_UNLIKELY( ctx->magic!=FD_CAPTURE_CTX_MAGIC ) ) { 55 0 : FD_LOG_WARNING(( "bad magic" )); 56 0 : return NULL; 57 0 : } 58 : 59 0 : return (void *) ctx; 60 0 : } 61 : 62 : void * 63 0 : fd_capture_ctx_delete( void * mem ) { 64 0 : if( FD_UNLIKELY( !mem ) ) { 65 0 : FD_LOG_WARNING(( "NULL mem" )); 66 0 : return NULL; 67 0 : } 68 : 69 0 : if( FD_UNLIKELY( !fd_ulong_is_aligned( (ulong)mem, FD_CAPTURE_CTX_ALIGN) ) ) { 70 0 : FD_LOG_WARNING(( "misaligned mem" )); 71 0 : return NULL; 72 0 : } 73 : 74 0 : fd_capture_ctx_t * hdr = (fd_capture_ctx_t *)mem; 75 0 : if( FD_UNLIKELY( hdr->magic!=FD_CAPTURE_CTX_MAGIC ) ) { 76 0 : FD_LOG_WARNING(( "bad magic" )); 77 0 : return NULL; 78 0 : } 79 : 80 0 : if( FD_UNLIKELY( fd_solcap_writer_delete( hdr->capture ) == NULL ) ) { 81 0 : FD_LOG_WARNING(( "failed deleting capture" )); 82 0 : return NULL; 83 0 : } 84 : 85 0 : FD_COMPILER_MFENCE(); 86 0 : FD_VOLATILE( hdr->magic ) = 0UL; 87 0 : FD_COMPILER_MFENCE(); 88 : 89 0 : return mem; 90 0 : }