blob: 044909b46364b70cae59867597278809f15f8431 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 27cf6137c2..fbd311801d 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -4172,6 +4172,12 @@ _int_free (mstate av, mchunkptr p, int have_lock)
#if USE_TCACHE
{
+ /* Check if chunk is from our own arena or false sharing is not possible
+ because the chunk is cache line aligned and it's size is a multiple
+ of a cacheline */
+ if (av == thread_arena
+ || (((size_t)p & 63) == 0 && ((size + 2*SIZE_SZ) % 64) == 0))
+ {
size_t tc_idx = csize2tidx (size);
if (tcache != NULL && tc_idx < mp_.tcache_bins)
{
@@ -4201,6 +4207,7 @@ _int_free (mstate av, mchunkptr p, int have_lock)
return;
}
}
+ }
}
#endif
|