Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
src: exclude C++ SetImmediate() from count
There is no real reason to manage a count manually, given that
checking whether there are C++ callbacks is a single pointer
comparison.

This makes it easier to add other kinds of native C++ callbacks
that are managed in a similar way.
  • Loading branch information
addaleax committed Jan 21, 2020
commit c7ef27bac18990b95d4c064ec54d605bd1f5cc7a
9 changes: 0 additions & 9 deletions src/env-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -242,14 +242,6 @@ inline bool ImmediateInfo::has_outstanding() const {
return fields_[kHasOutstanding] == 1;
}

inline void ImmediateInfo::count_inc(uint32_t increment) {
fields_[kCount] += increment;
}

inline void ImmediateInfo::count_dec(uint32_t decrement) {
fields_[kCount] -= decrement;
}

inline void ImmediateInfo::ref_count_inc(uint32_t increment) {
fields_[kRefCount] += increment;
}
Expand Down Expand Up @@ -787,7 +779,6 @@ void Environment::CreateImmediate(Fn&& cb, bool ref) {
auto callback = std::make_unique<NativeImmediateCallbackImpl<Fn>>(
std::move(cb), ref);
native_immediates_.Push(std::move(callback));
immediate_info()->count_inc(1);
}

template <typename Fn>
Expand Down
12 changes: 4 additions & 8 deletions src/env.cc
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,6 @@ void Environment::RunAndClearNativeImmediates(bool only_refed) {
TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment),
"RunAndClearNativeImmediates", this);
size_t ref_count = 0;
size_t count = 0;

NativeImmediateQueue queue;
queue.ConcatMove(std::move(native_immediates_));
Expand All @@ -671,7 +670,6 @@ void Environment::RunAndClearNativeImmediates(bool only_refed) {
TryCatchScope try_catch(this);
DebugSealHandleScope seal_handle_scope(isolate());
while (std::unique_ptr<NativeImmediateCallback> head = queue.Shift()) {
count++;
if (head->is_refed())
ref_count++;

Expand All @@ -689,9 +687,10 @@ void Environment::RunAndClearNativeImmediates(bool only_refed) {
};
while (queue.size() > 0 && drain_list()) {}

DCHECK_GE(immediate_info()->count(), count);
immediate_info()->count_dec(count);
immediate_info()->ref_count_dec(ref_count);

if (immediate_info()->ref_count() == 0)
ToggleImmediateRef(false);
}


Expand Down Expand Up @@ -777,15 +776,12 @@ void Environment::CheckImmediate(uv_check_t* handle) {
TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment),
"CheckImmediate", env);

if (env->immediate_info()->count() == 0)
return;

HandleScope scope(env->isolate());
Context::Scope context_scope(env->context());

env->RunAndClearNativeImmediates();

if (!env->can_call_into_js())
if (env->immediate_info()->count() == 0 || !env->can_call_into_js())
return;

do {
Expand Down
2 changes: 0 additions & 2 deletions src/env.h
Original file line number Diff line number Diff line change
Expand Up @@ -736,8 +736,6 @@ class ImmediateInfo : public MemoryRetainer {
inline uint32_t count() const;
inline uint32_t ref_count() const;
inline bool has_outstanding() const;
inline void count_inc(uint32_t increment);
inline void count_dec(uint32_t decrement);
inline void ref_count_inc(uint32_t increment);
inline void ref_count_dec(uint32_t decrement);

Expand Down