@@ -328,7 +328,7 @@ void dump_thread_states(void) {
328
328
329
329
330
330
331
- void alaska::barrier::begin (void ) {
331
+ bool alaska::barrier::begin (void ) {
332
332
// Pseudocode:
333
333
//
334
334
// function begin():
@@ -369,9 +369,15 @@ void alaska::barrier::begin(void) {
369
369
int retries = 0 ;
370
370
int signals_sent = 0 ;
371
371
372
- // printf("\n");
372
+ bool success = true ;
373
+
373
374
// Make sure the threads that are in unmanaged (library) code get signalled.
374
375
while (true ) {
376
+ if (retries >= 1000 ) {
377
+ success = false ;
378
+ break ;
379
+ }
380
+ retries++;
375
381
bool sent_signal = false ;
376
382
list_for_each_entry (pos, &all_threads, list_head) {
377
383
if (pos->state ->join_status == ALASKA_JOIN_REASON_NOT_JOINED) {
@@ -391,6 +397,9 @@ void alaska::barrier::begin(void) {
391
397
392
398
(void )retries;
393
399
(void )signals_sent;
400
+
401
+
402
+ return success;
394
403
// printf("%10f ", (end - start) / 1000.0 / 1000.0 / 1000.0);
395
404
// dump_thread_states();
396
405
// printf(" retries = %d, signals = %d\n", retries, signals_sent);
@@ -437,14 +446,14 @@ static void alaska_barrier_signal_handler(int sig, siginfo_t* info, void* ptr) {
437
446
// we need to return back to the thread so it can hit a poll.
438
447
439
448
440
- // // First, though, we need to wait for the patches to be done.
449
+ // First, though, we need to wait for the patches to be done.
441
450
// while (!patches_done) {
442
451
// }
443
- //
444
- // for (auto [start, end] : managed_blob_text_regions) {
445
- // __builtin___clear_cache((char*)start, (char*)end);
446
- // }
447
- // printf("ManagedUntracked!\n");
452
+
453
+ for (auto [start, end] : managed_blob_text_regions) {
454
+ __builtin___clear_cache ((char *)start, (char *)end);
455
+ }
456
+ printf (" ManagedUntracked!\n " );
448
457
// printf("EEP %p %d!\n", return_address, sig);
449
458
return ;
450
459
0 commit comments