| 946 | reply[kReplyStartTime] = now() |
| 947 | |
| 948 | const onResFinished = err => { |
| 949 | reply[kReplyEndTime] = now() |
| 950 | reply.raw.removeListener('finish', onResFinished) |
| 951 | reply.raw.removeListener('error', onResFinished) |
| 952 | |
| 953 | const ctx = reply[kRouteContext] |
| 954 | |
| 955 | // Clean up handler timeout / signal resources |
| 956 | if (reply.request[kRequestSignal]) { |
| 957 | clearTimeout(reply.request[kTimeoutTimer]) |
| 958 | reply.request[kTimeoutTimer] = null |
| 959 | if (reply.request[kOnAbort]) { |
| 960 | reply.request.raw.removeListener('close', reply.request[kOnAbort]) |
| 961 | reply.request[kOnAbort] = null |
| 962 | } |
| 963 | } |
| 964 | |
| 965 | // Fix: release socket._meta so request/reply objects are not retained |
| 966 | // past the response on keep-alive connections. |
| 967 | const socket = reply.request.raw.socket |
| 968 | if (socket && socket._meta && socket._meta.request === reply.request) { |
| 969 | socket._meta = null |
| 970 | } |
| 971 | |
| 972 | if (ctx && ctx.onResponse !== null) { |
| 973 | onResponseHookRunner( |
| 974 | ctx.onResponse, |
| 975 | reply.request, |
| 976 | reply, |
| 977 | onResponseCallback |
| 978 | ) |
| 979 | } else { |
| 980 | onResponseCallback(err, reply.request, reply) |
| 981 | } |
| 982 | } |
| 983 | |
| 984 | reply.raw.on('finish', onResFinished) |
| 985 | reply.raw.on('error', onResFinished) |
nothing calls this directly
no test coverage detected