diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Wetterhorn/Core.hs | 2 | ||||
-rw-r--r-- | src/harness_adapter.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/Wetterhorn/Core.hs b/src/Wetterhorn/Core.hs index 36b0f82..2f885f9 100644 --- a/src/Wetterhorn/Core.hs +++ b/src/Wetterhorn/Core.hs @@ -101,7 +101,7 @@ defaultConfig = WConfig { keybindingHandler = \keyEvent -> do i <- incrementState - wio $ printf "%d - got %s\n" i (show keyEvent) + wio $ printf "%d - Got %s\n" i (show keyEvent) maybe (return False) (fmap (const True)) $ Map.lookup (state keyEvent, modifiers keyEvent, keysym keyEvent) diff --git a/src/harness_adapter.c b/src/harness_adapter.c index b18f8d2..8663b6a 100644 --- a/src/harness_adapter.c +++ b/src/harness_adapter.c @@ -16,6 +16,8 @@ void* get_foreign_interface() return foreign_interface; } +extern void performMajorGC(); + void plugin_metaload(int argc, char** argv) { hs_init(&argc, &argv); @@ -25,7 +27,14 @@ void plugin_load(int argc, char **argv, foreign_interface_t* fintf) { hs_init(&argc, &argv); foreign_interface = fintf; } + void plugin_teardown(opqst_t st) { + // the opaque state should be dereferenced by now. Perform a major GC to help + // clean up before doing a reload. + // + // Used primarily in the case where the RTS is kept alive when performing a + // hot-reload. + performMajorGC(); hs_exit(); // There's a race condition between when this shared library is unloaded and |