Changeset 9d6e1b8a


Ignore:
Timestamp:
Nov 17, 2020, 4:29:51 PM (10 months ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
arm-eh, jacob/cs343-translation, master, new-ast-unique-expr
Children:
3ea8ad1
Parents:
1e208ea
Message:

Minor improvments to assertions and comments

Location:
libcfa/src/concurrency
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel.cfa

    r1e208ea r9d6e1b8a  
    251251                /* paranoid */ verify( ! __preemption_enabled() );
    252252                /* paranoid */ verify( kernelTLS().this_thread == thrd_dst );
     253                /* paranoid */ verify( thrd_dst->curr_cluster == this->cltr );
    253254                /* paranoid */ verify( thrd_dst->context.SP );
    254255                /* paranoid */ verify( thrd_dst->state != Halted );
     
    267268                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst );
    268269                /* paranoid */ verify( thrd_dst->context.SP );
     270                /* paranoid */ verify( thrd_dst->curr_cluster == this->cltr );
    269271                /* paranoid */ verify( kernelTLS().this_thread == thrd_dst );
    270272                /* paranoid */ verify( ! __preemption_enabled() );
     
    360362void __schedule_thread( $thread * thrd ) {
    361363        /* paranoid */ verify( ! __preemption_enabled() );
     364        /* paranoid */ verify( kernelTLS().this_proc_id );
    362365        /* paranoid */ verify( thrd );
    363366        /* paranoid */ verify( thrd->state != Halted );
    364         /* paranoid */ verify( kernelTLS().this_proc_id );
     367        /* paranoid */ verify( thrd->curr_cluster );
    365368        /* paranoid */ #if defined( __CFA_WITH_VERIFY__ )
    366369        /* paranoid */  if( thrd->state == Blocked || thrd->state == Start ) assertf( thrd->preempted == __NO_PREEMPTION,
     
    473476                disable_interrupts();
    474477
     478                /* paranoid */ verify( ! __preemption_enabled() );
     479                /* paranoid */ verify( thrd->state == Active );
     480                /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd->canary );
     481                /* paranoid */ verify( kernelTLS().this_thread == thrd );
     482                /* paranoid */ verify( thrd->context.SP );
     483                /* paranoid */ verifyf( ((uintptr_t)thrd->context.SP) > ((uintptr_t)__get_stack(thrd->curr_cor)->limit), "ERROR : $thread %p has been corrupted.\n StackPointer too large.\n", thrd );
     484                /* paranoid */ verifyf( ((uintptr_t)thrd->context.SP) < ((uintptr_t)__get_stack(thrd->curr_cor)->base ), "ERROR : $thread %p has been corrupted.\n StackPointer too small.\n", thrd );
     485
    475486                thrd->state = Halted;
    476487                if( TICKET_RUNNING != thrd->ticket ) { abort( "Thread terminated with pending unpark" ); }
    477                 if( thrd != this->owner || this->recursion != 1) { abort( "Thread internal monitor has unbalanced recursion" ); }
     488                if( thrd != this->owner ) { abort( "Thread internal monitor has incorrect owner" ); }
     489                if( this->recursion != 1) { abort( "Thread internal monitor has unbalanced recursion" ); }
    478490
    479491                // Leave the thread
    480                 /* paranoid */ verify( ! __preemption_enabled() );
    481492                returnToKernel();
     493
     494                // Control flow should never reach here!
    482495                abort();
    483 
    484                 // Control flow should never reach here!
    485496        }
    486497}
  • libcfa/src/concurrency/monitor.cfa

    r1e208ea r9d6e1b8a  
    166166        }
    167167        // SKULLDUGGERY: join will act as a dtor so it would normally trigger to above check
     168        // because join will not release the monitor after it executed.
    168169        // to avoid that it sets the owner to the special value thrd | 1p before exiting
    169170        else if( this->owner == ($thread*)(1 | (uintptr_t)thrd) ) {
     
    172173
    173174                // No one has the monitor, just take it
    174                 this->owner = thrd;
     175                __set_owner( this, thrd );
    175176
    176177                verifyf( active_thread() == this->owner, "Expected owner to be %p, got %p (r: %i, m: %p)", active_thread(), this->owner, this->recursion, this );
     
    285286
    286287        // Lock the monitor now
     288        /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd->canary );
    287289        /* paranoid */ verify( this->lock.lock );
     290        /* paranoid */ verify( thrd->context.SP );
     291        /* paranoid */ verifyf( ((uintptr_t)thrd->context.SP) > ((uintptr_t)__get_stack(thrd->curr_cor)->limit), "ERROR : $thread %p has been corrupted.\n StackPointer too large.\n", thrd );
     292        /* paranoid */ verifyf( ((uintptr_t)thrd->context.SP) < ((uintptr_t)__get_stack(thrd->curr_cor)->base ), "ERROR : $thread %p has been corrupted.\n StackPointer too small.\n", thrd );
     293        /* paranoid */ verify( ! __preemption_enabled() );
     294
    288295        /* paranoid */ verifyf( thrd == this->owner, "Expected owner to be %p, got %p (r: %i, m: %p)", thrd, this->owner, this->recursion, this );
    289         /* paranoid */ verify( ! __preemption_enabled() );
    290296        /* paranoid */ verify( thrd->state == Halted );
    291297        /* paranoid */ verify( this->recursion == 1 );
Note: See TracChangeset for help on using the changeset viewer.