github.com/MerlinKodo/gvisor@v0.0.0-20231110090155-957f62ecf90e/pkg/sentry/socket/unix/transport/stream_queue_receiver_mutex.go (about) 1 package transport 2 3 import ( 4 "reflect" 5 6 "github.com/MerlinKodo/gvisor/pkg/sync" 7 "github.com/MerlinKodo/gvisor/pkg/sync/locking" 8 ) 9 10 // Mutex is sync.Mutex with the correctness validator. 11 type streamQueueReceiverMutex struct { 12 mu sync.Mutex 13 } 14 15 var streamQueueReceiverprefixIndex *locking.MutexClass 16 17 // lockNames is a list of user-friendly lock names. 18 // Populated in init. 19 var streamQueueReceiverlockNames []string 20 21 // lockNameIndex is used as an index passed to NestedLock and NestedUnlock, 22 // refering to an index within lockNames. 23 // Values are specified using the "consts" field of go_template_instance. 24 type streamQueueReceiverlockNameIndex int 25 26 // DO NOT REMOVE: The following function automatically replaced with lock index constants. 27 // LOCK_NAME_INDEX_CONSTANTS 28 const () 29 30 // Lock locks m. 31 // +checklocksignore 32 func (m *streamQueueReceiverMutex) Lock() { 33 locking.AddGLock(streamQueueReceiverprefixIndex, -1) 34 m.mu.Lock() 35 } 36 37 // NestedLock locks m knowing that another lock of the same type is held. 38 // +checklocksignore 39 func (m *streamQueueReceiverMutex) NestedLock(i streamQueueReceiverlockNameIndex) { 40 locking.AddGLock(streamQueueReceiverprefixIndex, int(i)) 41 m.mu.Lock() 42 } 43 44 // Unlock unlocks m. 45 // +checklocksignore 46 func (m *streamQueueReceiverMutex) Unlock() { 47 locking.DelGLock(streamQueueReceiverprefixIndex, -1) 48 m.mu.Unlock() 49 } 50 51 // NestedUnlock unlocks m knowing that another lock of the same type is held. 52 // +checklocksignore 53 func (m *streamQueueReceiverMutex) NestedUnlock(i streamQueueReceiverlockNameIndex) { 54 locking.DelGLock(streamQueueReceiverprefixIndex, int(i)) 55 m.mu.Unlock() 56 } 57 58 // DO NOT REMOVE: The following function is automatically replaced. 59 func streamQueueReceiverinitLockNames() {} 60 61 func init() { 62 streamQueueReceiverinitLockNames() 63 streamQueueReceiverprefixIndex = locking.NewMutexClass(reflect.TypeOf(streamQueueReceiverMutex{}), streamQueueReceiverlockNames) 64 }