| 87 | } |
| 88 | |
| 89 | TIBMemBlock* TIBMemPool::Alloc(size_t sz) { |
| 90 | TGuard<TMutex> gg(CacheLock); |
| 91 | if (sz > IB_MEM_LARGE_BLOCK) { |
| 92 | TIntrusivePtr<TIBMemSuperBlock> super = AllocSuper(sz); |
| 93 | return new TIBMemBlock(super, super->GetData(), sz); |
| 94 | } else { |
| 95 | if (CurrentOffset + sz > IB_MEM_LARGE_BLOCK) { |
| 96 | CurrentBlk.Assign(AllocSuper(IB_MEM_LARGE_BLOCK)); |
| 97 | CurrentOffset = 0; |
| 98 | } |
| 99 | CurrentOffset += sz; |
| 100 | return new TIBMemBlock(CurrentBlk.Get(), CurrentBlk.Get()->GetData() + CurrentOffset - sz, sz); |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | void TIBMemPool::Return(TPtrArg<TIBMemSuperBlock> blk) { |
| 105 | TGuard<TMutex> gg(CacheLock); |
no test coverage detected