2525#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
2626
2727#include " aliased_buffer.h"
28+ #include " callback_queue-inl.h"
2829#include " env.h"
2930#include " node.h"
3031#include " util-inl.h"
@@ -730,50 +731,9 @@ inline void IsolateData::set_options(
730731 options_ = std::move (options);
731732}
732733
733- std::unique_ptr<Environment::NativeImmediateCallback>
734- Environment::NativeImmediateQueue::Shift () {
735- std::unique_ptr<Environment::NativeImmediateCallback> ret = std::move (head_);
736- if (ret) {
737- head_ = ret->get_next ();
738- if (!head_)
739- tail_ = nullptr ; // The queue is now empty.
740- }
741- size_--;
742- return ret;
743- }
744-
745- void Environment::NativeImmediateQueue::Push (
746- std::unique_ptr<Environment::NativeImmediateCallback> cb) {
747- NativeImmediateCallback* prev_tail = tail_;
748-
749- size_++;
750- tail_ = cb.get ();
751- if (prev_tail != nullptr )
752- prev_tail->set_next (std::move (cb));
753- else
754- head_ = std::move (cb);
755- }
756-
757- void Environment::NativeImmediateQueue::ConcatMove (
758- NativeImmediateQueue&& other) {
759- size_ += other.size_ ;
760- if (tail_ != nullptr )
761- tail_->set_next (std::move (other.head_ ));
762- else
763- head_ = std::move (other.head_ );
764- tail_ = other.tail_ ;
765- other.tail_ = nullptr ;
766- other.size_ = 0 ;
767- }
768-
769- size_t Environment::NativeImmediateQueue::size () const {
770- return size_.load ();
771- }
772-
773734template <typename Fn>
774735void Environment::CreateImmediate (Fn&& cb, bool ref) {
775- auto callback = std::make_unique<NativeImmediateCallbackImpl<Fn>>(
776- std::move (cb), ref);
736+ auto callback = native_immediates_.CreateCallback (std::move (cb), ref);
777737 native_immediates_.Push (std::move (callback));
778738}
779739
@@ -793,8 +753,8 @@ void Environment::SetUnrefImmediate(Fn&& cb) {
793753
794754template <typename Fn>
795755void Environment::SetImmediateThreadsafe (Fn&& cb) {
796- auto callback = std::make_unique<NativeImmediateCallbackImpl<Fn>>(
797- std::move (cb), false );
756+ auto callback =
757+ native_immediates_threadsafe_. CreateCallback ( std::move (cb), false );
798758 {
799759 Mutex::ScopedLock lock (native_immediates_threadsafe_mutex_);
800760 native_immediates_threadsafe_.Push (std::move (callback));
@@ -804,8 +764,8 @@ void Environment::SetImmediateThreadsafe(Fn&& cb) {
804764
805765template <typename Fn>
806766void Environment::RequestInterrupt (Fn&& cb) {
807- auto callback = std::make_unique<NativeImmediateCallbackImpl<Fn>>(
808- std::move (cb), false );
767+ auto callback =
768+ native_immediates_interrupts_. CreateCallback ( std::move (cb), false );
809769 {
810770 Mutex::ScopedLock lock (native_immediates_threadsafe_mutex_);
811771 native_immediates_interrupts_.Push (std::move (callback));
@@ -814,34 +774,6 @@ void Environment::RequestInterrupt(Fn&& cb) {
814774 RequestInterruptFromV8 ();
815775}
816776
817- Environment::NativeImmediateCallback::NativeImmediateCallback (bool refed)
818- : refed_(refed) {}
819-
820- bool Environment::NativeImmediateCallback::is_refed () const {
821- return refed_;
822- }
823-
824- std::unique_ptr<Environment::NativeImmediateCallback>
825- Environment::NativeImmediateCallback::get_next () {
826- return std::move (next_);
827- }
828-
829- void Environment::NativeImmediateCallback::set_next (
830- std::unique_ptr<NativeImmediateCallback> next) {
831- next_ = std::move (next);
832- }
833-
834- template <typename Fn>
835- Environment::NativeImmediateCallbackImpl<Fn>::NativeImmediateCallbackImpl(
836- Fn&& callback, bool refed)
837- : NativeImmediateCallback(refed),
838- callback_(std::move(callback)) {}
839-
840- template <typename Fn>
841- void Environment::NativeImmediateCallbackImpl<Fn>::Call(Environment* env) {
842- callback_ (env);
843- }
844-
845777inline bool Environment::can_call_into_js () const {
846778 return can_call_into_js_ && !is_stopping ();
847779}
0 commit comments