Ejemplo n.º 1
0
        public long GetRemainingValue(LimitableResource resource)
        {
            int index = GetIndex(resource);

            lock (_lockObj)
            {
                return(_limit[index] - _current[index]);
            }
        }
Ejemplo n.º 2
0
        public long GetCurrentValue(LimitableResource resource)
        {
            int index = GetIndex(resource);

            lock (_lock)
            {
                return(_current[index]);
            }
        }
Ejemplo n.º 3
0
        public long GetRemainingValue(LimitableResource Resource)
        {
            int Index = GetIndex(Resource);

            lock (LockObj)
            {
                return(Limit[Index] - Current[Index]);
            }
        }
Ejemplo n.º 4
0
        public long GetPeakValue(LimitableResource resource)
        {
            int index = GetIndex(resource);

            lock (_lock)
            {
                return(_peak[index]);
            }
        }
Ejemplo n.º 5
0
        public KernelResult GetResourceLimitCurrentValue32([R(1)] int handle, [R(2)] LimitableResource resource, [R(1)] out int limitValueLow, [R(2)] out int limitValueHigh)
        {
            KernelResult result = _syscall.GetResourceLimitCurrentValue(out long limitValue, handle, resource);

            limitValueHigh = (int)(limitValue >> 32);
            limitValueLow  = (int)(limitValue & uint.MaxValue);

            return(result);
        }
Ejemplo n.º 6
0
        public KernelResult GetResourceLimitPeakValue32([R(1)] int handle, [R(2)] LimitableResource resource, [R(1)] out int peakLow, [R(2)] out int peakHigh)
        {
            KernelResult result = _syscall.GetResourceLimitPeakValue(out long peak, handle, resource);

            peakHigh = (int)(peak >> 32);
            peakLow  = (int)(peak & uint.MaxValue);

            return(result);
        }
Ejemplo n.º 7
0
        public bool Reserve(LimitableResource resource, long amount, long timeout)
        {
            long endTimePoint = KTimeManager.ConvertNanosecondsToMilliseconds(timeout);

            endTimePoint += PerformanceCounter.ElapsedMilliseconds;

            bool success = false;

            int index = GetIndex(resource);

            lock (_lock)
            {
                if (_current2[index] >= _limit[index])
                {
                    return(false);
                }

                long newCurrent = _current[index] + amount;

                while (newCurrent > _limit[index] && _current2[index] + amount <= _limit[index])
                {
                    _waitingThreadsCount++;

                    KConditionVariable.Wait(KernelContext, _waitingThreads, _lock, timeout);

                    _waitingThreadsCount--;

                    newCurrent = _current[index] + amount;

                    if (timeout >= 0 && PerformanceCounter.ElapsedMilliseconds > endTimePoint)
                    {
                        break;
                    }
                }

                if (newCurrent <= _limit[index])
                {
                    _current[index]   = newCurrent;
                    _current2[index] += amount;

                    if (_current[index] > _peak[index])
                    {
                        _peak[index] = _current[index];
                    }

                    success = true;
                }
            }

            return(success);
        }
Ejemplo n.º 8
0
        public void Release(LimitableResource resource, long amount, long amount2)
        {
            int index = GetIndex(resource);

            lock (_lock)
            {
                _current[index]  -= amount;
                _current2[index] -= amount2;

                if (_waitingThreadsCount > 0)
                {
                    KConditionVariable.NotifyAll(KernelContext, _waitingThreads);
                }
            }
        }
Ejemplo n.º 9
0
        private void Release(LimitableResource resource, long usedAmount, long availableAmount)
        {
            int index = GetIndex(resource);

            lock (_lockObj)
            {
                _current  [index] -= usedAmount;
                _available[index] -= availableAmount;

                if (_waitingThreadsCount > 0)
                {
                    KConditionVariable.NotifyAll(_system, _waitingThreads);
                }
            }
        }
Ejemplo n.º 10
0
        private void Release(LimitableResource Resource, long UsedAmount, long AvailableAmount)
        {
            int Index = GetIndex(Resource);

            lock (LockObj)
            {
                Current  [Index] -= UsedAmount;
                Available[Index] -= AvailableAmount;

                if (WaitingThreadsCount > 0)
                {
                    KConditionVariable.NotifyAll(System, WaitingThreads);
                }
            }
        }
Ejemplo n.º 11
0
        public KernelResult SetLimitValue(LimitableResource Resource, long Limit)
        {
            int Index = GetIndex(Resource);

            lock (LockObj)
            {
                if (Current[Index] <= Limit)
                {
                    this.Limit[Index] = Limit;

                    return(KernelResult.Success);
                }
                else
                {
                    return(KernelResult.InvalidState);
                }
            }
        }
Ejemplo n.º 12
0
        public KernelResult SetLimitValue(LimitableResource resource, long limit)
        {
            int index = GetIndex(resource);

            lock (_lockObj)
            {
                if (_current[index] <= limit)
                {
                    _limit[index] = limit;

                    return(KernelResult.Success);
                }
                else
                {
                    return(KernelResult.InvalidState);
                }
            }
        }
Ejemplo n.º 13
0
        public bool Reserve(LimitableResource Resource, long Amount, long Timeout)
        {
            long EndTimePoint = KTimeManager.ConvertNanosecondsToMilliseconds(Timeout);

            EndTimePoint += PerformanceCounter.ElapsedMilliseconds;

            bool Success = false;

            int Index = GetIndex(Resource);

            lock (LockObj)
            {
                long NewCurrent = Current[Index] + Amount;

                while (NewCurrent > Limit[Index] && Available[Index] + Amount <= Limit[Index])
                {
                    WaitingThreadsCount++;

                    KConditionVariable.Wait(System, WaitingThreads, LockObj, Timeout);

                    WaitingThreadsCount--;

                    NewCurrent = Current[Index] + Amount;

                    if (Timeout >= 0 && PerformanceCounter.ElapsedMilliseconds > EndTimePoint)
                    {
                        break;
                    }
                }

                if (NewCurrent <= Limit[Index])
                {
                    Current[Index] = NewCurrent;

                    Success = true;
                }
            }

            return(Success);
        }
Ejemplo n.º 14
0
 public KernelResult GetResourceLimitCurrentValue64([R(1)] int handle, [R(2)] LimitableResource resource, [R(1)] out long limitValue)
 {
     return(_syscall.GetResourceLimitCurrentValue(handle, resource, out limitValue));
 }
Ejemplo n.º 15
0
 public void Release(LimitableResource Resource, long Amount)
 {
     Release(Resource, Amount, Amount);
 }
Ejemplo n.º 16
0
 public void Release(LimitableResource Resource, ulong Amount)
 {
     Release(Resource, (long)Amount);
 }
Ejemplo n.º 17
0
 public bool Reserve(LimitableResource Resource, long Amount)
 {
     return(Reserve(Resource, Amount, KTimeManager.ConvertMillisecondsToNanoseconds(Time10SecondsMs)));
 }
Ejemplo n.º 18
0
 public bool Reserve(LimitableResource Resource, ulong Amount)
 {
     return(Reserve(Resource, (long)Amount));
 }
Ejemplo n.º 19
0
 private static int GetIndex(LimitableResource Resource)
 {
     return((int)Resource);
 }
Ejemplo n.º 20
0
 public bool Reserve(LimitableResource resource, long amount)
 {
     return(Reserve(resource, amount, KTimeManager.ConvertMillisecondsToNanoseconds(DefaultTimeoutMs)));
 }
Ejemplo n.º 21
0
 public KernelResult GetResourceLimitPeakValue64([R(1)] int handle, [R(2)] LimitableResource resource, [R(1)] out long peak)
 {
     return(_syscall.GetResourceLimitPeakValue(handle, resource, out peak));
 }
Ejemplo n.º 22
0
 public bool Reserve(LimitableResource resource, ulong amount)
 {
     return(Reserve(resource, (long)amount));
 }
Ejemplo n.º 23
0
 public void Release(LimitableResource resource, long amount)
 {
     Release(resource, amount, amount);
 }
Ejemplo n.º 24
0
 public void Release(LimitableResource resource, ulong amount)
 {
     Release(resource, (long)amount);
 }
Ejemplo n.º 25
0
 public KernelResult SetResourceLimitLimitValue64([R(0)] int handle, [R(1)] LimitableResource resource, [R(2)] long limitValue)
 {
     return(_syscall.SetResourceLimitLimitValue(handle, resource, limitValue));
 }
Ejemplo n.º 26
0
        public KernelResult SetResourceLimitLimitValue32([R(0)] int handle, [R(1)] LimitableResource resource, [R(2)] uint limitValueLow, [R(3)] uint limitValueHigh)
        {
            long limitValue = (long)(limitValueLow | ((ulong)limitValueHigh << 32));

            return(_syscall.SetResourceLimitLimitValue(handle, resource, limitValue));
        }