@@ -496,7 +496,7 @@ int TaskGroup::start_foreground(TaskGroup** pg,
496496 (bool )(using_attr.flags & BTHREAD_NOSIGNAL)
497497 };
498498 g->set_remained (fn, &args);
499- TaskGroup:: sched_to (pg, m->tid );
499+ sched_to (pg, m->tid );
500500 }
501501 return 0 ;
502502}
@@ -784,6 +784,11 @@ void TaskGroup::ready_to_run(TaskMeta* meta, bool nosignal) {
784784#ifdef BRPC_BTHREAD_TRACER
785785 _control->_task_tracer .set_status (TASK_STATUS_READY, meta);
786786#endif // BRPC_BTHREAD_TRACER
787+ if (meta->attr .flags & BTHREAD_GLOBAL_PRIORITY) {
788+ _control->push_priority_queue (_tag, meta->tid );
789+ return ;
790+ }
791+
787792 push_rq (meta->tid );
788793 if (nosignal) {
789794 ++_num_nosignal;
@@ -808,6 +813,11 @@ void TaskGroup::ready_to_run_remote(TaskMeta* meta, bool nosignal) {
808813#ifdef BRPC_BTHREAD_TRACER
809814 _control->_task_tracer .set_status (TASK_STATUS_READY, meta);
810815#endif // BRPC_BTHREAD_TRACER
816+ if (meta->attr .flags & BTHREAD_GLOBAL_PRIORITY) {
817+ _control->push_priority_queue (_tag, meta->tid );
818+ return ;
819+ }
820+
811821 _remote_rq._mutex .lock ();
812822 while (!_remote_rq.push_locked (meta->tid )) {
813823 flush_nosignal_tasks_remote_locked (_remote_rq._mutex );
@@ -870,6 +880,10 @@ void TaskGroup::ready_to_run_in_worker_ignoresignal(void* args_in) {
870880
871881void TaskGroup::priority_to_run (void * args_in) {
872882 ReadyToRunArgs* args = static_cast <ReadyToRunArgs*>(args_in);
883+ #ifdef BRPC_BTHREAD_TRACER
884+ tls_task_group->_control ->_task_tracer .set_status (
885+ TASK_STATUS_READY, args->meta );
886+ #endif // BRPC_BTHREAD_TRACER
873887 return tls_task_group->control ()->push_priority_queue (args->tag , args->meta ->tid );
874888}
875889
@@ -1031,14 +1045,15 @@ int TaskGroup::interrupt(bthread_t tid, TaskControl* c, bthread_tag_t tag) {
10311045 }
10321046 } else if (sleep_id != 0 ) {
10331047 if (get_global_timer_thread ()->unschedule (sleep_id) == 0 ) {
1034- bthread::TaskGroup* g = bthread::tls_task_group;
1048+ TaskGroup* g = tls_task_group;
1049+ TaskMeta* m = address_meta (tid);
10351050 if (g) {
1036- g->ready_to_run (TaskGroup::address_meta (tid) );
1051+ g->ready_to_run (m );
10371052 } else {
10381053 if (!c) {
10391054 return EINVAL;
10401055 }
1041- c->choose_one_group (tag)->ready_to_run_remote (TaskGroup::address_meta (tid) );
1056+ c->choose_one_group (tag)->ready_to_run_remote (m );
10421057 }
10431058 }
10441059 }
0 commit comments