Skip to content

Instantly share code, notes, and snippets.

@skaji
Last active August 20, 2017 10:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skaji/b0b210304e932445890f2a28cf7f53b0 to your computer and use it in GitHub Desktop.
Save skaji/b0b210304e932445890f2a28cf7f53b0 to your computer and use it in GitHub Desktop.

Proc::Async.bind-stdin leaves a unix socket open

I found that Proc::Async.bind-stdin left a unix socket open.

Should I call some methods on Proc::Async if I use bind-stdin?

How to reproduce this issue

The following script demonstrates this issue. https://gist.github.com/skaji/b0b210304e932445890f2a28cf7f53b0#file-bind-stdin-test-p6

❯ perl6 bind-stdin-test.p6 20 >/dev/null
run 20 tests, leaves 152 files open
❯ perl6 bind-stdin-test.p6 21 >/dev/null
run 21 tests, leaves 153 files open
❯ perl6 bind-stdin-test.p6 22 >/dev/null
run 22 tests, leaves 154 files open
❯ perl6 bind-stdin-test.p6 23 >/dev/null
run 23 tests, leaves 155 files open

This shows everytime we call bind-stdin method, the number of open files increases.

The output of lsof -p PID in macos is below:

...
moar    44821 skaji  139u    unix 0xf2addbda53e4c6b7       0t0          ->(none)
moar    44821 skaji  140u    unix 0xf2addbda53e4c077       0t0          ->(none)
moar    44821 skaji  141u    unix 0xf2addbda53e4c90f       0t0          ->0xf2addbda53e4c77f

See https://gist.github.com/skaji/b0b210304e932445890f2a28cf7f53b0#file-zz-result-on-macos-txt

My environment

  • This is Rakudo version 2017.07-202-ge3e29c5 built on MoarVM version 2017.07-444-g88c6851
  • Both macOS Sierra (10.12.6) and Ubuntu 16.04 64bit (linux 4.4.0)
#!/usr/bin/env perl6
use v6.c;
sub test() {
# https://github.com/perl6/roast/blob/b4a569e9b8fe08db11524a7b92215925e1fcb9a4/S17-procasync/bind-handles.t#L113-L114
my $proc1 = Proc::Async.new($*EXECUTABLE, '-e', 'say "plumbed together"');
my $proc2 = Proc::Async.new($*EXECUTABLE, '-e', '$*IN.get.uc.say');
$proc2.bind-stdin($proc1.stdout);
await ($proc1, $proc2).map(*.start);
return;
}
my $num = @*ARGS.shift || 1;
test() for 1..$num;
my @line = run("lsof", "-p", $*PID, :out).out.lines(:close);
do { note($_) for @line } if %*ENV<DEBUG>;
note "run $num tests, leaves {+@line} files open";
❯ DEBUG=1 perl6 bind-stdin-test.p6 40
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
moar 44821 skaji cwd DIR 1,5 3842 452702 /Users/skaji
moar 44821 skaji txt REG 1,5 14040 69665257 /Users/skaji/env/rakudobrew/moar-nom/install/bin/moar
moar 44821 skaji txt REG 1,5 4242028 69665259 /Users/skaji/env/rakudobrew/moar-nom/install/lib/libmoar.dylib
moar 44821 skaji txt REG 1,5 10240 69665785 /Users/skaji/env/rakudobrew/moar-nom/install/share/perl6/runtime/perl6.moarvm
moar 44821 skaji txt REG 1,5 11160 69665692 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/ModuleLoader.moarvm
moar 44821 skaji txt REG 1,5 62584 69665693 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/NQPCORE.setting.moarvm
moar 44821 skaji txt REG 1,5 80224 69665691 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/nqpmo.moarvm
moar 44821 skaji txt REG 1,5 401240 69665700 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/NQPP6QRegex.moarvm
moar 44821 skaji txt REG 1,5 163928 69665695 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/QRegex.moarvm
moar 44821 skaji txt REG 1,5 98704 69665694 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/QASTNode.moarvm
moar 44821 skaji txt REG 1,5 366696 69665696 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/NQPHLL.moarvm
moar 44821 skaji txt REG 1,5 461112 69665699 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/QAST.moarvm
moar 44821 skaji txt REG 1,5 48824 69665698 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/MASTNodes.moarvm
moar 44821 skaji txt REG 1,5 111368 69665697 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/MASTOps.moarvm
moar 44821 skaji txt REG 1,5 3799968 69665770 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/Grammar.moarvm
moar 44821 skaji txt REG 1,5 236144 69665702 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/NQPP5QRegex.moarvm
moar 44821 skaji txt REG 1,5 942248 69665772 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/Actions.moarvm
moar 44821 skaji txt REG 1,5 84984 69665774 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/Pod.moarvm
moar 44821 skaji txt REG 1,5 64616 69665771 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/Ops.moarvm
moar 44821 skaji txt REG 1,5 309368 69665769 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/World.moarvm
moar 44821 skaji txt REG 1,5 23560 69665768 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/ModuleLoader.moarvm
moar 44821 skaji txt REG 1,5 16624 69665775 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/Compiler.moarvm
moar 44821 skaji txt REG 1,5 153432 69665773 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/Optimizer.moarvm
moar 44821 skaji txt REG 1,5 28252 69665788 /Users/skaji/env/rakudobrew/moar-nom/install/share/perl6/runtime/dynext/libperl6_ops_moar.dylib
moar 44821 skaji txt REG 1,5 12490008 69665782 /Users/skaji/env/rakudobrew/moar-nom/install/share/perl6/runtime/CORE.setting.moarvm
moar 44821 skaji txt REG 1,5 187616 69665777 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/BOOTSTRAP.moarvm
moar 44821 skaji txt REG 1,5 288680 69665776 /Users/skaji/env/rakudobrew/moar-nom/install/share/nqp/lib/Perl6/Metamodel.moarvm
moar 44821 skaji txt REG 1,5 698896 69026889 /usr/lib/dyld
moar 44821 skaji txt REG 1,5 662274048 69033171 /private/var/db/dyld/dyld_shared_cache_x86_64h
moar 44821 skaji 0u CHR 16,5 0t144682 1619 /dev/ttys005
moar 44821 skaji 1 PIPE 0xf2addbda53e9efd7 16384 ->0xf2addbda53e9f517
moar 44821 skaji 2 PIPE 0xf2addbda53e9ea97 16384 ->0xf2addbda53ea0a17
moar 44821 skaji 3 PIPE 0xf2addbda53ea0897 16384 ->0xf2addbda53e9e9d7
moar 44821 skaji 4 PIPE 0xf2addbda53e9e9d7 16384 ->0xf2addbda53ea0897
moar 44821 skaji 5u KQUEUE count=0, state=0
moar 44821 skaji 6 PIPE 0xf2addbda53ea0c57 16384 ->0xf2addbda53e9f457
moar 44821 skaji 7 PIPE 0xf2addbda53e9f457 16384 ->0xf2addbda53ea0c57
moar 44821 skaji 8 PIPE 0xf2addbda53e9ecd7 16384 ->0xf2addbda53e9eb57
moar 44821 skaji 9 PIPE 0xf2addbda53e9eb57 16384 ->0xf2addbda53e9ecd7
moar 44821 skaji 10u KQUEUE count=0, state=0
moar 44821 skaji 11 PIPE 0xf2addbda53e9ec17 16384 ->0xf2addbda53e9e857
moar 44821 skaji 12 PIPE 0xf2addbda53e9e857 16384 ->0xf2addbda53e9ec17
moar 44821 skaji 13 PIPE 0xf2addbda53ea0657 16384 ->0xf2addbda53e9ef17
moar 44821 skaji 14 PIPE 0xf2addbda53e9ef17 16384 ->0xf2addbda53ea0657
moar 44821 skaji 15u KQUEUE count=0, state=0
moar 44821 skaji 16 PIPE 0xf2addbda53e9e6d7 16384 ->0xf2addbda53e9e797
moar 44821 skaji 17 PIPE 0xf2addbda53e9e797 16384 ->0xf2addbda53e9e6d7
moar 44821 skaji 18 PIPE 0xf2addbda53e9e917 16384 ->0xf2addbda53ea07d7
moar 44821 skaji 19 PIPE 0xf2addbda53ea07d7 16384 ->0xf2addbda53e9e917
moar 44821 skaji 20u KQUEUE count=0, state=0
moar 44821 skaji 21 PIPE 0xf2addbda53ea0717 16384 ->0xf2addbda53ea0957
moar 44821 skaji 22 PIPE 0xf2addbda53ea0957 16384 ->0xf2addbda53ea0717
moar 44821 skaji 23 PIPE 0xf2addbda53ea0ad7 16384 ->0xf2addbda53e9e617
moar 44821 skaji 24 PIPE 0xf2addbda53e9e617 16384 ->0xf2addbda53ea0ad7
moar 44821 skaji 25u KQUEUE count=0, state=0xa
moar 44821 skaji 26 PIPE 0xf2addbda53e9e557 16384 ->0xf2addbda53ea0b97
moar 44821 skaji 27 PIPE 0xf2addbda53ea0b97 16384 ->0xf2addbda53e9e557
moar 44821 skaji 28 PIPE 0xf2addbda53e9f997 16384 ->0xf2addbda53e9e0d7
moar 44821 skaji 29 PIPE 0xf2addbda53e9e0d7 16384 ->0xf2addbda53e9f997
moar 44821 skaji 30r CHR 3,2 0t0 306 /dev/null
moar 44821 skaji 31u unix 0xf2addbda438314c7 0t0 ->(none)
moar 44821 skaji 32u KQUEUE count=0, state=0
moar 44821 skaji 33 PIPE 0xf2addbda53ea0057 16384 ->0xf2addbda53e9fbd7
moar 44821 skaji 34 PIPE 0xf2addbda53e9fbd7 16384 ->0xf2addbda53ea0057
moar 44821 skaji 35 PIPE 0xf2addbda53e9f2d7 16384 ->0xf2addbda53ea1017
moar 44821 skaji 36 PIPE 0xf2addbda53ea1017 16384 ->0xf2addbda53e9f2d7
moar 44821 skaji 37u KQUEUE count=0, state=0
moar 44821 skaji 38 PIPE 0xf2addbda53e9e197 16384 ->0xf2addbda47f964d7
moar 44821 skaji 39 PIPE 0xf2addbda47f964d7 16384 ->0xf2addbda53e9e197
moar 44821 skaji 40 PIPE 0xf2addbda47f95457 16384 ->0xf2addbda47f94a97
moar 44821 skaji 41 PIPE 0xf2addbda47f94a97 16384 ->0xf2addbda47f95457
moar 44821 skaji 42u KQUEUE count=0, state=0
moar 44821 skaji 43 PIPE 0xf2addbda47f96657 16384 ->0xf2addbda47f96ad7
moar 44821 skaji 44 PIPE 0xf2addbda47f96ad7 16384 ->0xf2addbda47f96657
moar 44821 skaji 45 PIPE 0xf2addbda47f95a57 16384 ->0xf2addbda47f94797
moar 44821 skaji 46 PIPE 0xf2addbda47f94797 16384 ->0xf2addbda47f95a57
moar 44821 skaji 47u KQUEUE count=0, state=0
moar 44821 skaji 48 PIPE 0xf2addbda47f946d7 16384 ->0xf2addbda47f96297
moar 44821 skaji 49 PIPE 0xf2addbda47f96297 16384 ->0xf2addbda47f946d7
moar 44821 skaji 50 PIPE 0xf2addbda47f94257 16384 ->0xf2addbda47f94cd7
moar 44821 skaji 51 PIPE 0xf2addbda47f94cd7 16384 ->0xf2addbda47f94257
moar 44821 skaji 52u KQUEUE count=0, state=0
moar 44821 skaji 53 PIPE 0xf2addbda47f958d7 16384 ->0xf2addbda47f96957
moar 44821 skaji 54 PIPE 0xf2addbda47f96957 16384 ->0xf2addbda47f958d7
moar 44821 skaji 55 PIPE 0xf2addbda47f96c57 16384 ->0xf2addbda47f94497
moar 44821 skaji 56 PIPE 0xf2addbda47f94497 16384 ->0xf2addbda47f96c57
moar 44821 skaji 57u KQUEUE count=0, state=0
moar 44821 skaji 58 PIPE 0xf2addbda47f94917 16384 ->0xf2addbda47f96717
moar 44821 skaji 59 PIPE 0xf2addbda47f96717 16384 ->0xf2addbda47f94917
moar 44821 skaji 60 PIPE 0xf2addbda47f949d7 16384 ->0xf2addbda47f96b97
moar 44821 skaji 61 PIPE 0xf2addbda47f96b97 16384 ->0xf2addbda47f949d7
moar 44821 skaji 62u KQUEUE count=0, state=0
moar 44821 skaji 63 PIPE 0xf2addbda47f95f97 16384 ->0xf2addbda47f95097
moar 44821 skaji 64 PIPE 0xf2addbda47f95097 16384 ->0xf2addbda47f95f97
moar 44821 skaji 65 PIPE 0xf2addbda47f96417 16384 ->0xf2addbda47f94d97
moar 44821 skaji 66 PIPE 0xf2addbda47f94d97 16384 ->0xf2addbda47f96417
moar 44821 skaji 67u KQUEUE count=0, state=0
moar 44821 skaji 68 PIPE 0xf2addbda47f94b57 16384 ->0xf2addbda47f940d7
moar 44821 skaji 69 PIPE 0xf2addbda47f940d7 16384 ->0xf2addbda47f94b57
moar 44821 skaji 70 PIPE 0xf2addbda47f95217 16384 ->0xf2addbda47f96a17
moar 44821 skaji 71 PIPE 0xf2addbda47f96a17 16384 ->0xf2addbda47f95217
moar 44821 skaji 72u KQUEUE count=0, state=0
moar 44821 skaji 73 PIPE 0xf2addbda47f943d7 16384 ->0xf2addbda47f95ed7
moar 44821 skaji 74 PIPE 0xf2addbda47f95ed7 16384 ->0xf2addbda47f943d7
moar 44821 skaji 75 PIPE 0xf2addbda47f96057 16384 ->0xf2addbda47f96897
moar 44821 skaji 76 PIPE 0xf2addbda47f96897 16384 ->0xf2addbda47f96057
moar 44821 skaji 77u KQUEUE count=0, state=0
moar 44821 skaji 78 PIPE 0xf2addbda47f94557 16384 ->0xf2addbda47f94fd7
moar 44821 skaji 79 PIPE 0xf2addbda47f94fd7 16384 ->0xf2addbda47f94557
moar 44821 skaji 80 PIPE 0xf2addbda47f96357 16384 ->0xf2addbda47f96117
moar 44821 skaji 81 PIPE 0xf2addbda47f96117 16384 ->0xf2addbda47f96357
moar 44821 skaji 82u unix 0xf2addbda4382ffaf 0t0 ->(none)
moar 44821 skaji 83u KQUEUE count=0, state=0
moar 44821 skaji 84 PIPE 0xf2addbda47f96e97 16384 ->0xf2addbda47f94f17
moar 44821 skaji 85u KQUEUE count=0, state=0
moar 44821 skaji 86 PIPE 0xf2addbda47f961d7 16384 ->0xf2addbda47f95817
moar 44821 skaji 87 PIPE 0xf2addbda47f95817 16384 ->0xf2addbda47f961d7
moar 44821 skaji 88 PIPE 0xf2addbda47f952d7 16384 ->0xf2addbda47f94857
moar 44821 skaji 89 PIPE 0xf2addbda47f94857 16384 ->0xf2addbda47f952d7
moar 44821 skaji 90 PIPE 0xf2addbda47f94f17 16384 ->0xf2addbda47f96e97
moar 44821 skaji 91 PIPE 0xf2addbda47f95997 16384 ->0xf2addbda47f94617
moar 44821 skaji 92 PIPE 0xf2addbda47f94617 16384 ->0xf2addbda47f95997
moar 44821 skaji 93u KQUEUE count=0, state=0
moar 44821 skaji 94 PIPE 0xf2addbda47f96f57 16384 ->0xf2addbda47f95b17
moar 44821 skaji 95 PIPE 0xf2addbda47f95b17 16384 ->0xf2addbda47f96f57
moar 44821 skaji 96 PIPE 0xf2addbda47f94e57 16384 ->0xf2addbda4f5648d7
moar 44821 skaji 97 PIPE 0xf2addbda4f5648d7 16384 ->0xf2addbda47f94e57
moar 44821 skaji 98u KQUEUE count=0, state=0
moar 44821 skaji 99 PIPE 0xf2addbda4f564697 16384 ->0xf2addbda4f563197
moar 44821 skaji 100 PIPE 0xf2addbda4f563197 16384 ->0xf2addbda4f564697
moar 44821 skaji 101 PIPE 0xf2addbda4f564ed7 16384 ->0xf2addbda4f563857
moar 44821 skaji 102 PIPE 0xf2addbda4f563857 16384 ->0xf2addbda4f564ed7
moar 44821 skaji 103u unix 0xf2addbda438317e7 0t0 ->(none)
moar 44821 skaji 104u unix 0xf2addbda4383171f 0t0 ->(none)
moar 44821 skaji 105u unix 0xf2addbda43830a9f 0t0 ->(none)
moar 44821 skaji 106u unix 0xf2addbda4382fa37 0t0 ->(none)
moar 44821 skaji 107u unix 0xf2addbda43831657 0t0 ->(none)
moar 44821 skaji 108u unix 0xf2addbda4382fbc7 0t0 ->(none)
moar 44821 skaji 109u unix 0xf2addbda4382f267 0t0 ->(none)
moar 44821 skaji 110u unix 0xf2addbda43831a3f 0t0 ->(none)
moar 44821 skaji 111u unix 0xf2addbda4382f96f 0t0 ->(none)
moar 44821 skaji 112u unix 0xf2addbda4383077f 0t0 ->(none)
moar 44821 skaji 113u unix 0xf2addbda438306b7 0t0 ->(none)
moar 44821 skaji 114u unix 0xf2addbda43830c2f 0t0 ->(none)
moar 44821 skaji 115u unix 0xf2addbda43830f4f 0t0 ->(none)
moar 44821 skaji 116u unix 0xf2addbda4382fc8f 0t0 ->(none)
moar 44821 skaji 117u unix 0xf2addbda51793267 0t0 ->(none)
moar 44821 skaji 118u unix 0xf2addbda51795eef 0t0 ->(none)
moar 44821 skaji 119u unix 0xf2addbda5179332f 0t0 ->(none)
moar 44821 skaji 120u unix 0xf2addbda51793c8f 0t0 ->(none)
moar 44821 skaji 121u unix 0xf2addbda51793e1f 0t0 ->(none)
moar 44821 skaji 122u unix 0xf2addbda51795d5f 0t0 ->(none)
moar 44821 skaji 123u unix 0xf2addbda51794e87 0t0 ->(none)
moar 44821 skaji 124u unix 0xf2addbda517934bf 0t0 ->(none)
moar 44821 skaji 125u unix 0xf2addbda517957e7 0t0 ->(none)
moar 44821 skaji 126u unix 0xf2addbda517954c7 0t0 ->(none)
moar 44821 skaji 127u unix 0xf2addbda517933f7 0t0 ->(none)
moar 44821 skaji 128u unix 0xf2addbda51795fb7 0t0 ->(none)
moar 44821 skaji 129u unix 0xf2addbda3e512717 0t0 ->(none)
moar 44821 skaji 130u unix 0xf2addbda3e51471f 0t0 ->(none)
moar 44821 skaji 131u unix 0xf2addbda3e5124bf 0t0 ->(none)
moar 44821 skaji 132u unix 0xf2addbda3e51232f 0t0 ->(none)
moar 44821 skaji 133u unix 0xf2addbda3e5147e7 0t0 ->(none)
moar 44821 skaji 134u unix 0xf2addbda3e51296f 0t0 ->(none)
moar 44821 skaji 135u unix 0xf2addbda3e51458f 0t0 ->(none)
moar 44821 skaji 136u unix 0xf2addbda53e4ca9f 0t0 ->(none)
moar 44821 skaji 137u unix 0xf2addbda53e4c207 0t0 ->(none)
moar 44821 skaji 138u unix 0xf2addbda53e4ccf7 0t0 ->(none)
moar 44821 skaji 139u unix 0xf2addbda53e4c6b7 0t0 ->(none)
moar 44821 skaji 140u unix 0xf2addbda53e4c077 0t0 ->(none)
moar 44821 skaji 141u unix 0xf2addbda53e4c90f 0t0 ->0xf2addbda53e4c77f
run 40 tests, leaves 172 files open
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment