diff --git a/cbits/runProcess.c b/cbits/runProcess.c
--- a/cbits/runProcess.c
+++ b/cbits/runProcess.c
@@ -903,8 +903,12 @@
     // List of events we can listen to:
     // https://msdn.microsoft.com/en-us/library/windows/desktop/ms684141(v=vs.85).aspx
     while (GetQueuedCompletionStatus (ioPort, &CompletionCode,
-           &CompletionKey, &Overlapped, timeout)) {
+                                      &CompletionKey, &Overlapped, timeout)) {
 
+        // If event wasn't meant of us, keep listening.
+        if ((HANDLE)CompletionKey != hJob)
+          continue;
+
         switch (CompletionCode)
         {
             case JOB_OBJECT_MSG_NEW_PROCESS:
@@ -930,6 +934,10 @@
                     maperrno();
                     return 1;
                 }
+
+                // Check to see if the child has actually exited.
+                if (*(DWORD *)pExitCode == STILL_ACTIVE)
+                  waitForProcess ((ProcHandle)pHwnd, pExitCode);
             }
             break;
             case JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO:
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,11 @@
 # Changelog for [`process` package](http://hackage.haskell.org/package/process)
 
+## 1.6.7.0 *November 2019*
+
+* Fix a race condition on Windows that happens when you use process jobs and one of
+  the child processes terminates but doesn't release its resources immediately.
+  Control returns to the caller too soon in this scenario. See [#159](https://github.com/haskell/process/pull/159)
+
 ## 1.6.6.0 *October 2019*
 
 * Fix a potential privilege escalation issue (or, more precisely, privileges
@@ -27,7 +33,7 @@
 
 * Bug fix: Don't leak pipes on failure
   [#122](https://github.com/haskell/process/issues/122)
-* Expose `cleanupProcess` from `System.Process` 
+* Expose `cleanupProcess` from `System.Process`
   [#130](https://github.com/haskell/process/pull/130)
 * Drop support for GHC before 7.10.3
 
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -653,6 +653,7 @@
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -723,6 +724,7 @@
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -975,6 +977,15 @@
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1112,7 +1123,7 @@
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
+		libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1265,6 +1276,7 @@
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
diff --git a/process.cabal b/process.cabal
--- a/process.cabal
+++ b/process.cabal
@@ -1,5 +1,5 @@
 name:          process
-version:       1.6.6.0
+version:       1.6.7.0
 -- NOTE: Don't forget to update ./changelog.md
 license:       BSD3
 license-file:  LICENSE
@@ -55,7 +55,7 @@
     other-modules: System.Process.Common
     if os(windows)
         other-modules: System.Process.Windows
-        build-depends: Win32 >=2.2 && < 2.7
+        build-depends: Win32 >=2.2 && < 2.9
         extra-libraries: kernel32
         cpp-options: -DWINDOWS
     else
@@ -73,7 +73,7 @@
 
     ghc-options: -Wall
 
-    build-depends: base      >= 4.8.2 && < 4.14,
+    build-depends: base      >= 4.8.2 && < 4.15,
                    directory >= 1.1 && < 1.4,
                    filepath  >= 1.2 && < 1.5,
                    deepseq   >= 1.1 && < 1.5
