layers: Report memory leaks as warnings in MemTracker layer.
diff --git a/layers/mem_tracker.c b/layers/mem_tracker.c
index 37e4026..b7e3f65 100644
--- a/layers/mem_tracker.c
+++ b/layers/mem_tracker.c
@@ -1081,6 +1081,13 @@
sprintf(str, "Issue deleting global CB list in xglDestroyDevice()");
layerCbMsg(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0, device, 0, MEMTRACK_INTERNAL_ERROR, "MEM", str);
}
+ // Report any memory leaks
+ GLOBAL_MEM_OBJ_NODE* pTrav = pGlobalMemObjHead;
+ while (pTrav) {
+ sprintf(str, "Mem Object %p has not been freed. You should clean up this memory by calling xglFreeMemory(%p) prior to xglDestroyDevice().", pTrav->mem, pTrav->mem);
+ layerCbMsg(XGL_DBG_MSG_WARNING, XGL_VALIDATION_LEVEL_0, pTrav->mem, 0, MEMTRACK_MEMORY_LEAK, "MEM", str);
+ pTrav = pTrav->pNextGlobalNode;
+ }
XGL_RESULT result = nextTable.DestroyDevice(device);
return result;
}
diff --git a/layers/mem_tracker.h b/layers/mem_tracker.h
index 04ab22b..e9a9d58 100644
--- a/layers/mem_tracker.h
+++ b/layers/mem_tracker.h
@@ -39,5 +39,6 @@
MEMTRACK_DESTROY_OBJECT_ERROR = 11, // Destroying an object that has a memory reference
MEMTRACK_MEMORY_BINDING_ERROR = 12, // Error during one of many calls that bind memory to object or CB
MEMTRACK_OUT_OF_MEMORY_ERROR = 13, // malloc failed
+ MEMTRACK_MEMORY_LEAK = 14, // Failure to call xglFreeMemory on Mem Obj prior to DestroyDevice
} MEM_TRACK_ERROR;