Ensure loaded plugins are not copied.
If a loaded plugin was copied we would try to initialize it a second
time. This would happen if you were running on a libartd.so because
the compiler would not select the move constructor since it wasn't
marked as noexcept.
Bug: 74125483
Test: Run dexmaker tests on a libartd runtime.
Change-Id: If86e4d3ed8fc68fce7295fb3779cb46499f9c72c
diff --git a/runtime/plugin.cc b/runtime/plugin.cc
index 7d86f1d..6f1c517 100644
--- a/runtime/plugin.cc
+++ b/runtime/plugin.cc
@@ -28,10 +28,7 @@
const char* PLUGIN_DEINITIALIZATION_FUNCTION_NAME = "ArtPlugin_Deinitialize";
Plugin::Plugin(const Plugin& other) : library_(other.library_), dlopen_handle_(nullptr) {
- if (other.IsLoaded()) {
- std::string err;
- Load(&err);
- }
+ CHECK(!other.IsLoaded()) << "Should not copy loaded plugins.";
}
bool Plugin::Load(/*out*/std::string* error_msg) {