Lock tuning and registry release fix.
[ric-plt/submgr.git] / pkg / control / registry.go
index 98aa97e..03e90ae 100644 (file)
@@ -24,11 +24,11 @@ import (
        "sync"
 )
 
-var registryMutex = &sync.Mutex{}
 
 type Registry struct {
        register map[uint16]bool
        counter  uint16
+       mutex sync.Mutex
 }
 
 // This method should run as a constructor
@@ -40,8 +40,8 @@ func (r *Registry) Initialize(seedsn uint16) {
 // Reserves and returns the next free sequence number
 func (r *Registry) ReserveSequenceNumber() (uint16, bool) {
        // Check is current SequenceNumber valid
-       registryMutex.Lock()
-       defer registryMutex.Unlock()
+       r.mutex.Lock()
+       defer r.mutex.Unlock()
        sequenceNumber := r.counter
        if _, ok := r.register[sequenceNumber]; ok {
                xapp.Logger.Error("Invalid SeqenceNumber sequenceNumber: %v",sequenceNumber)
@@ -60,8 +60,8 @@ func (r *Registry) ReserveSequenceNumber() (uint16, bool) {
 
 // This function checks the validity of the given subscription id
 func (r *Registry) IsValidSequenceNumber(sn uint16) bool {
-       registryMutex.Lock()
-       defer registryMutex.Unlock()
+       r.mutex.Lock()
+       defer r.mutex.Unlock()
        xapp.Logger.Debug("Registry map: %v", r.register)
        if _, ok := r.register[sn]; ok {
                return true
@@ -71,26 +71,26 @@ func (r *Registry) IsValidSequenceNumber(sn uint16) bool {
 
 // This function sets the give id as confirmed in the register
 func (r *Registry) setSubscriptionToConfirmed(sn uint16) {
-       registryMutex.Lock()
-       defer registryMutex.Unlock()
+       r.mutex.Lock()
+       defer r.mutex.Unlock()
        r.register[sn] = true
 }
 
 //This function sets the given id as unused in the register
 func (r *Registry) deleteSubscription(sn uint16) {
-       registryMutex.Lock()
-       defer registryMutex.Unlock()
+       r.mutex.Lock()
+       defer r.mutex.Unlock()
        r.register[sn] = false
 }
 
 //This function releases the given id as unused in the register
 func (r *Registry) releaseSequenceNumber(sn uint16) bool {
-       registryMutex.Lock()
-       defer registryMutex.Unlock()
-       if r.register[sn] {
-               return false
-               } else {
+       r.mutex.Lock()
+       defer r.mutex.Unlock()
+       if _, ok := r.register[sn]; ok {
                delete(r.register, sn)
                return true
+       } else {
+               return false
        }
 }