**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.
BlockerInThread & operator=(const BlockerInThread &) = delete;
        static thread_local uint64_t counter;
        static thread_local VariableContext level;
        VariableContext previous_level;
    public:
        
        BlockerInThread(VariableContext level_ = VariableContext::User);
        ~BlockerInThread();
        static bool isBlocked(VariableContext current_level)
        {
            return counter > 0 && current_level >= level;
        }
    };
    
    
    
    
    
    
    
    
    
    
    
    
    struct LockExceptionInThread
    {
    private:
        LockExceptionInThread(const LockExceptionInThread &) = delete;