summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorMarios Titas <geopoul@gmail.com>2014-12-10 04:17:22 -0600
committerAustin Seipp <austin@well-typed.com>2014-12-10 04:20:08 -0600
commit7ca5bb090ff78141fbe275b058a9e35ee496bd58 (patch)
tree8c2c9f635746ad42f40e216f1fdea5ae4deea3ac /rts
parent4d1c452daf54e0ed04ee66d6d3ea9078924afd51 (diff)
downloadhaskell-7ca5bb090ff78141fbe275b058a9e35ee496bd58.tar.gz
compiler: fix trac issue #9817
Summary: When we call runHandlers, we must pass it a ForeignPtr. To ensure that this happens, we introduce a wrapper that receives a plain Ptr and converts it into a ForeignPtr. Then we adjust startSignalHandlers in rts/posix/Signals.c to call the wrapper instead of calling runHandlers directly. Reviewers: hvr, austin, rwbarton, simonmar Reviewed By: austin, simonmar Subscribers: simonmar, thomie, carter Differential Revision: https://phabricator.haskell.org/D515 GHC Trac Issues: #9817
Diffstat (limited to 'rts')
-rw-r--r--rts/Prelude.h4
-rw-r--r--rts/RtsStartup.c2
-rw-r--r--rts/package.conf.in4
-rw-r--r--rts/posix/Signals.c2
4 files changed, 6 insertions, 6 deletions
diff --git a/rts/Prelude.h b/rts/Prelude.h
index 614c255af5..ae1e9cb266 100644
--- a/rts/Prelude.h
+++ b/rts/Prelude.h
@@ -48,7 +48,7 @@ PRELUDE_CLOSURE(base_GHCziEventziThread_blockedOnBadFD_closure);
PRELUDE_CLOSURE(base_GHCziConcziSync_runSparks_closure);
PRELUDE_CLOSURE(base_GHCziConcziIO_ensureIOManagerIsRunning_closure);
PRELUDE_CLOSURE(base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure);
-PRELUDE_CLOSURE(base_GHCziConcziSignal_runHandlers_closure);
+PRELUDE_CLOSURE(base_GHCziConcziSignal_runHandlersPtr_closure);
PRELUDE_CLOSURE(base_GHCziTopHandler_flushStdHandles_closure);
@@ -96,7 +96,7 @@ PRELUDE_INFO(base_GHCziStable_StablePtr_con_info);
#define runSparks_closure DLL_IMPORT_DATA_REF(base_GHCziConcziSync_runSparks_closure)
#define ensureIOManagerIsRunning_closure DLL_IMPORT_DATA_REF(base_GHCziConcziIO_ensureIOManagerIsRunning_closure)
#define ioManagerCapabilitiesChanged_closure DLL_IMPORT_DATA_REF(base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure)
-#define runHandlers_closure DLL_IMPORT_DATA_REF(base_GHCziConcziSignal_runHandlers_closure)
+#define runHandlersPtr_closure DLL_IMPORT_DATA_REF(base_GHCziConcziSignal_runHandlersPtr_closure)
#define flushStdHandles_closure DLL_IMPORT_DATA_REF(base_GHCziTopHandler_flushStdHandles_closure)
diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c
index 490f2ead38..190088274e 100644
--- a/rts/RtsStartup.c
+++ b/rts/RtsStartup.c
@@ -223,7 +223,7 @@ hs_init_ghc(int *argc, char **argv[], RtsConfig rts_config)
getStablePtr((StgPtr)ioManagerCapabilitiesChanged_closure);
#ifndef mingw32_HOST_OS
getStablePtr((StgPtr)blockedOnBadFD_closure);
- getStablePtr((StgPtr)runHandlers_closure);
+ getStablePtr((StgPtr)runHandlersPtr_closure);
#endif
/* initialise the shared Typeable store */
diff --git a/rts/package.conf.in b/rts/package.conf.in
index ce44a09651..2670faeb57 100644
--- a/rts/package.conf.in
+++ b/rts/package.conf.in
@@ -109,7 +109,7 @@ ld-options:
, "-Wl,-u,_base_GHCziConcziIO_ensureIOManagerIsRunning_closure"
, "-Wl,-u,_base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure"
, "-Wl,-u,_base_GHCziConcziSync_runSparks_closure"
- , "-Wl,-u,_base_GHCziConcziSignal_runHandlers_closure"
+ , "-Wl,-u,_base_GHCziConcziSignal_runHandlersPtr_closure"
#else
"-Wl,-u,ghczmprim_GHCziTypes_Izh_static_info"
, "-Wl,-u,ghczmprim_GHCziTypes_Czh_static_info"
@@ -151,7 +151,7 @@ ld-options:
, "-Wl,-u,base_GHCziConcziIO_ensureIOManagerIsRunning_closure"
, "-Wl,-u,base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure"
, "-Wl,-u,base_GHCziConcziSync_runSparks_closure"
- , "-Wl,-u,base_GHCziConcziSignal_runHandlers_closure"
+ , "-Wl,-u,base_GHCziConcziSignal_runHandlersPtr_closure"
#endif
/* Pick up static libraries in preference over dynamic if in earlier search
diff --git a/rts/posix/Signals.c b/rts/posix/Signals.c
index 36a72a5c8e..44bd0b6d9c 100644
--- a/rts/posix/Signals.c
+++ b/rts/posix/Signals.c
@@ -473,7 +473,7 @@ startSignalHandlers(Capability *cap)
RtsFlags.GcFlags.initialStkSize,
rts_apply(cap,
rts_apply(cap,
- &base_GHCziConcziSignal_runHandlers_closure,
+ &base_GHCziConcziSignal_runHandlersPtr_closure,
rts_mkPtr(cap, info)),
rts_mkInt(cap, info->si_signo))));
}