Ignore:
Timestamp:
Aug 25, 2017, 10:38:34 AM (8 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
800d275
Parents:
af08051 (diff), 3eab308c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

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

    raf08051 r28e58fd  
    2424};
    2525
    26 void ?{} ( global_data_t * this ) {
    27         this->last_thread = NULL;
    28         this->last_signaller = NULL;
     26void ?{} ( global_data_t & this ) {
     27        this.last_thread = NULL;
     28        this.last_signaller = NULL;
    2929}
    3030
    31 void ^?{} ( global_data_t * this ) {}
     31void ^?{} ( global_data_t & this ) {}
    3232
    3333global_data_t globalA, globalB;
     
    3838
    3939//------------------------------------------------------------------------------
    40 void wait_op( global_data_t * mutex a, global_data_t * mutex b, unsigned i ) {
     40void wait_op( global_data_t & mutex a, global_data_t & mutex b, unsigned i ) {
    4141        wait( &cond, (uintptr_t)this_thread );
    4242
    4343        yield( ((unsigned)rand48()) % 10 );
    4444
    45         if(a->last_thread != a->last_signaller || b->last_thread != b->last_signaller ) {
    46                 sout | "ERROR Barging detected, expected" | a->last_signaller | b->last_signaller | "got" | a->last_thread | b->last_thread | endl;
     45        if(a.last_thread != a.last_signaller || b.last_thread != b.last_signaller ) {
     46                sout | "ERROR Barging detected, expected" | a.last_signaller | b.last_signaller | "got" | a.last_thread | b.last_thread | endl;
    4747                abort();
    4848        }
    4949
    50         a->last_thread = b->last_thread = this_thread;
     50        a.last_thread = b.last_thread = this_thread;
    5151
    5252        yield( ((unsigned)rand48()) % 10 );
     
    5454
    5555thread Waiter {};
    56 void main( Waiter* this ) {
     56void main( Waiter & this ) {
    5757        for( int i = 0; i < N; i++ ) {
    58                 wait_op( &globalA, &globalB, i );
     58                wait_op( globalA, globalB, i );
    5959        }
    6060}
    6161
    6262//------------------------------------------------------------------------------
    63 void signal_op( global_data_t * mutex a, global_data_t * mutex b ) {
     63void signal_op( global_data_t & mutex a, global_data_t & mutex b ) {
    6464        yield( ((unsigned)rand48()) % 10 );
    6565
    66         a->last_thread = b->last_thread = a->last_signaller = b->last_signaller = this_thread;
     66        [a.last_thread, b.last_thread, a.last_signaller, b.last_signaller] = this_thread;
    6767
    6868        if( !is_empty( &cond ) ) {
     
    7777                yield( ((unsigned)rand48()) % 10 );
    7878
    79                 if(a->last_thread != next || b->last_thread != next) {
    80                         sout | "ERROR Barging detected, expected" | next | "got" | a->last_thread | b->last_thread | endl;
     79                if(a.last_thread != next || b.last_thread != next) {
     80                        sout | "ERROR Barging detected, expected" | next | "got" | a.last_thread | b.last_thread | endl;
    8181                        abort();
    8282                }
     
    8686
    8787thread Signaller {};
    88 void main( Signaller* this ) {
     88void main( Signaller & this ) {
    8989        while( !done ) {
    90                 signal_op( &globalA, &globalB );
     90                signal_op( globalA, globalB );
    9191        }
    9292}
    9393
    9494//------------------------------------------------------------------------------
    95 void barge_op( global_data_t * mutex a ) {
    96         a->last_thread = this_thread;
     95void barge_op( global_data_t & mutex a ) {
     96        a.last_thread = this_thread;
    9797}
    9898
    9999thread Barger {};
    100 void main( Barger* this ) {
     100void main( Barger & this ) {
    101101        for( unsigned i = 0; !done; i++ ) {
    102102                //Choose some monitor to barge into with some irregular pattern
    103103                bool choose_a = (i % 13) > (i % 17);
    104                 barge_op( choose_a ? &globalA : &globalB );
     104                if ( choose_a ) barge_op( globalA );
     105                else barge_op( globalB );
    105106        }
    106107}
Note: See TracChangeset for help on using the changeset viewer.