mirror of https://github.com/lukechilds/node.git
Browse Source
This commit also breaks up req_wrap.h into req-wrap.h and req-wrap-inl.h to work around a circular dependency issue in env.h. PR-URL: https://github.com/iojs/io.js/pull/667 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: Trevor Norris <trev.norris@gmail.com>v1.8.0-commit
Ben Noordhuis
10 years ago
25 changed files with 171 additions and 181 deletions
@ -0,0 +1,41 @@ |
|||
#ifndef SRC_REQ_WRAP_INL_H_ |
|||
#define SRC_REQ_WRAP_INL_H_ |
|||
|
|||
#include "req-wrap.h" |
|||
#include "async-wrap.h" |
|||
#include "async-wrap-inl.h" |
|||
#include "env.h" |
|||
#include "env-inl.h" |
|||
#include "util.h" |
|||
#include "util-inl.h" |
|||
|
|||
namespace node { |
|||
|
|||
template <typename T> |
|||
ReqWrap<T>::ReqWrap(Environment* env, |
|||
v8::Handle<v8::Object> object, |
|||
AsyncWrap::ProviderType provider) |
|||
: AsyncWrap(env, object, provider) { |
|||
if (env->in_domain()) |
|||
object->Set(env->domain_string(), env->domain_array()->Get(0)); |
|||
|
|||
// FIXME(bnoordhuis) The fact that a reinterpret_cast is needed is
|
|||
// arguably a good indicator that there should be more than one queue.
|
|||
env->req_wrap_queue()->PushBack(reinterpret_cast<ReqWrap<uv_req_t>*>(this)); |
|||
} |
|||
|
|||
template <typename T> |
|||
ReqWrap<T>::~ReqWrap() { |
|||
CHECK_EQ(req_.data, this); // Assert that someone has called Dispatched().
|
|||
CHECK_EQ(false, persistent().IsEmpty()); |
|||
persistent().Reset(); |
|||
} |
|||
|
|||
template <typename T> |
|||
void ReqWrap<T>::Dispatched() { |
|||
req_.data = this; |
|||
} |
|||
|
|||
} // namespace node
|
|||
|
|||
#endif // SRC_REQ_WRAP_INL_H_
|
@ -0,0 +1,30 @@ |
|||
#ifndef SRC_REQ_WRAP_H_ |
|||
#define SRC_REQ_WRAP_H_ |
|||
|
|||
#include "async-wrap.h" |
|||
#include "env.h" |
|||
#include "util.h" |
|||
#include "v8.h" |
|||
|
|||
namespace node { |
|||
|
|||
template <typename T> |
|||
class ReqWrap : public AsyncWrap { |
|||
public: |
|||
inline ReqWrap(Environment* env, |
|||
v8::Handle<v8::Object> object, |
|||
AsyncWrap::ProviderType provider); |
|||
inline ~ReqWrap() override; |
|||
inline void Dispatched(); // Call this after the req has been dispatched.
|
|||
|
|||
private: |
|||
friend class Environment; |
|||
ListNode<ReqWrap> req_wrap_queue_; |
|||
|
|||
public: |
|||
T req_; // Must be last. TODO(bnoordhuis) Make private.
|
|||
}; |
|||
|
|||
} // namespace node
|
|||
|
|||
#endif // SRC_REQ_WRAP_H_
|
@ -1,49 +0,0 @@ |
|||
#ifndef SRC_REQ_WRAP_H_ |
|||
#define SRC_REQ_WRAP_H_ |
|||
|
|||
#include "async-wrap.h" |
|||
#include "async-wrap-inl.h" |
|||
#include "env.h" |
|||
#include "env-inl.h" |
|||
#include "queue.h" |
|||
#include "util.h" |
|||
|
|||
namespace node { |
|||
|
|||
template <typename T> |
|||
class ReqWrap : public AsyncWrap { |
|||
public: |
|||
ReqWrap(Environment* env, |
|||
v8::Handle<v8::Object> object, |
|||
AsyncWrap::ProviderType provider) |
|||
: AsyncWrap(env, object, provider) { |
|||
if (env->in_domain()) |
|||
object->Set(env->domain_string(), env->domain_array()->Get(0)); |
|||
|
|||
QUEUE_INSERT_TAIL(env->req_wrap_queue(), &req_wrap_queue_); |
|||
} |
|||
|
|||
|
|||
~ReqWrap() override { |
|||
QUEUE_REMOVE(&req_wrap_queue_); |
|||
// Assert that someone has called Dispatched()
|
|||
CHECK_EQ(req_.data, this); |
|||
CHECK_EQ(false, persistent().IsEmpty()); |
|||
persistent().Reset(); |
|||
} |
|||
|
|||
// Call this after the req has been dispatched.
|
|||
void Dispatched() { |
|||
req_.data = this; |
|||
} |
|||
|
|||
// TODO(bnoordhuis) Make these private.
|
|||
QUEUE req_wrap_queue_; |
|||
T req_; // *must* be last, GetActiveRequests() in node.cc depends on it
|
|||
}; |
|||
|
|||
|
|||
} // namespace node
|
|||
|
|||
|
|||
#endif // SRC_REQ_WRAP_H_
|
Loading…
Reference in new issue