Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/tests/sched-int-block.c

    rccd349d r736fe25  
    1010
    1111monitor global_data_t {
    12         thread_desc * last_thread;
    13         thread_desc * last_signaller;
     12        state_t state;
     13        bool ran;
    1414};
    1515
    1616void ?{} ( global_data_t * this ) {
    17         this->last_thread = NULL;
    18         this->last_signaller = NULL;
     17        this->state = BARGE;
    1918}
    2019
     
    2928//------------------------------------------------------------------------------
    3029void wait_op( global_data_t * mutex a, global_data_t * mutex b, unsigned i ) {
    31         wait( &cond, (uintptr_t)this_thread() );
     30        wait( &cond );
     31        a->ran = b->ran = true;
    3232
    3333        yield( ((unsigned)rand48()) % 10 );
    3434
    35         if(a->last_thread != a->last_signaller || b->last_thread != b->last_signaller ) {
    36                 sout | "ERROR Barging detected, expected" | a->last_signaller | b->last_signaller | "got" | a->last_thread | b->last_thread | endl;
     35        if(a->state != SIGNAL || b->state != SIGNAL) {
     36                sout | "ERROR Barging detected" | a->state | b->state | endl;
    3737                abort();
    3838        }
    3939
    40         a->last_thread = b->last_thread = this_thread();
     40        a->state = b->state = WAITED;
    4141
    4242        yield( ((unsigned)rand48()) % 10 );
     
    5454        yield( ((unsigned)rand48()) % 10 );
    5555
    56         a->last_thread = b->last_thread = a->last_signaller = b->last_signaller = this_thread();
     56        a->ran = b->ran = false;
     57        a->state = b->state = SIGNAL;
    5758
    58         if( !is_empty( &cond ) ) {
     59        signal_block( &cond );
    5960
    60                 thread_desc * next = front( &cond );
     61        yield( ((unsigned)rand48()) % 10 );
    6162
    62                 if( ! signal_block( &cond ) ) {
    63                         sout | "ERROR expected to be able to signal" | endl;
    64                         abort();
    65                 }
    66 
    67                 yield( ((unsigned)rand48()) % 10 );
    68 
    69                 if(a->last_thread != next || b->last_thread != next) {
    70                         sout | "ERROR Barging detected, expected" | next | "got" | a->last_thread | b->last_thread | endl;
     63        assert(a->ran == b->ran);
     64        if(a->ran)
     65        {
     66                if(a->state != WAITED || b->state != WAITED) {
     67                        sout | "ERROR Barging detected" | a->state | b->state | endl;
    7168                        abort();
    7269                }
     
    8481//------------------------------------------------------------------------------
    8582void barge_op( global_data_t * mutex a ) {
    86         a->last_thread = this_thread();
     83        a->state = BARGE;
    8784}
    8885
Note: See TracChangeset for help on using the changeset viewer.