diff options
| author | Sven Tennie <sven.tennie@gmail.com> | 2020-10-31 13:28:54 -0400 |
|---|---|---|
| committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-09-23 15:59:38 -0400 |
| commit | 6f7f59901c047882ba8c9ae8812264f86b12483a (patch) | |
| tree | dbff896e8fb871d947b20c3b58736b82469be89a /rts/CloneStack.h | |
| parent | 022d9717d06542c2345e27ef018390a9d034a1f1 (diff) | |
| download | haskell-6f7f59901c047882ba8c9ae8812264f86b12483a.tar.gz | |
Introduce stack snapshotting / cloning (#18741)
Add `StackSnapshot#` primitive type that represents a cloned stack (StgStack).
The cloning interface consists of two functions, that clone either the treads
own stack (cloneMyStack) or another threads stack (cloneThreadStack).
The stack snapshot is offline/cold, i.e. it isn't evaluated any further. This is
useful for analyses as it prevents concurrent modifications.
For technical details, please see Note [Stack Cloning].
Co-authored-by: Ben Gamari <bgamari.foss@gmail.com>
Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com>
Diffstat (limited to 'rts/CloneStack.h')
| -rw-r--r-- | rts/CloneStack.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/rts/CloneStack.h b/rts/CloneStack.h new file mode 100644 index 0000000000..5f1c22039d --- /dev/null +++ b/rts/CloneStack.h @@ -0,0 +1,23 @@ +/* --------------------------------------------------------------------------- + * + * (c) The GHC Team, 2001-2021 + * + * Stack snapshotting. + */ + +#pragma once + +extern StgClosure DLL_IMPORT_DATA_VARNAME(base_GHCziStackziCloneStack_StackSnapshot_closure); +#define StackSnapshot_constructor_closure DLL_IMPORT_DATA_REF(base_GHCziStackziCloneStack_StackSnapshot_closure) + +StgStack* cloneStack(Capability* capability, const StgStack* stack); + +void sendCloneStackMessage(StgTSO *tso, HsStablePtr mvar); + +#include "BeginPrivate.h" + +#if defined(THREADED_RTS) +void handleCloneStackMessage(MessageCloneStack *msg); +#endif + +#include "EndPrivate.h" |
