internal virtual Counter AddCounter(int typeId, IDirectBuffer keyBuffer, int keyOffset, int keyLength, IDirectBuffer labelBuffer, int labelOffset, int labelLength) { _clientLock.Lock(); try { EnsureOpen(); if (keyLength < 0 || keyLength > CountersManager.MAX_KEY_LENGTH) { throw new ArgumentException("key length out of bounds: " + keyLength); } if (labelLength < 0 || labelLength > CountersManager.MAX_LABEL_LENGTH) { throw new ArgumentException("label length out of bounds: " + labelLength); } long registrationId = _driverProxy.AddCounter(typeId, keyBuffer, keyOffset, keyLength, labelBuffer, labelOffset, labelLength); AwaitResponse(registrationId); return((Counter)_resourceByRegIdMap[registrationId]); } finally { _clientLock.Unlock(); } }