Skip to content
This repository has been archived by the owner on Jan 6, 2021. It is now read-only.

test: Fix EventEmitter.MaxListenersExceededWarning warning #132

Merged

Conversation

sudo-suhas
Copy link
Contributor

Summary

When tests are run, node logs warnings - MaxListenersExceededWarning: Possible EventEmitter memory leak detected. This fixes thewarning by setting the max listeners to 20 on process(EventEmitter)

Details

When running tests, the following warnings are logged:

(node:10188) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added. Use emitter.setMaxListeners() to increase limit
(node:10188) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added. Use emitter.setMaxListeners() to increase limit
(node:10188) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGBREAK listeners added. Use emitter.setMaxListeners() to increase limit
(node:10188) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added. Use emitter.setMaxListeners() to increase limit

The warning can be seen in the travis build logs as well as appveyor.

I used the following code to print the warning stack trace:

process.on('warning', warning => {
  console.log(warning.name)
  console.log(warning.message)
  console.log(warning.stack)
})
Warnings stack trace
 PASS  src\index.test.js
  ● Console

    console.log src\index.test.js:6
      MaxListenersExceededWarning
    console.log src\index.test.js:7
      Possible EventEmitter memory leak detected. 11 SIGTERM listeners added. Use emitter.setMaxListeners() to increase limit
    console.log src\index.test.js:8
      MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added. Use emitter.setMaxListeners() to increase limit
          at _addListener (events.js:281:19)
          at process.addListener (events.js:298:10)
          at crossEnv (E:\Projects\repos\cross-env\src\index.js:21:13)
          at Object.<anonymous> (E:\Projects\repos\cross-env\src\index.test.js:65:3)
          at Object.<anonymous> (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\build\jasmine-async.js:42:32)
          at attemptAsync (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1984:24)
          at QueueRunner.run (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1939:9)
          at E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1966:16
          at E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1909:9
          at Object.fn (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\build\jasmine-async.js:68:11)
    console.log src\index.test.js:6
      MaxListenersExceededWarning
    console.log src\index.test.js:7
      Possible EventEmitter memory leak detected. 11 SIGINT listeners added. Use emitter.setMaxListeners() to increase limit
    console.log src\index.test.js:8
      MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added. Use emitter.setMaxListeners() to increase limit
          at _addListener (events.js:281:19)
          at process.addListener (events.js:298:10)
          at crossEnv (E:\Projects\repos\cross-env\src\index.js:22:13)
          at Object.<anonymous> (E:\Projects\repos\cross-env\src\index.test.js:65:3)
          at Object.<anonymous> (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\build\jasmine-async.js:42:32)
          at attemptAsync (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1984:24)
          at QueueRunner.run (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1939:9)
          at E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1966:16
          at E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1909:9
          at Object.fn (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\build\jasmine-async.js:68:11)
    console.log src\index.test.js:6
      MaxListenersExceededWarning
    console.log src\index.test.js:7
      Possible EventEmitter memory leak detected. 11 SIGBREAK listeners added. Use emitter.setMaxListeners() to increase limit
    console.log src\index.test.js:8
      MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGBREAK listeners added. Use emitter.setMaxListeners() to increase limit
          at _addListener (events.js:281:19)
          at process.addListener (events.js:298:10)
          at crossEnv (E:\Projects\repos\cross-env\src\index.js:23:13)
          at Object.<anonymous> (E:\Projects\repos\cross-env\src\index.test.js:65:3)
          at Object.<anonymous> (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\build\jasmine-async.js:42:32)
          at attemptAsync (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1984:24)
          at QueueRunner.run (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1939:9)
          at E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1966:16
          at E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1909:9
          at Object.fn (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\build\jasmine-async.js:68:11)
    console.log src\index.test.js:6
      MaxListenersExceededWarning
    console.log src\index.test.js:7
      Possible EventEmitter memory leak detected. 11 SIGHUP listeners added. Use emitter.setMaxListeners() to increase limit
    console.log src\index.test.js:8
      MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added. Use emitter.setMaxListeners() to increase limit
          at _addListener (events.js:281:19)
          at process.addListener (events.js:298:10)
          at crossEnv (E:\Projects\repos\cross-env\src\index.js:24:13)
          at Object.<anonymous> (E:\Projects\repos\cross-env\src\index.test.js:65:3)
          at Object.<anonymous> (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\build\jasmine-async.js:42:32)
          at attemptAsync (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1984:24)
          at QueueRunner.run (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1939:9)
          at E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1966:16
          at E:\Projects\repos\cross-env\node_modules\jest-jasmine2\vendor\jasmine-2.5.2.js:1909:9
          at Object.fn (E:\Projects\repos\cross-env\node_modules\jest-jasmine2\build\jasmine-async.js:68:11)

As can be seen, the warnings originate from src/index.js#L21-L24. Fixed by increasing max listeners.

When tests are run, node logs warnings - `MaxListenersExceededWarning: Possible EventEmitter memory
leak detected`. Fix warning by setting the max listeners to 20 on `process`(EventEmitter)
@codecov
Copy link

codecov bot commented Aug 3, 2017

Codecov Report

Merging #132 into master will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@          Coverage Diff          @@
##           master   #132   +/-   ##
=====================================
  Coverage     100%   100%           
=====================================
  Files           3      3           
  Lines          50     50           
=====================================
  Hits           50     50

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 0fe3482...c4237ad. Read the comment docs.

@kentcdodds
Copy link
Owner

Thanks for this! I've noticed this also and didn't realize it could be fixed with cross-env! But is it really cross-env? Seems like this is actually a problem with whatever process you're trying to spawn. I'm not sure that this is the right place to fix the problem... 🤔

@sudo-suhas
Copy link
Contributor Author

sudo-suhas commented Aug 3, 2017

During tests, cross-env is invoked multiple times. So they all end up adding listeners to process. Node has a default limit of 10 and that causes the warning. Note that this is only possible if you are invoking cross-env from js. If you were using the command line, each invocation would have it's own process.

Edit:
These are all the locations the cross-env function, which adds listeners on process, is invoked:

@kentcdodds
Copy link
Owner

Ah! I see, I thought this change was inside cross-env source code to fix an issue you were seeing in another project. But now I see it's in the cross-env tests. Thank you for the fix 😄

@kentcdodds kentcdodds merged commit 601632d into kentcdodds:master Aug 3, 2017
@sudo-suhas sudo-suhas deleted the test/fix-max-listeners-warning branch August 3, 2017 03:05
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants