Merge pull request #1598 from lmoriche/master

Fix a code object memory corruption
Этот коммит содержится в:
Rahul Garg
2019-10-31 17:12:24 -07:00
коммит произвёл GitHub
родитель 85d70086cb 91748f4e6c
Коммит 782cf1c007
+12 -7
Просмотреть файл
@@ -200,7 +200,7 @@ public:
std::function<void(hsa_code_object_reader_t*)>>;
std::pair<
std::mutex,
std::vector<RAII_code_reader>> code_readers;
std::vector<std::pair<std::string, RAII_code_reader>>> code_readers;
program_state_impl() {
// Create placeholder for each agent for the per-agent members.
@@ -390,16 +390,21 @@ public:
};
RAII_code_reader tmp{new hsa_code_object_reader_t, cor_deleter};
decltype(code_readers.second)::iterator it;
{
std::lock_guard<std::mutex> lck{code_readers.first};
it = code_readers.second.emplace(code_readers.second.end(),
move(file), move(tmp));
}
hsa_code_object_reader_create_from_memory(
file.data(), file.size(), tmp.get());
it->first.data(), it->first.size(), it->second.get());
hsa_executable_load_agent_code_object(
executable, agent, *tmp, nullptr, nullptr);
executable, agent, *it->second, nullptr, nullptr);
hsa_executable_freeze(executable, nullptr);
std::lock_guard<std::mutex> lck{code_readers.first};
code_readers.second.push_back(move(tmp));
}
@@ -475,7 +480,7 @@ public:
code_object_dynsym,
agent, executable);
load_code_object_and_freeze_executable(ts, agent, executable);
load_code_object_and_freeze_executable(move(ts), agent, executable);
return executable;
}