code: func (l *lockServer) RLock(args *dsync.LockArgs, reply *bool) error {
  	l.mutex.Lock()
  	defer l.mutex.Unlock()
  	lrInfo := lockRequesterInfo{
  		writer:        false,
  		serverAddr:    args.ServerAddr,
  		rpcPath:       args.ServiceEndpoint,
  		uid:           args.UID,
  		timestamp:     time.Now().UTC(),
  		timeLastCheck: time.Now().UTC(),
  	}
  	if lri, ok := l.lockMap[args.Resource]; ok {
  		if *reply = !isWriteLock(lri); *reply { // Unless there is a write lock
  			l.lockMap[args.Resource] = append(l.lockMap[args.Resource], lrInfo)
  		}
  	} else { // No locks held on the given name, so claim (first) read lock
  		l.lockMap[args.Resource] = []lockRequesterInfo{lrInfo}
  		*reply = true
  	}
  	return nil
  }
docs: // RLock - rpc handler for read lock operation.