summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2018-01-13 17:48:07 +0100
committerAnna Henningsen <anna@addaleax.net>2018-01-18 22:57:43 +0100
commita7a1ada5b2afd586a8b73822ae0b3f59059a3552 (patch)
tree11341eea54203f6e4f783c21eaf8e4c96291d2ac /src
parent628307774eaf013654b3755f8c9ee6935fba06ad (diff)
downloadandroid-node-v8-a7a1ada5b2afd586a8b73822ae0b3f59059a3552.tar.gz
android-node-v8-a7a1ada5b2afd586a8b73822ae0b3f59059a3552.tar.bz2
android-node-v8-a7a1ada5b2afd586a8b73822ae0b3f59059a3552.zip
http: simplify parser lifetime tracking
Instead of providing a separate class for keeping the parser alive during its own call back, just delay a possible `.close()` call until the stack has cleared completely. PR-URL: https://github.com/nodejs/node/pull/18135 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/node_http_parser.cc24
1 files changed, 1 insertions, 23 deletions
diff --git a/src/node_http_parser.cc b/src/node_http_parser.cc
index 0f17050545..9debb8a205 100644
--- a/src/node_http_parser.cc
+++ b/src/node_http_parser.cc
@@ -376,8 +376,7 @@ class Parser : public AsyncWrap {
Parser* parser;
ASSIGN_OR_RETURN_UNWRAP(&parser, args.Holder());
- if (--parser->refcount_ == 0)
- delete parser;
+ delete parser;
}
@@ -543,22 +542,6 @@ class Parser : public AsyncWrap {
}
protected:
- class ScopedRetainParser {
- public:
- explicit ScopedRetainParser(Parser* p) : p_(p) {
- CHECK_GT(p_->refcount_, 0);
- p_->refcount_++;
- }
-
- ~ScopedRetainParser() {
- if (0 == --p_->refcount_)
- delete p_;
- }
-
- private:
- Parser* const p_;
- };
-
static const size_t kAllocBufferSize = 64 * 1024;
static void OnAllocImpl(size_t suggested_size, uv_buf_t* buf, void* ctx) {
@@ -595,8 +578,6 @@ class Parser : public AsyncWrap {
if (nread == 0)
return;
- ScopedRetainParser retain(parser);
-
parser->current_buffer_.Clear();
Local<Value> ret = parser->Execute(buf->base, nread);
@@ -734,7 +715,6 @@ class Parser : public AsyncWrap {
char* current_buffer_data_;
StreamResource::Callback<StreamResource::AllocCb> prev_alloc_cb_;
StreamResource::Callback<StreamResource::ReadCb> prev_read_cb_;
- int refcount_ = 1;
// These are helper functions for filling `http_parser_settings`, which turn
// a member function of Parser into a C-style HTTP parser callback.
@@ -751,8 +731,6 @@ class Parser : public AsyncWrap {
typedef int (Parser::*DataCall)(const char* at, size_t length);
static const struct http_parser_settings settings;
-
- friend class ScopedRetainParser;
};
const struct http_parser_settings Parser::settings = {