diff --git a/src/node_messaging.cc b/src/node_messaging.cc index 7ca3ad14d03406..d727f27063376d 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -469,18 +469,18 @@ MessagePort::MessagePort(Environment* env, Local wrap) : HandleWrap(env, wrap, - reinterpret_cast(new uv_async_t()), + reinterpret_cast(&async_), AsyncWrap::PROVIDER_MESSAGEPORT), data_(new MessagePortData(this)) { auto onmessage = [](uv_async_t* handle) { // Called when data has been put into the queue. - MessagePort* channel = static_cast(handle->data); + MessagePort* channel = ContainerOf(&MessagePort::async_, handle); channel->OnMessage(); }; CHECK_EQ(uv_async_init(env->event_loop(), - async(), + &async_, onmessage), 0); - async()->data = static_cast(this); + async_.data = static_cast(this); Local fn; if (!wrap->Get(context, env->oninit_symbol()).ToLocal(&fn)) @@ -494,21 +494,13 @@ MessagePort::MessagePort(Environment* env, Debug(this, "Created message port"); } -void MessagePort::AddToIncomingQueue(Message&& message) { - data_->AddToIncomingQueue(std::move(message)); -} - -uv_async_t* MessagePort::async() { - return reinterpret_cast(GetHandle()); -} - bool MessagePort::IsDetached() const { return data_ == nullptr || IsHandleClosing(); } void MessagePort::TriggerAsync() { if (IsHandleClosing()) return; - CHECK_EQ(uv_async_send(async()), 0); + CHECK_EQ(uv_async_send(&async_), 0); } void MessagePort::Close(v8::Local close_callback) { @@ -643,7 +635,6 @@ void MessagePort::OnClose() { data_->Disentangle(); } data_.reset(); - delete async(); } std::unique_ptr MessagePort::Detach() { diff --git a/src/node_messaging.h b/src/node_messaging.h index 9055a8bf961844..282ad93468d95f 100644 --- a/src/node_messaging.h +++ b/src/node_messaging.h @@ -152,8 +152,6 @@ class MessagePort : public HandleWrap { v8::Maybe PostMessage(Environment* env, v8::Local message, v8::Local transfer); - // Deliver a single message into this port's incoming queue. - void AddToIncomingQueue(Message&& message); // Start processing messages on this port as a receiving end. void Start(); @@ -200,9 +198,9 @@ class MessagePort : public HandleWrap { void OnClose() override; void OnMessage(); void TriggerAsync(); - inline uv_async_t* async(); std::unique_ptr data_ = nullptr; + uv_async_t async_; friend class MessagePortData; };