From 8901285ef64ab4aa16aa34096a1e2be42d4be246 Mon Sep 17 00:00:00 2001 From: Duncan Coutts Date: Tue, 29 Dec 2020 00:51:32 +0000 Subject: Add hook markCapabilityIOManager To allow I/O managers to have GC roots in the Capability, within the CapIOManager structure. Not yet used in this patch. --- rts/Capability.c | 2 ++ rts/IOManager.c | 7 +++++++ rts/IOManager.h | 8 ++++++++ 3 files changed, 17 insertions(+) diff --git a/rts/Capability.c b/rts/Capability.c index 05332514e3..afe21fcb46 100644 --- a/rts/Capability.c +++ b/rts/Capability.c @@ -1322,6 +1322,8 @@ markCapability (evac_fn evac, void *user, Capability *cap, } #endif + markCapabilityIOManager(evac, user, cap->iomgr); + // Free STM structures for this Capability stmPreGCHook(cap); } diff --git a/rts/IOManager.c b/rts/IOManager.c index 6782c3984d..5a6347c537 100644 --- a/rts/IOManager.c +++ b/rts/IOManager.c @@ -150,6 +150,13 @@ void wakeupIOManager(void) } +void markCapabilityIOManager(evac_fn evac STG_UNUSED, + void *user STG_UNUSED, + CapIOManager *iomgr STG_UNUSED) +{ +} + + /* Declared in rts/IOInterface.h. Used only by the MIO threaded I/O manager on * Unix platforms. */ diff --git a/rts/IOManager.h b/rts/IOManager.h index ed7b4dcdcf..ceb38508ea 100644 --- a/rts/IOManager.h +++ b/rts/IOManager.h @@ -21,6 +21,9 @@ #include "BeginPrivate.h" +#include "sm/GC.h" // for evac_fn + + /* The per-capability data structures belonging to the I/O manager. * * It can be accessed as cap->iomgr. @@ -97,6 +100,11 @@ void exitIOManager(bool wait_threads); void wakeupIOManager(void); +/* GC hook: mark any per-capability GC roots the I/O manager uses. + */ +void markCapabilityIOManager(evac_fn evac, void *user, CapIOManager *iomgr); + + /* Pedantic warning cleanliness */ #if !defined(THREADED_RTS) && defined(mingw32_HOST_OS) -- cgit v1.2.1