Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8420436

Browse files
committed
there is no need to hold reference to the target actor from msg_t
1 parent6e15b2f commit8420436

File tree

6 files changed

+6
-18
lines changed

6 files changed

+6
-18
lines changed

‎lib/acto.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,6 @@ msg_t::~msg_t() {
159159
if (sender) {
160160
runtime_t::instance()->release(sender);
161161
}
162-
if (target) {
163-
runtime_t::instance()->release(target);
164-
}
165162
}
166163

167164
object_t*make_instance(actor_ref context,

‎lib/acto.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ struct msg_t : generics::intrusive_t<msg_t> {
8585
/// Sender of the message.
8686
/// Can be empty.
8787
object_t* sender{nullptr};
88-
/// Receiver of the message.
89-
object_t* target{nullptr};
9088

9189
public:
9290
constexprmsg_t(const std::type_index& idx)noexcept

‎lib/runtime.cpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ struct binding_context_t {
4040
// - detect message loop.
4141
for (auto ai = actors.cbegin(); ai != actors.cend(); ++ai) {
4242
while (auto msg = (*ai)->select_message()) {
43-
runtime->handle_message(std::move(msg));
43+
runtime->handle_message(*ai,std::move(msg));
4444
}
4545
if (need_delete) {
4646
runtime->deconstruct_object(*ai);
@@ -172,12 +172,8 @@ void runtime_t::deconstruct_object(object_t* const obj) {
172172
}
173173
}
174174

175-
voidruntime_t::handle_message(std::unique_ptr<msg_t> msg) {
176-
assert(msg);
177-
assert(msg->target);
178-
assert(msg->target->impl);
179-
180-
object_t*const obj = msg->target;
175+
voidruntime_t::handle_message(object_t* obj, std::unique_ptr<msg_t> msg) {
176+
assert(obj->impl);
181177

182178
{
183179
active_actor_guardguard(obj);
@@ -254,9 +250,6 @@ bool runtime_t::send_on_behalf(object_t* const target,
254250
msg->sender = sender;
255251
acquire(sender);
256252
}
257-
// Acquire reference to the target actor.
258-
msg->target = target;
259-
acquire(target);
260253
}
261254
// Enqueue the message.
262255
target->enqueue(std::move(msg));

‎lib/runtime.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class runtime_t : public worker_t::callbacks {
3535
voiddeconstruct_object(object_t*const object);
3636

3737
///
38-
voidhandle_message(std::unique_ptr<msg_t> msg)override;
38+
voidhandle_message(object_t* obj,std::unique_ptr<msg_t> msg)override;
3939

4040
/// Ждать уничтожения тела объекта
4141
voidjoin(object_t*const obj);

‎lib/worker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ bool worker_t::process() {
5858
while (true) {
5959
// Handle a message.
6060
if (auto msg = obj->select_message()) {
61-
slots_->handle_message(std::move(msg));
61+
slots_->handle_message(obj,std::move(msg));
6262
// Continue processing messages if the object is bound to the thread or
6363
// the time slice has not been elapsed yet.
6464
if (obj->exclusive ||

‎lib/worker.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class worker_t : public generics::intrusive_t<worker_t> {
2525
virtual~callbacks() =default;
2626

2727
/** Process the message.*/
28-
virtualvoidhandle_message(std::unique_ptr<msg_t>) = 0;
28+
virtualvoidhandle_message(object_t* obj,std::unique_ptr<msg_t>) = 0;
2929

3030
/** Schedule object to delete.*/
3131
virtualvoidpush_delete(object_t*const) = 0;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp