Skip to content
Next Next commit
Fix dereference of memory_info iterator before check
  • Loading branch information
umar456 committed Apr 19, 2020
commit 62f9a3a88b56b4a59a27184e33a39b2ed4518759
12 changes: 5 additions & 7 deletions src/backend/common/DefaultMemoryManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,11 @@ void *DefaultMemoryManager::alloc(bool user_lock, const unsigned ndims,

lock_guard_t lock(this->memory_mutex);
auto free_buffer_iter = current.free_map.find(alloc_bytes);
vector<void *> &free_buffer_vector = free_buffer_iter->second;

if (free_buffer_iter != current.free_map.end() &&
!free_buffer_vector.empty()) {
!free_buffer_iter->second.empty()) {
// Delete existing buffer info and underlying event
// Set to existing in from free map
vector<void *> &free_buffer_vector = free_buffer_iter->second;
ptr = free_buffer_vector.back();
free_buffer_vector.pop_back();
current.locked_map[ptr] = info;
Expand Down Expand Up @@ -223,15 +222,14 @@ void DefaultMemoryManager::unlock(void *ptr, bool user_unlock) {
memory_info &current = this->getCurrentMemoryInfo();

auto locked_buffer_iter = current.locked_map.find(ptr);
locked_info &locked_buffer_info = locked_buffer_iter->second;
void *locked_buffer_ptr = locked_buffer_iter->first;

// Pointer not found in locked map
if (locked_buffer_iter == current.locked_map.end()) {
// Pointer not found in locked map
// Probably came from user, just free it
freed_ptr.reset(ptr);
return;
}
locked_info &locked_buffer_info = locked_buffer_iter->second;
void *locked_buffer_ptr = locked_buffer_iter->first;

if (user_unlock) {
locked_buffer_info.user_lock = false;
Expand Down