**Use case**
Very rare deadlock is possible.

**Describe the solution you'd like**
If MemoryTracker is called from operator new, don't:
- log anything (1);
- throw (2).

(1) is strictly necessarily to avoid deadlock;
(2) is almost necessarily to avoid tons of peculiarities in destructors.
LockExceptionInThread & operator=(const LockExceptionInThread &) = delete;
        static thread_local uint64_t counter;
        static thread_local VariableContext level;
        static thread_local bool block_fault_injections;
        VariableContext previous_level;
        bool previous_block_fault_injections;
    public:
        
        
        LockExceptionInThread(VariableContext level_ = VariableContext::User, bool block_fault_injections_ = true);
        ~LockExceptionInThread();
        static bool isBlocked(VariableContext current_level, bool fault_injection)
        {
            return counter > 0 && current_level >= level && (!fault_injection || block_fault_injections);
        }
    };
};
extern MemoryTracker total_memory_tracker;