summaryrefslogtreecommitdiff
path: root/driver/utils
diff options
context:
space:
mode:
Diffstat (limited to 'driver/utils')
-rw-r--r--driver/utils/cwrapper.c9
-rw-r--r--driver/utils/cwrapper.h6
-rw-r--r--driver/utils/dynwrapper.c1
3 files changed, 12 insertions, 4 deletions
diff --git a/driver/utils/cwrapper.c b/driver/utils/cwrapper.c
index 5a30274ba7..522c2b329a 100644
--- a/driver/utils/cwrapper.c
+++ b/driver/utils/cwrapper.c
@@ -70,9 +70,12 @@ char *flattenAndQuoteArgs(char *ptr, int argc, char *argv[])
return ptr;
}
+/* This function takes a callback to be called after the creation of the child
+ process but before we block waiting for the child. Can be NULL. */
__attribute__((noreturn)) int run (char *exePath,
int numArgs1, char **args1,
- int numArgs2, char **args2)
+ int numArgs2, char **args2,
+ runCallback callback)
{
int i, cmdline_len;
char *new_cmdline, *ptr;
@@ -134,6 +137,10 @@ __attribute__((noreturn)) int run (char *exePath,
/* Synchronize input and wait for target to be ready. */
WaitForInputIdle(pi.hProcess, INFINITE);
+ /* If we have a registered callback then call it before we block. */
+ if (callback)
+ callback();
+
switch (WaitForSingleObject(pi.hProcess, INFINITE) ) {
case WAIT_OBJECT_0:
{
diff --git a/driver/utils/cwrapper.h b/driver/utils/cwrapper.h
index 324470e5ed..3e9ccd4fe5 100644
--- a/driver/utils/cwrapper.h
+++ b/driver/utils/cwrapper.h
@@ -1,5 +1,7 @@
void die(const char *fmt, ...);
char *mkString(const char *fmt, ...);
-__attribute__((noreturn)) int run(char *exePath, int numArgs1, char **args1, int numArgs2, char **args2);
-
+typedef void (*runCallback)(void);
+__attribute__((noreturn)) int run(char *exePath, int numArgs1, char **args1,
+ int numArgs2, char **args2,
+ runCallback callback);
diff --git a/driver/utils/dynwrapper.c b/driver/utils/dynwrapper.c
index a9250f58ba..7fb06e5945 100644
--- a/driver/utils/dynwrapper.c
+++ b/driver/utils/dynwrapper.c
@@ -155,7 +155,6 @@ HINSTANCE GetNonNullModuleHandle(LPTSTR dll) {
typedef int (*hs_main_t)(int , char **, StgClosure *, RtsConfig);
int main(int argc, char *argv[]) {
- void *p;
HINSTANCE hRtsDll, hProgDll;
LPTSTR oldPath;