25
25
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
26
27
27
#include " aliased_buffer.h"
28
+ #include " callback_queue-inl.h"
28
29
#include " env.h"
29
30
#include " node.h"
30
31
#include " util-inl.h"
@@ -705,50 +706,9 @@ inline void IsolateData::set_options(
705
706
options_ = std::move (options);
706
707
}
707
708
708
- std::unique_ptr<Environment::NativeImmediateCallback>
709
- Environment::NativeImmediateQueue::Shift () {
710
- std::unique_ptr<Environment::NativeImmediateCallback> ret = std::move (head_);
711
- if (ret) {
712
- head_ = ret->get_next ();
713
- if (!head_)
714
- tail_ = nullptr ; // The queue is now empty.
715
- }
716
- size_--;
717
- return ret;
718
- }
719
-
720
- void Environment::NativeImmediateQueue::Push (
721
- std::unique_ptr<Environment::NativeImmediateCallback> cb) {
722
- NativeImmediateCallback* prev_tail = tail_;
723
-
724
- size_++;
725
- tail_ = cb.get ();
726
- if (prev_tail != nullptr )
727
- prev_tail->set_next (std::move (cb));
728
- else
729
- head_ = std::move (cb);
730
- }
731
-
732
- void Environment::NativeImmediateQueue::ConcatMove (
733
- NativeImmediateQueue&& other) {
734
- size_ += other.size_ ;
735
- if (tail_ != nullptr )
736
- tail_->set_next (std::move (other.head_ ));
737
- else
738
- head_ = std::move (other.head_ );
739
- tail_ = other.tail_ ;
740
- other.tail_ = nullptr ;
741
- other.size_ = 0 ;
742
- }
743
-
744
- size_t Environment::NativeImmediateQueue::size () const {
745
- return size_.load ();
746
- }
747
-
748
709
template <typename Fn>
749
710
void Environment::CreateImmediate (Fn&& cb, bool ref) {
750
- auto callback = std::make_unique<NativeImmediateCallbackImpl<Fn>>(
751
- std::move (cb), ref);
711
+ auto callback = native_immediates_.CreateCallback (std::move (cb), ref);
752
712
native_immediates_.Push (std::move (callback));
753
713
}
754
714
@@ -768,8 +728,8 @@ void Environment::SetUnrefImmediate(Fn&& cb) {
768
728
769
729
template <typename Fn>
770
730
void Environment::SetImmediateThreadsafe (Fn&& cb) {
771
- auto callback = std::make_unique<NativeImmediateCallbackImpl<Fn>>(
772
- std::move (cb), false );
731
+ auto callback =
732
+ native_immediates_threadsafe_. CreateCallback ( std::move (cb), false );
773
733
{
774
734
Mutex::ScopedLock lock (native_immediates_threadsafe_mutex_);
775
735
native_immediates_threadsafe_.Push (std::move (callback));
@@ -780,8 +740,8 @@ void Environment::SetImmediateThreadsafe(Fn&& cb) {
780
740
781
741
template <typename Fn>
782
742
void Environment::RequestInterrupt (Fn&& cb) {
783
- auto callback = std::make_unique<NativeImmediateCallbackImpl<Fn>>(
784
- std::move (cb), false );
743
+ auto callback =
744
+ native_immediates_interrupts_. CreateCallback ( std::move (cb), false );
785
745
{
786
746
Mutex::ScopedLock lock (native_immediates_threadsafe_mutex_);
787
747
native_immediates_interrupts_.Push (std::move (callback));
@@ -791,34 +751,6 @@ void Environment::RequestInterrupt(Fn&& cb) {
791
751
RequestInterruptFromV8 ();
792
752
}
793
753
794
- Environment::NativeImmediateCallback::NativeImmediateCallback (bool refed)
795
- : refed_(refed) {}
796
-
797
- bool Environment::NativeImmediateCallback::is_refed () const {
798
- return refed_;
799
- }
800
-
801
- std::unique_ptr<Environment::NativeImmediateCallback>
802
- Environment::NativeImmediateCallback::get_next () {
803
- return std::move (next_);
804
- }
805
-
806
- void Environment::NativeImmediateCallback::set_next (
807
- std::unique_ptr<NativeImmediateCallback> next) {
808
- next_ = std::move (next);
809
- }
810
-
811
- template <typename Fn>
812
- Environment::NativeImmediateCallbackImpl<Fn>::NativeImmediateCallbackImpl(
813
- Fn&& callback, bool refed)
814
- : NativeImmediateCallback(refed),
815
- callback_(std::move(callback)) {}
816
-
817
- template <typename Fn>
818
- void Environment::NativeImmediateCallbackImpl<Fn>::Call(Environment* env) {
819
- callback_ (env);
820
- }
821
-
822
754
inline bool Environment::can_call_into_js () const {
823
755
return can_call_into_js_ && !is_stopping ();
824
756
}
0 commit comments