@@ -212,10 +212,10 @@ static void setup_for_sync(__cilkrts_worker *w, worker_id self, Closure *t) {
212212}
213213
214214static void resume_boss (__cilkrts_worker * w , worker_id self , Closure * t ) {
215- CILK_ASSERT (t -> status == CLOSURE_SUSPENDED );
216- CILK_ASSERT (!Closure_has_children (t ));
217215 // TODO: This should not be on any worker's deque
218216 Closure_lock (self , t );
217+ CILK_ASSERT_INTEGER_EQUAL (t -> status , CLOSURE_SUSPENDED );
218+ CILK_ASSERT (!Closure_has_children (t ));
219219 setup_for_sync (w , self , t );
220220 Closure_set_status (t , CLOSURE_RUNNING );
221221 Closure_unlock (self , t );
@@ -1431,6 +1431,7 @@ void do_what_it_says_boss(__cilkrts_worker *w, Closure *t) {
14311431 CILK_STOP_TIMING (w , INTERVAL_SCHED );
14321432 worker_change_state (w , WORKER_IDLE );
14331433 worker_scheduler (w );
1434+ cilkrts_bug ("boss worker exited scheduling loop" );
14341435}
14351436
14361437void worker_scheduler (__cilkrts_worker * w ) {
@@ -1483,10 +1484,16 @@ void worker_scheduler(__cilkrts_worker *w) {
14831484 CILK_START_TIMING (w , INTERVAL_SCHED );
14841485 CILK_START_TIMING (w , INTERVAL_IDLE );
14851486
1486- if (rts -> activate_boss ) {
1487+ if (is_boss && rts -> activate_boss ) {
14871488 t = rts -> root_closure ;
14881489 resume_boss (w , self , t );
14891490 rts -> activate_boss = false;
1491+ /* bookkeeping */
1492+ fails = maybe_reengage_workers
1493+ (rts , self , nworkers , w , fails ,
1494+ & sample_threshold , & inefficient_history , & efficient_history ,
1495+ sentinel_count_history , & sentinel_count_history_tail ,
1496+ & recent_sentinel_count );
14901497 break ;
14911498 }
14921499
@@ -1662,9 +1669,6 @@ void worker_scheduler(__cilkrts_worker *w) {
16621669
16631670 CILK_STOP_TIMING (w , INTERVAL_SCHED );
16641671 worker_change_state (w , WORKER_IDLE );
1665- if (is_boss ) {
1666- __builtin_longjmp (rts -> boss_ctx , 1 );
1667- }
16681672}
16691673
16701674void * scheduler_thread_proc (void * arg ) {
0 commit comments