diff options
author | Anna Henningsen <anna@addaleax.net> | 2018-01-13 17:48:07 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-01-18 22:57:43 +0100 |
commit | a7a1ada5b2afd586a8b73822ae0b3f59059a3552 (patch) | |
tree | 11341eea54203f6e4f783c21eaf8e4c96291d2ac /src | |
parent | 628307774eaf013654b3755f8c9ee6935fba06ad (diff) | |
download | android-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.cc | 24 |
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 = { |