summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorAman Gupta <aman@tmm1.net>2015-09-30 19:02:23 -0700
committerAman Gupta <aman@tmm1.net>2015-09-30 19:02:23 -0700
commit9f33baf51b24049f8ead63a8dd7a58db6ef0e490 (patch)
tree32fd0d3cd1f46699ac6424d786f2a0f4dfab4341 /lib
parent2d2f152e3c66af45d262e9ba72f69e67a829c66a (diff)
downloadNim-9f33baf51b24049f8ead63a8dd7a58db6ef0e490.tar.gz
add afterRunEvent callback to execProcesses
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/osproc.nim7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim
index bc73f7119..c23126be9 100644
--- a/lib/pure/osproc.nim
+++ b/lib/pure/osproc.nim
@@ -248,7 +248,8 @@ proc countProcessors*(): int {.rtl, extern: "nosp$1".} =
 proc execProcesses*(cmds: openArray[string],
                     options = {poStdErrToStdOut, poParentStreams},
                     n = countProcessors(),
-                    beforeRunEvent: proc(idx: int) = nil): int
+                    beforeRunEvent: proc(idx: int) = nil,
+                    afterRunEvent: proc(idx: int, p: Process) = nil): int
                     {.rtl, extern: "nosp$1",
                     tags: [ExecIOEffect, TimeEffect, ReadEnvEffect, RootEffect]} =
   ## executes the commands `cmds` in parallel. Creates `n` processes
@@ -278,6 +279,7 @@ proc execProcesses*(cmds: openArray[string],
             err.add("\n")
           echo(err)
         result = max(waitForExit(q[r]), result)
+        if afterRunEvent != nil: afterRunEvent(r, q[r])
         if q[r] != nil: close(q[r])
         if beforeRunEvent != nil:
           beforeRunEvent(i)
@@ -291,6 +293,7 @@ proc execProcesses*(cmds: openArray[string],
           if not running(q[r]):
             #echo(outputStream(q[r]).readLine())
             result = max(waitForExit(q[r]), result)
+            if afterRunEvent != nil: afterRunEvent(r, q[r])
             if q[r] != nil: close(q[r])
             if beforeRunEvent != nil:
               beforeRunEvent(i)
@@ -299,6 +302,7 @@ proc execProcesses*(cmds: openArray[string],
             if i > high(cmds): break
     for j in 0..m-1:
       result = max(waitForExit(q[j]), result)
+      if afterRunEvent != nil: afterRunEvent(j, q[j])
       if q[j] != nil: close(q[j])
   else:
     for i in 0..high(cmds):
@@ -306,6 +310,7 @@ proc execProcesses*(cmds: openArray[string],
         beforeRunEvent(i)
       var p = startProcess(cmds[i], options=options + {poEvalCommand})
       result = max(waitForExit(p), result)
+      if afterRunEvent != nil: afterRunEvent(i, p)
       close(p)
 
 proc select*(readfds: var seq[Process], timeout = 500): int {.benign.}