MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / unlock

Method unlock

src/backend/common/DefaultMemoryManager.cpp:235–282  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

233}
234
235void DefaultMemoryManager::unlock(void *ptr, bool user_unlock) {
236 // Shortcut for empty arrays
237 if (!ptr) { return; }
238
239 // Frees the pointer outside the lock.
240 uptr_t freed_ptr(nullptr, [this](void *p) { this->nativeFree(p); });
241 {
242 lock_guard_t lock(this->memory_mutex);
243 memory_info &current = this->getCurrentMemoryInfo();
244
245 auto locked_buffer_iter = current.locked_map.find(ptr);
246 if (locked_buffer_iter == current.locked_map.end()) {
247 // Pointer not found in locked map
248 // Probably came from user, just free it
249 freed_ptr.reset(ptr);
250 return;
251 }
252 locked_info &locked_buffer_info = locked_buffer_iter->second;
253 void *locked_buffer_ptr = locked_buffer_iter->first;
254
255 if (user_unlock) {
256 locked_buffer_info.user_lock = false;
257 } else {
258 locked_buffer_info.manager_lock = false;
259 }
260
261 // Return early if either one is locked
262 if (locked_buffer_info.user_lock || locked_buffer_info.manager_lock) {
263 return;
264 }
265
266 size_t bytes = locked_buffer_info.bytes;
267 current.lock_bytes -= locked_buffer_info.bytes;
268 current.lock_buffers--;
269
270 if (this->debug_mode) {
271 // Just free memory in debug mode
272 if (locked_buffer_info.bytes > 0) {
273 freed_ptr.reset(locked_buffer_ptr);
274 current.total_buffers--;
275 current.total_bytes -= locked_buffer_info.bytes;
276 }
277 } else {
278 current.free_map[bytes].emplace_back(ptr);
279 }
280 current.locked_map.erase(locked_buffer_iter);
281 }
282}
283
284void DefaultMemoryManager::signalMemoryCleanup() {
285 cleanDeviceMemoryManager(this->getActiveDeviceId());

Callers 14

userUnlockMethod · 0.95
memFreeFunction · 0.45
memFreeUserFunction · 0.45
pinnedFreeFunction · 0.45
memFreeFunction · 0.45
memFreeUserFunction · 0.45
bufferFreeFunction · 0.45
pinnedFreeFunction · 0.45
memFreeFunction · 0.45
memFreeUserFunction · 0.45
pinnedFreeFunction · 0.45
memFreeFunction · 0.45

Calls 3

findMethod · 0.80
resetMethod · 0.80
nativeFreeMethod · 0.45

Tested by

no test coverage detected