Node: Cannot read property 'emit' of null in _http_client.js

Created on 12 May 2018  路  15Comments  路  Source: nodejs/node

  • Version: v6.14.2
  • Platform: Linux clearnet 4.9.56-21.pvops.qubes.x86_64 #1 SMP Tue Oct 17 23:58:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
  • Subsystem: http

I'm getting the following error on every run of registry-static:

_http_client.js:277
  req.emit('close');
     ^

TypeError: Cannot read property 'emit' of null
    at TLSSocket.socketCloseListener (_http_client.js:277:6)
    at emitOne (events.js:101:20)
    at TLSSocket.emit (events.js:188:7)
    at _handle.close (net.js:509:12)
    at TCP.done [as _onclose] (_tls_wrap.js:332:7)

It's happening reliably for me at 317673 while processing ng2-comps. I haven't tried with an empty output folder yet because it takes me a few days to get that far into the database.

confirmed-bug http

All 15 comments

note: problem disappeared when I upgraded to node v8.11.1

cc @nodejs/http

@xloem have you tried it on earlier versions of 6.x? Is this a new regression?

I'm afraid that now I have found a way to make it work I'm not available to test this a lot as it takes so long to trigger it. I'm sorry. An obvious approach would be to git bisect between the two versions, but this would take many weeks to complete.

I am also seeing this error after upgrading from v8.11.1 to v8.11.2. Scanning the changelog for v8.11.2, the error seems to be plausibly related to #18865, which seems to have landed in both 6.14.2 and 8.11.2

Pinging @lpinca.

Weird, there are only two (1, 2) places where 'agentRemove' is emitted and in both cases (1, 2) the socketCloseListener is removed, so I'm not sure how this can happen.

Is there a way to reproduce the issue without relying on userland modules?

@lpinca the API docs include an example of how to emit the 'agentRemove' event from userland code to remove an socket from an agent.
https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_class_http_agent

this code reproduces the TypeError for me on v8.11.2:
require('http').get('http://0.0.0.0', (res)=>{}).once('socket', (socket)=>{ socket.emit('agentRemove'); });

@jordanrogers thanks! Didn't think about that use case. I will open a PR to null the property without relying on the 'agentRemove' event and add a regression test.

It's funny that this did go unnoticed for 3 months but I guess that is not a common use case.

I apologize in advance if there is a procedure that I'm not following here, but I couldn't find any for formally requesting backporting of fixes.

Is there a plan to backport this fix into the 6.X and 8.X branches? This bug is biting us on servers running both of those versions.

Thanks in advance.

@bedney it should be backported, not sure why it didn't happen yet. I'll add the required labels to the PR to backport.

Hi, it appears that this issue still exists in 8.11.4, so we are still stuck at 8.11.1. Is there a plan to fix in 8.11, or is 8.12 the nearest fix version?

There will not be another 8.11 release.

Is this fixed in 8.12?

I can confirm that this is fixed in 8.12

Was this page helpful?
0 / 5 - 0 ratings