/* * DISTRHO Cardinal Plugin * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of * the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For a full copy of the GNU General Public License see the LICENSE file. */ /** * This file is an edited version of VCVRack's context.cpp * Copyright (C) 2016-2021 VCV. * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #ifdef NDEBUG # undef DEBUG #endif #include "DistrhoUtils.hpp" namespace rack { Context::~Context() { // Deleting NULL is safe in C++. // Set pointers to NULL so other objects will segfault when attempting to access them INFO("Deleting window"); delete window; window = NULL; INFO("Deleting patch manager"); delete patch; patch = NULL; INFO("Deleting scene"); delete scene; scene = NULL; INFO("Deleting event state"); delete event; event = NULL; INFO("Deleting history state"); delete history; history = NULL; INFO("Deleting engine"); delete engine; engine = NULL; } static thread_local Context* threadContext = NULL; Context* contextGet() { DISTRHO_SAFE_ASSERT(threadContext != nullptr); return threadContext; } // Apple's clang incorrectly compiles this function when -O2 or higher is enabled. #ifdef ARCH_MAC __attribute__((optnone)) #endif void contextSet(Context* context) { threadContext = context; } } // namespace rack