| 690 | return res; |
| 691 | } |
| 692 | void FreeList(TNode* fl) { |
| 693 | if (!fl) |
| 694 | return; |
| 695 | TNode* flTail = fl; |
| 696 | while (flTail->Next) |
| 697 | flTail = flTail->Next; |
| 698 | for (;;) { |
| 699 | TNode* volatile prevHead = Head; |
| 700 | flTail->Next = prevHead; |
| 701 | if (DoCas(&Head, fl, prevHead) == prevHead) |
| 702 | break; |
| 703 | } |
| 704 | } |
| 705 | |
| 706 | public: |
| 707 | Y_FORCE_INLINE void Free(void* ptr) { |