Ramsey,
The whole buffer has already been invalidated at the top of HeapMemMP_free() before entering GateMP. IPC 3.21.00.07 HeapMemMP.c
line 772:
/*
* Invalidate entire buffer being freed to ensure that stale cache
* data in block isn't evicted later
*/
if (obj->cacheEnabled) {
Cache_inv(newHeader, size, Cache_Type_ALL, FALSE);
}
line 870 (added in 3.21.00.07):
/*
* Invalidate entire buffer being freed to ensure that stale cache
* data in block isn't evicted later
*/
Cache_inv(newHeader, size, Cache_Type_ALL, TRUE); /* B2 */
Now you invalidate the whole buffer twice.
I'm not sure what did you try to fix but I believe the modifications made are wrong.
Please take a look into HeapMemMP.c from our repo (attached). It contains the fixes described in my earlier post.
Dmitry(Please visit the site to view this file)