Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

src: reduce cpu profiler overhead #8791

Closed

Conversation

bnoordhuis
Copy link
Member

Reduce the overhead of the CPU profiler by suppressing SIGPROF signals
when sleeping / polling for events. Avoids unnecessary wakeups when
the CPU profiler is active. Depends on libuv/libuv#15.

Refs strongloop/strong-agent#3 and strongloop-internal/scrum-cs#37.

See also #8789.

R=@trevnorris?

Reduce the overhead of the CPU profiler by suppressing SIGPROF signals
when sleeping / polling for events.  Avoids unnecessary wakeups when
the CPU profiler is active.  Depends on libuv/libuv#15.

Refs strongloop/strong-agent#3 and strongloop-internal/scrum-cs#37.
@bnoordhuis
Copy link
Member Author

Depends on #8849. See also #8789.

@bnoordhuis
Copy link
Member Author

Ping. #8849 landed, this is good to go.

trevnorris pushed a commit that referenced this pull request Dec 17, 2014
Reduce the overhead of the CPU profiler by suppressing SIGPROF signals
when sleeping / polling for events. Avoids unnecessary wakeups when the
CPU profiler is active. Depends on https://github.com/libuv/libuv#15.

Ref: strongloop/strong-agent#3
PR-URL: #8791
Reviewed-by: Trevor Norris <[email protected]>
@trevnorris
Copy link

Thanks. Landed in 1eb1e0a.

@trevnorris trevnorris closed this Dec 17, 2014
@trevnorris
Copy link

@bnoordhuis Reverted in 1eb1e0a. Causing massive test failures on my box.

@bnoordhuis
Copy link
Member Author

@trevnorris Can you go into details? Tests pass for me locally on Linux and OS X and I don't see why they wouldn't.

I did notice that simple/test-http-many-keep-alive-connections fails on the v0.10 branch but that's unrelated to this change.

@trevnorris
Copy link

@bnoordhuis Almost every test aborts. Here's a core file for Linux x64: https://cloudup.com/files/icrntqpixKc/download

@bnoordhuis
Copy link
Member Author

@trevnorris That site is timing out for me but I can't do much with just a core file anyway. Can you post the output of thread apply all backtrace full of a failing test?

@trevnorris
Copy link

Quick summary: It's abort'ing in uv__io_poll here:

226         if (nfds == -1) {
227           if (errno != EINTR)
228             abort();

The full output you requested:

Thread 2 (Thread 0x7fbcdbf8e700 (LWP 7374)):
#0  0x00007fbcdac1588d in nanosleep () at ../sysdeps/unix/syscall-template.S:81
No locals.
#1  0x00007fbcdac46814 in usleep (useconds=<optimized out>) at ../sysdeps/unix/sysv/linux/usleep.c:32
        ts = {tv_sec = 0, tv_nsec = 900000}
#2  0x0000000000d185f1 in v8::internal::SignalSender::Sleep (this=0x27ad030, full_or_half=v8::internal::SignalSender::FULL_INTERVAL) at ../deps/v8/src/platform-linux.cc:1218
        interval = 900
        result = 0
#3  0x0000000000d184b6 in v8::internal::SignalSender::Run (this=0x27ad030) at ../deps/v8/src/platform-linux.cc:1184
        cpu_profiling_enabled = false
        runtime_profiler_enabled = true
        state = v8::internal::SamplerRegistry::HAS_SAMPLERS
#4  0x0000000000d16f75 in v8::internal::ThreadEntry (arg=0x27ad030) at ../deps/v8/src/platform-linux.cc:756
        thread = 0x27ad030
#5  0x00007fbcdaf210a5 in start_thread (arg=0x7fbcdbf8e700) at pthread_create.c:309
        __res = <optimized out>
        pd = 0x7fbcdbf8e700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140449121101568, 4862570384740655737, 0, 0, 140449121102272, 140449121101568, -4899100618153713031, -4899098476625321351}, 
              mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#6  0x00007fbcdac4e77d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
No locals.

Thread 1 (Thread 0x7fbcdbf67780 (LWP 7373)):
#0  0x00007fbcdab8ad27 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
        resultvar = 0
        pid = 7373
        selftid = 7373
#1  0x00007fbcdab8c418 in __GI_abort () at abort.c:89
        save_stage = 2
        act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {0, 140733932487424, 140449118938455, 5, 0, 0, 140449099918632, 0, 
              140733932487424, 7031253, 140449118967093, 140449120941760, 22, 482232, 823678657482232, 20448744}}, sa_flags = 739086912, sa_restorer = 0x26e2e8190fa7dc}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x0000000000dd143b in uv__io_poll (loop=0x13805e8 <default_loop_struct>, timeout=-1) at ../deps/uv/src/unix/linux-core.c:228
        no_epoll_wait = 0
        events = {{events = 1, data = 14}, {events = 32767, data = 536}, {events = 739097088, data = 3174355215453290495}, {events = 32767, data = 11682750}, {events = 41725248, 
            data = 3174389519357050880}, {events = 32767, data = 140733932485080}, {events = 41725248, data = 3174356108806455296}, {events = 32767, data = 11644883}, {
            events = 41890368, data = 179900580708220928}, {events = 0, data = 140733932485752}, {events = 739097720, data = 3174397649730174975}, {events = 32767, 
            data = 288501896088}, {events = 41886368, data = 3174400535948165120}, {events = 32767, data = 140733932475360}, {events = 11714720, data = 3174355765209071616}, {
            events = 32767, data = 41886368}, {events = 739097720, data = 179205929877667839}, {events = 0, data = 288501896176}, {events = 739087552, data = 179900580708253695}, 
          {events = 0, data = 140733932485120}, {events = 739087376, data = 50177029177376767}, {events = 4, data = 140733932475408}, {events = 11644974, 
            data = 3174397649730142208}, {events = 16809983, data = 4}, {events = 739087600, data = 50002962742804479}, {events = 0, data = 140733932475456}, {events = 41886368, 
            data = 3174400535948165120}, {events = 32767, data = 140733932475584}, {events = 41886368, data = 3174397649730142208}, {events = 32767, data = 140733932475552}, {
            events = 11714384, data = 3174388029003399168}, {events = 32767, data = 140733932485160}, {events = 739087552, data = 3174397993327525892}, {events = 32767, 
            data = 140733932475568}, {events = 12496366, data = 7493989779944505344}, {events = 4, data = 25769803778}, {events = 7, data = 179889894829588488}, {events = 0, 
            data = 9329022176}, {events = 41883880, data = 3174357002159652864}, {events = 32767, data = 10653659}, {events = 739095155, data = 179889894829588482}, {events = 0, 
            data = 140733932475664}, {events = 11732991, data = 3174357551915466752}, {events = 32767, data = 41883880}, {events = 3, data = 177435269480316930}, {events = 0, 
            data = 880509608048}, {events = 41312368, data = 3174357414476513280}, {events = 32767, data = 9318572}, {events = 3443540417, data = 3174357517555734670}, {
            events = 32767, data = 140733932475744}, {events = 9041792, data = 5544110365983375360}, {events = 15923, data = 140733932475760}, {events = 739087744, 
            data = 3174390812142239743}, {events = 32767, data = 140733932483488}, {events = 739095456, data = 3174357826793373755}, {events = 32767, data = 12495168}, {
            events = 739097088, data = 3174397821528866815}, {events = 32767, data = 140733932475856}, {events = 12483149, data = 3174397821528834048}, {events = 32767, 
            data = 8589949949}, {events = 739097088, data = 3174397649730174975}, {events = 4, data = 140733932475904}, {events = 11687140, data = 3174397649730142208}, {
            events = 32767, data = 41312368}, {events = 739097048, data = 43254546918572031}, {events = 4, data = 140733932475968}, {events = 739097088, 
            data = 3174358513988173823}, {events = 32767, data = 11682750}, {events = 41313832, data = 3174397649730142212}, {events = 32767, data = 140733932485080}, {
            events = 739097048, data = 3174359750938722306}, {events = 32767, data = 11648057}, {events = 739088160, data = 17320915639417710368}, {events = 8736, 
            data = 140733932476128}, {events = 11478082, data = 179889860469850112}, {events = 0, data = 140733932476192}, {events = 4294967295, data = 8589934585}, {events = 2, 
            data = 140733932485080}, {events = 739088160, data = 3174359063743987711}, {events = 32767, data = 11572245}, {events = 41353488, data = 3174359476060815360}, {
            events = 32767, data = 140733932476128}, {events = 11543989, data = 17320915639417700352}, {events = 8736, data = 41313832}, {events = 739088224, 
            data = 179208575577522175}, {events = 0, data = 65932042976246}, {events = 13725865, data = 17320915639417715702}, {events = 8736, data = 0}, {events = 3443540417, 
            data = 3174359579140036750}, {events = 32767, data = 140733932476224}, {events = 9041792, data = 5544338480286400512}, {events = 15923, data = 140733932476240}, {
            events = 3443540417, data = 3174359785298466958}, {events = 32767, data = 140733932476272}, {events = 9041792, data = 5544338480286400512}, {events = 15923, 
            data = 140733932476288}, {events = 739088272, data = 38701099900764159}, {events = 5, data = 68390055146128}, {events = 739088320, data = 3174360231975092223}, {
            events = 32767, data = 11576520}, {events = 1290891920, data = 3174360094536121907}, {events = 32767, data = 68390055146128}, {events = 5, 
            data = 5544338579070648320}, {events = 15923, data = 72057594037927941}, {events = 739088400, data = 49529326634303487}, {events = 0, data = 140733932476656}, {
            events = 1290891920, data = 21474852403}, {events = 32767, data = 140733932476656}, {events = 1290891920, data = 21474852403}, {events = 5, data = 68390055146128}, {
            events = 739088464, data = 3174360850450382847}, {events = 32767, data = 10134808}, {events = 1290891920, data = 3174360713011412531}, {events = 32767, 
            data = 68390055146128}, {events = 5, data = 5544338579070648320}, {events = 15923, data = 5}, {events = 739088560, data = 43476566663004159}, {events = 0, 
            data = 140733932476560}, {events = 739088624, data = 5544338579070681087}, {events = 0, data = 68390055146133}, {events = 1290891897, data = 178603728218095621}, {
            events = 0, data = 68390055146133}, {events = 739088664, data = 3174361743803547648}, {events = 32767, data = 11415225}, {events = 739088608, 
            data = 5544338579070681087}, {events = 15923, data = 68390055146105}, {events = 3443540417, data = 5544338579070654606}, {events = 15923, data = 5}, {
            events = 1290891920, data = 21474852403}, {events = 16793603, data = 68388764254209}, {events = 1290891897, data = 5544338480286400517}, {events = 15923, 
            data = 41584416}, {events = 5, data = 5544338480286433279}, {events = 16793139, data = 140733932476784}, {events = 11571572, data = 3174362018681454592}, {
            events = 32767, data = 140733932477168}, {events = 41584416, data = 21474836480}, {events = 0, data = 138729845369}, {events = 0, data = 3174362156120424451}, {
            events = 32767, data = 9041205}, {events = 739088800, data = 32767}, {events = 16387, data = 140733932476848}, {events = 9015029, data = 3174362637156745216}, {
            events = 32767, data = 70381629079552}, {events = 739088848, data = 38732603485880319}, {events = 0, data = 70381629079552}, {events = 4032839937, 
            data = 3174362637156753952}, {events = 32767, data = 9031830}, {events = 739089136, data = 17320915639417708948}, {events = 8736, data = 36923571716353}, {
            events = 4032839937, data = 3174362843315184160}, {events = 32767, data = 11494780}, {events = 3443540289, data = 17320915639417706638}, {events = 8736, 
            data = 36907393063664}, {events = 4032839937, data = 3174363393070998048}, {events = 32767, data = 11478082}, {events = 739088992, data = 3174363668482520947}, {
            events = 32767, data = 37524867137793}, {events = 739089136, data = 3174363393071022079}, {events = 32767, data = 140733932477168}, {events = 739089040, 
            data = 49702413816332287}, {events = 0, data = 41584416}, {events = 739089136, data = 3174363393071022079}, {events = 32767, data = 11543989}, {events = 4032839937, 
            data = 3174363667948904992}, {events = 32767, data = 140733932477232}, {events = 11479145, data = 3174363667948896256}, {events = 32767, data = 13725865}, {
            events = 4032839937, data = 8736}, {events = 0, data = 140733932477184}, {events = 9041939, data = 14789893473469202432}, {events = 6286, data = 739089176}, {
            events = 739089184, data = 38699527942733823}, {events = 0, data = 68390055146105}, {events = 41312368, data = 3174364148985233408}, {events = 32767, data = 9230738}, 
          {events = 41312368, data = 178807116394397696}, {events = 0, data = 41631776}, {events = 41323976, data = 177435269480316928}, {events = 0, data = 68390055146105}, {
            events = 739089296, data = 42794165079146495}, {events = 0, data = 140733932477496}, {events = 41312368, data = 5544338480286400512}, {events = 15923, 
            data = 41312368}, {events = 41631776, data = 3174364492582617088}, {events = 32767, data = 27001607963073}, {events = 739089352, data = 3174364630021603327}, {
            events = 32767, data = 9041792}, {events = 1290891897, data = 3174364698741063219}, {events = 32767, data = 140733932477424}, {events = 9010802, 
            data = 14789893473469202432}, {events = 6286, data = 27001607963073}, {events = 739089440, data = 39563808506675199}, {events = 0, data = 68390055146105}, {
            events = 9020181, data = 5544338480286400580}, {events = 15923, data = 72198327970405480}, {events = 739089520, data = 3174389283133849601}, {events = 32767, 
            data = 140733932477520}, {events = 9296561, data = 3174365248496861184}, {events = 14526, data = 140733932483128}...}
        pe = 0x7fff2c0d92f0
        e = {events = 1, data = 14}
        q = 0x27a8998
        w = 0x27a8980
        pset = 0x7fff2c0d9240
        set = {__val = {67108864, 0 <repeats 15 times>}}
        base = 823678657
        diff = 18446744052234715137
        nevents = 1
        count = 48
        nfds = -1
        fd = 14
        op = 1
        i = 1
#3  0x0000000000dbbaef in uv_run (loop=0x13805e8 <default_loop_struct>, mode=UV_RUN_DEFAULT) at ../deps/uv/src/unix/core.c:317
        timeout = -1
        r = 1
#4  0x0000000000d2da53 in node::Start (argc=2, argv=0x2770030) at ../src/node.cc:3125
        locker = {has_lock_ = true, top_level_ = true, isolate_ = 0x2766070, static active_ = true}
        context = {<v8::Handle<v8::Context>> = {val_ = 0x27b5f10}, <No data fields>}
        handle_scope = {isolate_ = 0x2766070, prev_next_ = 0x0, prev_limit_ = 0x0, is_closed_ = false}
        context_scope = {context_ = {val_ = 0x27b5f10}}
        process_l = {val_ = 0x27b5f30}
        replaceInvalid = 0x0
        argv_copy = 0x27700a0
#5  0x0000000000d4ce12 in main (argc=2, argv=0x7fff2c0dc508) at ../src/node_main.cc:65
No locals.

@bnoordhuis
Copy link
Member Author

Oh, that's interesting. Can you strace it? I wonder if you are getting ENOSYS or EINVAL.

@trevnorris
Copy link

@bnoordhuis errno == 22 (EINVAL).

@bnoordhuis
Copy link
Member Author

@trevnorris Is that the call to epoll_pwait()? Can you post the output of strace -e epoll_pwait for node and the program below?

#include <signal.h>
#include <sys/epoll.h>

int main(void) {
  struct epoll_event ev;
  sigset_t set;
  sigfillset(&set);
  epoll_pwait(epoll_create1(0), &ev, 1, 1, &set);
  return 0;
}

@saghul
Copy link
Member

saghul commented Dec 24, 2014

@bnoordhuis, shouldn't the call to uv_loop_configure be surrounded by ifdefs checking the libuv version? This API has only been available since 0.10.30 (IIRC). Users using a shared libuv build would appreciate it, I suppose.

@bnoordhuis
Copy link
Member Author

@saghul I don't think it's necessary. Fedora upgrades libuv whenever a new version comes out; I image Debian does something similar. And if not, it's easily fixed, by us or by them.

@saghul
Copy link
Member

saghul commented Dec 24, 2014

@bnoordhuis no problem then! :-)

@trevnorris
Copy link

@bnoordhuis Results from your code:

$ strace -e epoll_pwait ./main
epoll_pwait(3, {}, 1, 1, ~[RTMIN])      = 0
+++ exited with 0 +++

Results from node:

$ strace -e epoll_pwait ./node test/simple/test-abort-fatal-error.js
epoll_pwait(5, {{EPOLLIN, {u32=14, u64=14}}}, 1024, -1, [PROF]) = 1
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=5162, si_status=134, si_utime=0, si_stime=0} ---
epoll_pwait(5, 7fff44a18d00, 1024, -1, [PROF]) = -1 EINVAL (Invalid argument)
--- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=5160, si_uid=1000} ---
+++ killed by SIGABRT (core dumped) +++
Aborted

@bnoordhuis
Copy link
Member Author

Bizarre... the more so because the first epoll_pwait() call succeeds. The only thing I can think of is that fd 5 ceases to be an epoll file descriptor between the two calls.

@trevnorris Is your strace new enough that it understands the -y switch?

@trevnorris
Copy link

@bnoordhuis Yeah. Here's the same command, but also with -y:

epoll_pwait(5<anon_inode:[eventpoll]>, {{EPOLLIN, {u32=14, u64=14}}}, 1024, -1, [PROF]) = 1
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=6715, si_status=134, si_utime=0, si_stime=0} ---
epoll_pwait(5<anon_inode:[eventpoll]>, 7fffb4a2dce0, 1024, -1, [PROF]) = -1 EINVAL (Invalid argument)
--- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=6713, si_uid=1000} ---
+++ killed by SIGABRT (core dumped) +++
Aborted

@trevnorris
Copy link

Here's some additional output:

epoll_create1(EPOLL_CLOEXEC)            = 5
pipe2([6, 7], O_NONBLOCK|O_CLOEXEC)     = 0
eventfd2(0, O_NONBLOCK|O_CLOEXEC)       = 8
ioctl(0</dev/pts/16>, FIOCLEX)          = 0
ioctl(1</dev/pts/16>, FIOCLEX)          = 0
ioctl(2</tmp/strace.out>, FIOCLEX)      = 0
ioctl(3<pipe:[43842]>, FIOCLEX)         = 0
ioctl(4<pipe:[43842]>, FIOCLEX)         = 0
ioctl(5<anon_inode:[eventpoll]>, FIOCLEX) = 0
ioctl(6<pipe:[43843]>, FIOCLEX)         = 0
ioctl(7<pipe:[43843]>, FIOCLEX)         = 0
ioctl(8<anon_inode:[eventfd]>, FIOCLEX) = 0
ioctl(9, FIOCLEX)                       = -1 EBADF (Bad file descriptor)
ioctl(10, FIOCLEX)                      = -1 EBADF (Bad file descriptor)
ioctl(11, FIOCLEX)                      = -1 EBADF (Bad file descriptor)
ioctl(12, FIOCLEX)                      = -1 EBADF (Bad file descriptor)
ioctl(13, FIOCLEX)                      = -1 EBADF (Bad file descriptor)
ioctl(14, FIOCLEX)                      = -1 EBADF (Bad file descriptor)
ioctl(15, FIOCLEX)                      = -1 EBADF (Bad file descriptor)
ioctl(16, FIOCLEX)                      = -1 EBADF (Bad file descriptor)

socketpair(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC, 0, [10, 11]) = 0
socketpair(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC, 0, [12, 13]) = 0
socketpair(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC, 0, [14, 15]) = 0
pipe2([16, 17], O_CLOEXEC)              = 0

close(17<pipe:[43851]>)                 = 0
read(16<pipe:[43851]>, "", 4)           = 0
close(16<pipe:[43851]>)                 = 0
close(11<socket:[43846]>)               = 0
ioctl(10<socket:[43845]>, FIONBIO, [1]) = 0
close(13<socket:[43848]>)               = 0
ioctl(12<socket:[43847]>, FIONBIO, [1]) = 0
close(15<socket:[43850]>)               = 0
ioctl(14<socket:[43849]>, FIONBIO, [1]) = 0

epoll_ctl(5<anon_inode:[eventpoll]>, EPOLL_CTL_ADD, 6<pipe:[43843]>, {EPOLLIN, {u32=6, u64=6}}) = 0
epoll_ctl(5<anon_inode:[eventpoll]>, EPOLL_CTL_ADD, 8<anon_inode:[eventfd]>, {EPOLLIN, {u32=8, u64=8}}) = 0
epoll_ctl(5<anon_inode:[eventpoll]>, EPOLL_CTL_ADD, 10<socket:[43845]>, {EPOLLIN, {u32=10, u64=10}}) = 0
epoll_ctl(5<anon_inode:[eventpoll]>, EPOLL_CTL_ADD, 12<socket:[43847]>, {EPOLLIN, {u32=12, u64=12}}) = 0
epoll_ctl(5<anon_inode:[eventpoll]>, EPOLL_CTL_ADD, 14<socket:[43849]>, {EPOLLIN, {u32=14, u64=14}}) = 0
epoll_pwait(5<anon_inode:[eventpoll]>, {{EPOLLIN, {u32=14, u64=14}}}, 1024, -1, [PROF]) = 1
futex(0x7f93140008c8, FUTEX_WAKE_PRIVATE, 1) = 1
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9319ff8000
read(14<socket:[43849]>, "Aborted\n", 65536) = 8
epoll_pwait(5<anon_inode:[eventpoll]>, 7fffcbba5250, 1024, -1, [PROF]) = -1 EINVAL (Invalid argument)
rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
tgkill(6826, 6826, SIGABRT)             = 0
--- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=6826, si_uid=1000} ---
+++ killed by SIGABRT (core dumped) +++

@bnoordhuis
Copy link
Member Author

@trevnorris Thanks! I think I know what the issue is. Can you try libuv/libuv#83 and see if that improves matters?

mscdex pushed a commit to mscdex/node that referenced this pull request Dec 25, 2014
Reduce the overhead of the CPU profiler by suppressing SIGPROF signals
when sleeping / polling for events. Avoids unnecessary wakeups when the
CPU profiler is active. Depends on https://github.com/libuv/libuv#15.

Ref: strongloop/strong-agent#3
PR-URL: nodejs#8791
Reviewed-by: Trevor Norris <[email protected]>
@trevnorris
Copy link

@bnoordhuis Side note, libuv/libuv#83 landed on the v1.x branch, but this patch is for v0.10. I'll see if I can manually apply the patch to the v0.10 branch of libuv.

@saghul
Copy link
Member

saghul commented Dec 30, 2014

@trevnorris it also landed in 0.10: libuv/libuv@fa0b08f

@trevnorris
Copy link

@saghul ah, thanks. :)

@trevnorris
Copy link

@bnoordhuis that seems to fix the problem. @saghul will there be another v0.10 libuv tag? If not I'll just update deps/uv to latest v0.10.

@saghul
Copy link
Member

saghul commented Dec 30, 2014

Sure, we can make a new release. I'll see if I can do it tomorrow.
On Dec 30, 2014 9:21 PM, "Trevor Norris" [email protected] wrote:

@bnoordhuis https://github.com/bnoordhuis that seems to fix the
problem. @saghul https://github.com/saghul will there be another v0.10
libuv tag? If not I'll just update deps/uv to latest v0.10.


Reply to this email directly or view it on GitHub
#8791 (comment).

@jasnell
Copy link
Member

jasnell commented Aug 27, 2015

@trevnorris @bnoordhuis ... is there reason to keep this one open still?

@bnoordhuis
Copy link
Member Author

I'm going to close this. I still think this is a good change but it needs an update to libuv v0.10.37 and the PR as-is breaks v8-profiler (see nodejs/node#2324).

The fix would be trivial if v0.10 had the command line parsing infrastructure that v4 has but it doesn't and porting that over is too much work and risk.

@bnoordhuis bnoordhuis closed this Sep 12, 2015
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants