Title: AsyncWrap: TCPWrap created before MakeCallback · Issue #2986 · nodejs/node · GitHub
Open Graph Title: AsyncWrap: TCPWrap created before MakeCallback · Issue #2986 · nodejs/node
X Title: AsyncWrap: TCPWrap created before MakeCallback · Issue #2986 · nodejs/node
Description: When creating a TCP server, the TCP handles there holds the socket is created in C++ land. The socket handle is then send to the onconnection server handle event using MakeCallback. code link: https://github.com/nodejs/node/blob/master/s...
Open Graph Description: When creating a TCP server, the TCP handles there holds the socket is created in C++ land. The socket handle is then send to the onconnection server handle event using MakeCallback. code link: http...
X Description: When creating a TCP server, the TCP handles there holds the socket is created in C++ land. The socket handle is then send to the onconnection server handle event using MakeCallback. code link: http...
Opengraph URL: https://github.com/nodejs/node/issues/2986
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"AsyncWrap: TCPWrap created before MakeCallback","articleBody":"When creating a TCP server, the TCP handles there holds the socket is created in C++ land. The socket handle is then send to the `onconnection` server handle event using MakeCallback.\n\ncode link: https://github.com/nodejs/node/blob/master/src/tcp_wrap.cc#L259L272\n\nBecause the socket handle is created before `MakeCallback`, the `async_hooks_init_function` for the socket handle is called before `async_hooks_before_function` for the server handle. This makes it impossible to trace back the origin of the socket handle.\n\ndprof dump: http://bl.ocks.org/AndreasMadsen/raw/da3adb776bdfcf30f97f/ - Notice the free hanging blue line, which has an origin from nowhere. \n\n_edit: the link is only tested in Chrome, so here is a picture_\n\n\nThe visualization/test was done with the following code:\n\n``` javascript\n'use strict';\nrequire('../../dprof.js');\n\nconst net = require('net');\n\nconst server = net.createServer(function (socket) {\n socket.end('hallo world');\n});\n\nserver.listen(0, 'localhost', function () {\n const addr = server.address();\n const socket = net.connect(addr.port, addr.host, function () {\n socket.once('readable', function () {\n socket.read();\n socket.once('readable', server.close.bind(server));\n });\n });\n});\n```\n\nThis issue appears to be caused by https://github.com/nodejs/node/commit/7dde95a8bd. I agree that is is wired to call `async_hooks_before_function` in the `AsyncWrap` constructor, particularly in this case because it suggests that the creation of the `TCPWrap` object and `onconnection` happens in two different async turns.\n\nHowever I'm not sure what the proper fix would be.\n\n/cc @trevnorris \n","author":{"url":"https://github.com/AndreasMadsen","@type":"Person","name":"AndreasMadsen"},"datePublished":"2015-09-21T17:15:30.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":14},"url":"https://github.com/2986/node/issues/2986"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:3c6a1b30-72c4-167f-71f2-a3bbcab149ea |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8034:1DC9FC:B26325:B67DDE:6A4DB7CD |
| html-safe-nonce | 37b8cf3f4f7ec1971e8e53efa03f4f23b0b36cf5a4ec2e5babebece73ca3a409 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MDM0OjFEQzlGQzpCMjYzMjU6QjY3RERFOjZBNERCN0NEIiwidmlzaXRvcl9pZCI6IjUwNzU1MzUyNDI1NjkwMzc3NzMiLCJyZWdpb25fZWRnZSI6InNlYSIsInJlZ2lvbl9yZW5kZXIiOiJzZWEifQ== |
| visitor-hmac | f8dc155aa9378af8e3a29b49b7874c210d0bf3f6ea8b4c4ffc32d9b940041a67 |
| hovercard-subject-tag | issue:107557588 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/2986/issue_layout |
| twitter:image | https://opengraph.githubassets.com/bbaa6bfec7f149f1ca3a4df2af8ccd2f51454a9a7a2cd7f5981772d406b32de4/nodejs/node/issues/2986 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/bbaa6bfec7f149f1ca3a4df2af8ccd2f51454a9a7a2cd7f5981772d406b32de4/nodejs/node/issues/2986 |
| og:image:alt | When creating a TCP server, the TCP handles there holds the socket is created in C++ land. The socket handle is then send to the onconnection server handle event using MakeCallback. code link: http... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | AndreasMadsen |
| hostname | github.com |
| expected-hostname | github.com |
| None | 06b8a6144231bf3a234f1c2e9993861e07ce98a905912b114aa386c2d7e84b33 |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 32f7b614aca06e6bbd89842b1370df1328264f68 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width