Skip to content

Instantly share code, notes, and snippets.

@redbo
Created January 16, 2015 19:24
Show Gist options
  • Save redbo/66a57cbf0db62bfd0b1e to your computer and use it in GitHub Desktop.
Save redbo/66a57cbf0db62bfd0b1e to your computer and use it in GitHub Desktop.
type ObjectHandler struct {
...
diskLimit int64
diskInUse map[string]*int64
diskInUseLock *sync.Mutex
}
func (server *ObjectHandler) AcquireDisk(disk string) bool {
if val, ok := server.diskInUse[disk]; !ok {
server.diskInUseLock.Lock()
if _, ok := server.diskInUse[disk]; !ok {
server.diskInUse[disk] = new(int64)
}
server.diskInUseLock.Unlock()
} else if *val > server.diskLimit {
return false
}
atomic.AddInt64(server.diskInUse[disk], 1)
return true
}
func (server *ObjectHandler) ReleaseDisk(disk string) {
atomic.AddInt64(server.diskInUse[disk], -1)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment