Commit Graph

281 Commits

Author SHA1 Message Date
Nathaniel Filardo
7ed80e7244 Report error on pagemap ABI mismatch 2019-11-25 15:22:53 +00:00
Nathaniel Filardo
d5b478ecb3 Deconflate "Pagemap" objects
There are two things calling themselves pagemaps:

- the src/mem/pagemap.h objects of that name

- the SuperslabMap object gets called a PageMap inside the Allocator

Rename the latter to chunkmap, with appropriate case and snake,
everywhere, and pull it out to its own file (chunkmap.h).

The default implementation of a chunkmap is a purely static object, but
we nevertheless instantiate it per allocator, so that other
implementations can use stateful instances when interposing on the
mutation methods.  Note that the "get" method, however, must remain
static to support the interface required by Allocator objects.
2019-11-21 15:35:56 +00:00
Nathaniel Filardo
3b2f521c46 allocstats: assert count doesn't go negative 2019-11-14 22:59:02 +00:00
Nathaniel Filardo
574700318e debug_is_empty: don't dealloc() free space
We know that these are small objects and that they have already had
their cache friendly offsets applied, so jump in to the dealloc path
futher down, below the stats calls.

Split small_dealloc_offseted into a wrapper around the core to avoid
inlining too much into the debug function.

While here, move the handling of the Remote objects into its own block
so that `p` is out of scope thereafter.

Fixes https://github.com/microsoft/snmalloc/issues/98
2019-11-14 22:59:02 +00:00
Matthew Parkinson
97c87f2e91 Merge pull request #96 from microsoft/usemalloc_fix
Modified pass through
2019-11-14 14:48:58 +00:00
Matthew Parkinson
7a3f0eb50b Clang format 2019-11-14 14:23:56 +00:00
Matthew Parkinson
4046417f25 Fix cache friendly offset. 2019-11-14 14:02:50 +00:00
Matthew Parkinson
74cc475787 Code review feedback. 2019-11-14 13:34:57 +00:00
Matthew Parkinson
14383614e0 Clang tidy 2019-11-14 13:04:24 +00:00
Matthew Parkinson
c2799f6ec8 Make debug_check_empty not use statistics
Debug_check_empty now empties the free lists, and checks it empties all the
queues in the allocator.  This does not require statistic tracking to
work anymore.

This additionally can check internal regression that cause leaks that
are not the clients fault.
2019-11-14 12:55:23 +00:00
Matthew Parkinson
23b4230f6a Fixed leak in free list.
If the first call to alloc uses the minimum size class, then we end up
leaking a whole page of allocations. We fill the small_fast_free_list,
in a call to build the message_queue. But this means the
small_fast_free_list[0] is not empty.  But the code was staying on the
slow path, and overwriting it.
2019-11-14 12:50:53 +00:00
Matthew Parkinson
3d0ba82b8d Modified pass through
If we are using USE_MALLOC pass through, then ThreadAlloc::get() can
cause an allocation inside snmalloc still, as it builds the thread
local allocator, which allocs a single stub allocator, using
the underlying allocator. This means that ASAN would detect a
leak in a client, even though the client program has none.

This change stops us ever allocating allocators, if we are passing
through calls to an underlying allocator.
2019-11-13 15:34:36 +00:00
Matthew Parkinson
f214abde3f Typo in assertion. 2019-09-30 13:43:32 +01:00
David Chisnall
6188667476 Revert the change to make the pool global type safe.
This adds lazy initialization, which adds a conditional branch on some
hot paths.

Fixes #93
2019-09-12 17:33:59 +01:00
David Chisnall
0b2b4d68a2 Revert "Add type confusion protection to the default memory provider."
This reverts commit d56201e28d.
2019-09-12 17:16:48 +01:00
David Carlier
281a88d404 Templatize the Tag ID value 2019-08-27 13:10:50 +00:00
David Carlier
eed50baf8e Little tweaks 2019-08-27 10:42:57 +00:00
David Carlier
c881429e2e Using the macro instead 2019-08-27 10:20:16 +00:00
David Carlier
24ae5d704e darwin: override zero/non zeroed pages to tag them. 2019-08-26 18:57:45 +01:00
Matthew Parkinson
4827b7615b Fix inline statics in Pal_Windows. 2019-08-15 11:38:45 +01:00
Matthew Parkinson
ae05ed4dfd default_memory_provider is a function now. 2019-08-15 11:38:44 +01:00
Matthew Parkinson
18da679042 Missing setup call. 2019-08-15 10:52:08 +01:00
Matthew Parkinson
e7f9b6e0d9 Add missing UNUSED 2019-08-15 10:52:07 +01:00
Matthew Parkinson
da91c035a9 Shrink size on test on Windows due to taking too long. 2019-08-15 10:52:07 +01:00
Matthew Parkinson
9eaadcd6d8 Reduce parallism in tests
If some tests on Windows are co-scheduled, then they run out of commit
space and crash. For example, in func-memory,
test_external_pointer_large can cause the small CI machines to run out
of commit space on Windows.
2019-08-15 10:50:54 +01:00
Matthew Parkinson
56ccd2108c Handle exceptions and print stack traces. 2019-08-15 10:49:02 +01:00
David Chisnall
d56201e28d Add type confusion protection to the default memory provider. 2019-08-13 17:30:37 +01:00
David Chisnall
6dbe24da2e [NFC] Replace HEADER_GLOBAL with inline (C++17).
HEADER_GLOBAL was using non-standard attributes to achieve what C++17
now permits with a keyword.  Use the standard formulation.

Update the README to note that gcc is still not recommended, but because
of its poor codegen for 128-bit atomic compare and exchange, rather than
because it doesn't support the attribute used for HEADER_GLOBAL.
2019-08-13 17:30:37 +01:00
David Chisnall
bbf016bac8 Merge pull request #84 from microsoft/bug-fix
Bug fix
2019-08-13 16:57:21 +01:00
Matthew Parkinson
e9432fe9ca Shrink reserve as failing in CI. 2019-08-13 16:31:41 +01:00
Matthew Parkinson
16b084f501 Changed abort behaviour for Windows CI. 2019-08-13 15:37:54 +01:00
David Chisnall
d2dc653af2 Make the pagemap global typed.
The pagemap global is now an inline static of a template class, so that
we will see different symbols for the different types.

Issue #84 showed that it's possible to compile two compilation units
with different pagemaps, link them together, and have them attempt to
interpret the global pagemap as two different types.  This change should
make that impossible.

Also make the `pagemap()` function static so that it can be used from
static functions, avoiding other things that directly reference the
global pagemap.
2019-08-13 14:24:50 +01:00
Matthew Parkinson
dd3feb948c Deal with wrap around in statistics. 2019-08-13 13:43:20 +01:00
Matthew Parkinson
bef2fb94d8 Clangformat 2019-08-13 13:27:33 +01:00
Matthew Parkinson
f545c1c790 Test for debug_check_emtpy. 2019-08-13 13:04:29 +01:00
Matthew Parkinson
e6b4efd980 Don't apply changes to GlobalPlaceholder. 2019-08-13 13:04:29 +01:00
Matthew Parkinson
cbb1063e82 Fix up checking for empty to account for stub messages. 2019-08-13 13:03:06 +01:00
Matthew Parkinson
6151b7a9b2 Make test_realloc not leak in failure case. 2019-08-13 13:03:06 +01:00
Matthew Parkinson
a32882cd55 Make malloc functional test check for leaks. 2019-08-13 13:03:06 +01:00
David Chisnall
b1e4146239 Remove leftover (incorrect) conditional compilation. 2019-08-01 15:31:21 +01:00
David Chisnall
84140722fa Fix typo in NetBSD PAL. 2019-08-01 14:57:15 +01:00
David Chisnall
d24ad45abe [NFC] clangformat. 2019-08-01 12:03:35 +01:00
David Chisnall
81a0f0aed8 [NFC] Remove one more unneeded include. 2019-08-01 11:50:35 +01:00
David Chisnall
d11f09e4ec [NFC] Remove incorrect guard and some unused includes. 2019-08-01 11:50:27 +01:00
David Chisnall
896cc9cf6f [NFC] Rename some PALs to make the naming more consistent. 2019-08-01 11:44:09 +01:00
David Chisnall
2b44b6b5ea Add a NetBSD PAL.
Currently untested, but identical to the FreeBSD one so should work...
The NetBSD man pages for `madvise` and `mmap` mention the flags that we
use.
2019-08-01 11:41:08 +01:00
David Chisnall
fd88b8464b [NFC] Separate out support for aligned allocation from the FreeBSD PAL.
NetBSD also supports `MAP_ALIGNED()` in `mmap` (according to the man
page, at least).
2019-08-01 11:39:26 +01:00
David Chisnall
cf6fca6514 [NFC] Make the Apple PAL use the generic BSD code. 2019-08-01 11:21:32 +01:00
David Chisnall
54cbf8b2bb [NFC] Remove unused headers from OpenBSD PAL. 2019-08-01 11:21:28 +01:00
David Chisnall
0497993d23 Fix typo in OpenBSD PAL. 2019-08-01 11:20:05 +01:00