Example #1
0
        public void SetReservedHandleObj(int handle, KAutoObject obj)
        {
            int index    = (handle >> 0) & 0x7fff;
            int handleId = (handle >> 15);

            lock (_table)
            {
                KHandleEntry entry = _table[index];

                entry.Obj      = obj;
                entry.HandleId = (ushort)(handle >> 15);

                obj.IncrementReferenceCount();
            }
        }
Example #2
0
        public KernelResult GenerateHandle(KAutoObject obj, out int handle)
        {
            handle = 0;

            lock (_table)
            {
                if (_activeSlotsCount >= _size)
                {
                    return(KernelResult.HandleTableFull);
                }

                KHandleEntry entry = _nextFreeEntry;

                _nextFreeEntry = entry.Next;

                entry.Obj      = obj;
                entry.HandleId = _idCounter;

                _activeSlotsCount++;

                handle = (_idCounter << 15) | entry.Index;

                obj.IncrementReferenceCount();

                if ((short)(_idCounter + 1) >= 0)
                {
                    _idCounter++;
                }
                else
                {
                    _idCounter = 1;
                }
            }

            return(KernelResult.Success);
        }