void MonoAssembly::unload() { if(!mIsLoaded) return; if(mDebugData != nullptr) { mono_debug_close_image(mMonoImage); bs_free(mDebugData); mDebugData = nullptr; } for(auto& entry : mClassesByRaw) bs_delete(entry.second); mClasses.clear(); mClassesByRaw.clear(); mCachedClassList.clear(); if(mMonoImage != nullptr && !mIsDependency) { // Note: I used to call mono_image_close and mono_assembly_close here but those // didn't seem to be necessary and were just crashing the program. mMonoImage = nullptr; } mIsLoaded = false; mIsDependency = false; mMonoAssembly = nullptr; mHaveCachedClassList = false; }
void GDMonoAssembly::unload() { ERR_FAIL_COND(!loaded); #ifdef DEBUG_ENABLED if (pdb_data.size()) { mono_debug_close_image(image); pdb_data.clear(); } #endif for (Map<MonoClass *, GDMonoClass *>::Element *E = cached_raw.front(); E; E = E->next()) { memdelete(E->value()); } cached_classes.clear(); cached_raw.clear(); mono_image_close(image); assembly = NULL; image = NULL; loaded = false; }