diff options
Diffstat (limited to 'rts/Linker.c')
-rw-r--r-- | rts/Linker.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/rts/Linker.c b/rts/Linker.c index fa38480fb6..2d54c29196 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -1239,14 +1239,18 @@ static void freeOcStablePtrs (ObjectCode *oc) { // Release any StablePtrs that were created when this // object module was initialized. - ForeignExportStablePtr *fe_ptr, *next; + struct ForeignExportsList *exports, *next; - for (fe_ptr = oc->stable_ptrs; fe_ptr != NULL; fe_ptr = next) { - next = fe_ptr->next; - freeStablePtr(fe_ptr->stable_ptr); - stgFree(fe_ptr); + for (exports = oc->foreign_exports; exports != NULL; exports = next) { + next = exports->next; + for (int i = 0; i < exports->n_entries; i++) { + freeStablePtr(exports->stable_ptrs[i]); + } + stgFree(exports->stable_ptrs); + exports->stable_ptrs = NULL; + exports->next = NULL; } - oc->stable_ptrs = NULL; + oc->foreign_exports = NULL; } static void @@ -1404,7 +1408,7 @@ mkOc( pathchar *path, char *image, int imageSize, oc->n_segments = 0; oc->segments = NULL; oc->proddables = NULL; - oc->stable_ptrs = NULL; + oc->foreign_exports = NULL; #if defined(NEED_SYMBOL_EXTRAS) oc->symbol_extras = NULL; #endif |