about summary refs log tree commit homepage
path: root/lib/PublicInbox/Spawn.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-01-17 07:19:03 +0000
committerEric Wong <e@80x24.org>2023-01-18 23:25:48 +0000
commit6e9397d12635eae55c9114ed9689413154fed8ce (patch)
tree4ffa8148f76b2fd4c71651df0f2e682f16dfe8d0 /lib/PublicInbox/Spawn.pm
parenta1ee3e0d84fedc4a2dd4e16e7054ee6fdfbe111a (diff)
downloadpublic-inbox-6e9397d12635eae55c9114ed9689413154fed8ce.tar.gz
awaitpid is the new API which will eventually replace dwaitpid.
It enables early registration of callback handlers.  Eventually
(once dwaitpid is gone) it'll be able to use fewer waitpid
calls.

The avoidance of waitpid(-1) in our earlier days was driven by
the belief that threads may eventually become relevant for Perl 5,
but that's extremely unlikely at this stage.  I will still
introduce optional threads via C, but they definitely won't be
spawning/reaping processes.

Argument order to callbacks is swapped (PID first) to allow
flattened multiple arguments more natrually.  The previous API
(allowing only a single argument, as influenced by
pthread_create(3)) was more tedious as it involved packing
multiple arguments into yet another array.
Diffstat (limited to 'lib/PublicInbox/Spawn.pm')
-rw-r--r--lib/PublicInbox/Spawn.pm6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/PublicInbox/Spawn.pm b/lib/PublicInbox/Spawn.pm
index 7f61d8db..826ee508 100644
--- a/lib/PublicInbox/Spawn.pm
+++ b/lib/PublicInbox/Spawn.pm
@@ -365,9 +365,9 @@ sub popen_rd {
         $opt->{1} = fileno($w);
         my $pid = spawn($cmd, $env, $opt);
         return ($r, $pid) if wantarray;
-        my $ret = gensym;
-        tie *$ret, 'PublicInbox::ProcessPipe', $pid, $r, @$opt{qw(cb arg)};
-        $ret;
+        my $s = gensym;
+        tie *$s, 'PublicInbox::ProcessPipe', $pid, $r, @{$opt->{cb_arg} // []};
+        $s;
 }
 
 sub run_die ($;$$) {