Skip to content

trace_events: not being flushed on SIGINT #18476

@AndreasMadsen

Description

@AndreasMadsen
  • Version: master (a025723)
  • Platform: MacOS
  • Subsystem: trace_events

Somehow StopTracingAgent is called in SignalExit() however the tracking file is not properly flushed. I don't understand why, I think it might have some something to do with how SIGINT (by Ctrl+C) affects the process group.

The issue is not that easy to reproduce. However, I can do it consistently with the following steps:

  • run node test.js
  • in another terminal curl http://localhost:3000
  • hit Ctrl+C for on the node test.js process

test.js

const http = require('http')
const { spawn } = require('child_process')

const script = `
const http = require('http')

const server = http.createServer(function (req, res) {
  for (let i = 0; i < 100; i++) {
    process.nextTick(function () {
      res.write('a')
    })
  }

  setImmediate(function () {
    res.end()
  })
})

server.listen(3000, 'localhost')
`

// run program, but inject the sampler
const proc = spawn(process.execPath, ['-e', script], {
  stdio: 'inherit',
  env: Object.assign({}, process.env, {
    NODE_OPTIONS: [
      '--trace-events-enabled', '--trace-event-categories', 'node.async_hooks'
    ].join(' ')
  })
})

process.on('SIGINT', () => proc.kill('SIGINT'))

/cc @ofrobots

Metadata

Metadata

Assignees

No one assigned

    Labels

    trace_eventsIssues and PRs related to V8, Node.js core, and userspace code trace events.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions