git-svn-id: svn://db.shs.com.ru/pip@971 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2020-03-24 13:21:16 +00:00
parent 4b24631cd9
commit 250be2bf62

View File

@@ -633,12 +633,12 @@ public:
if (i.performer) { if (i.performer) {
i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender)); i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender));
} else { } else {
bool th = sender->thread_safe_; bool ts = sender->thread_safe_;
if (th) i.dest_o->mutex_.lock(); if (ts) i.dest_o->mutex_.lock();
i.dest_o->emitter_ = sender; i.dest_o->emitter_ = sender;
((void( *)(void * ))i.slot)(i.dest); ((void( *)(void * ))i.slot)(i.dest);
i.dest_o->emitter_ = 0; i.dest_o->emitter_ = 0;
if (th) i.dest_o->mutex_.unlock(); if (ts) i.dest_o->mutex_.unlock();
} }
#ifdef PIP_CXX11_SUPPORT #ifdef PIP_CXX11_SUPPORT
} }
@@ -661,12 +661,13 @@ public:
if (i.args_count > 0) vl << PIVariant::fromValue(v0); if (i.args_count > 0) vl << PIVariant::fromValue(v0);
i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender, vl)); i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender, vl));
} else { } else {
if (sender->thread_safe_) i.dest_o->mutex_.lock(); bool ts = sender->thread_safe_;
if (ts) i.dest_o->mutex_.lock();
i.dest_o->emitter_ = sender; i.dest_o->emitter_ = sender;
if (i.args_count == 0) ((void(*)(void *))i.slot)(i.dest); if (i.args_count == 0) ((void(*)(void *))i.slot)(i.dest);
else ((void(*)(void * , T0))i.slot)(i.dest, v0); else ((void(*)(void * , T0))i.slot)(i.dest, v0);
i.dest_o->emitter_ = 0; i.dest_o->emitter_ = 0;
if (sender->thread_safe_) i.dest_o->mutex_.unlock(); if (ts) i.dest_o->mutex_.unlock();
} }
#ifdef PIP_CXX11_SUPPORT #ifdef PIP_CXX11_SUPPORT
} }
@@ -689,7 +690,8 @@ public:
if (i.args_count > 1) vl << PIVariant::fromValue(v1); if (i.args_count > 1) vl << PIVariant::fromValue(v1);
i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender, vl)); i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender, vl));
} else { } else {
if (sender->thread_safe_) i.dest_o->mutex_.lock(); bool ts = sender->thread_safe_;
if (ts) i.dest_o->mutex_.lock();
i.dest_o->emitter_ = sender; i.dest_o->emitter_ = sender;
switch (i.args_count) { switch (i.args_count) {
case 0: ((void(*)(void *))i.slot)(i.dest); break; case 0: ((void(*)(void *))i.slot)(i.dest); break;
@@ -697,7 +699,7 @@ public:
default: ((void(*)(void * , T0, T1))i.slot)(i.dest, v0, v1); break; default: ((void(*)(void * , T0, T1))i.slot)(i.dest, v0, v1); break;
} }
i.dest_o->emitter_ = 0; i.dest_o->emitter_ = 0;
if (sender->thread_safe_) i.dest_o->mutex_.unlock(); if (ts) i.dest_o->mutex_.unlock();
} }
#ifdef PIP_CXX11_SUPPORT #ifdef PIP_CXX11_SUPPORT
} }
@@ -721,7 +723,8 @@ public:
if (i.args_count > 2) vl << PIVariant::fromValue(v2); if (i.args_count > 2) vl << PIVariant::fromValue(v2);
i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender, vl)); i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender, vl));
} else { } else {
if (sender->thread_safe_) i.dest_o->mutex_.lock(); bool ts = sender->thread_safe_;
if (ts) i.dest_o->mutex_.lock();
i.dest_o->emitter_ = sender; i.dest_o->emitter_ = sender;
switch (i.args_count) { switch (i.args_count) {
case 0: ((void(*)(void *))i.slot)(i.dest); break; case 0: ((void(*)(void *))i.slot)(i.dest); break;
@@ -730,7 +733,7 @@ public:
default: ((void(*)(void * , T0, T1, T2))i.slot)(i.dest, v0, v1, v2); break; default: ((void(*)(void * , T0, T1, T2))i.slot)(i.dest, v0, v1, v2); break;
} }
i.dest_o->emitter_ = 0; i.dest_o->emitter_ = 0;
if (sender->thread_safe_) i.dest_o->mutex_.unlock(); if (ts) i.dest_o->mutex_.unlock();
} }
#ifdef PIP_CXX11_SUPPORT #ifdef PIP_CXX11_SUPPORT
} }
@@ -755,7 +758,8 @@ public:
if (i.args_count > 3) vl << PIVariant::fromValue(v3); if (i.args_count > 3) vl << PIVariant::fromValue(v3);
i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender, vl)); i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender, vl));
} else { } else {
if (sender->thread_safe_) i.dest_o->mutex_.lock(); bool ts = sender->thread_safe_;
if (ts) i.dest_o->mutex_.lock();
i.dest_o->emitter_ = sender; i.dest_o->emitter_ = sender;
switch (i.args_count) { switch (i.args_count) {
case 0: ((void(*)(void *))i.slot)(i.dest); break; case 0: ((void(*)(void *))i.slot)(i.dest); break;
@@ -765,7 +769,7 @@ public:
default: ((void(*)(void * , T0, T1, T2, T3))i.slot)(i.dest, v0, v1, v2, v3); break; default: ((void(*)(void * , T0, T1, T2, T3))i.slot)(i.dest, v0, v1, v2, v3); break;
} }
i.dest_o->emitter_ = 0; i.dest_o->emitter_ = 0;
if (sender->thread_safe_) i.dest_o->mutex_.unlock(); if (ts) i.dest_o->mutex_.unlock();
} }
#ifdef PIP_CXX11_SUPPORT #ifdef PIP_CXX11_SUPPORT
} }