Ignore:
File:
1 edited

Legend:

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

    rac2b598 r2026bb6  
    1111// Author           : Thierry Delisle
    1212// Created On       : Fri May 25 01:37:11 2018
    13 // Last Modified By : Peter A. Buhr
    14 // Last Modified On : Wed Dec  4 09:16:39 2019
    15 // Update Count     : 1
     13// Last Modified By : Thierry Delisle
     14// Last Modified On : Fri May 25 01:37:51 2018
     15// Update Count     : 0
    1616//
    1717
     
    4040        if( is_locked ) {
    4141                append( blocked_threads, kernelTLS.this_thread );
    42                 unlock( lock );
    43                 park();
     42                BlockInternal( &lock );
    4443        }
    4544        else {
     
    6362        lock( this.lock __cfaabi_dbg_ctx2 );
    6463        this.is_locked = (this.blocked_threads != 0);
    65         unpark(
     64        WakeThread(
    6665                pop_head( this.blocked_threads )
    6766        );
     
    7473        this.lock{};
    7574        this.blocked_threads{};
    76         this.owner = 0p;
     75        this.owner = NULL;
    7776        this.recursion_count = 0;
    7877}
     
    8483void lock(recursive_mutex_lock & this) with(this) {
    8584        lock( lock __cfaabi_dbg_ctx2 );
    86         if( owner == 0p ) {
     85        if( owner == NULL ) {
    8786                owner = kernelTLS.this_thread;
    8887                recursion_count = 1;
     
    9594        else {
    9695                append( blocked_threads, kernelTLS.this_thread );
    97                 unlock( lock );
    98                 park();
     96                BlockInternal( &lock );
    9997        }
    10098}
     
    103101        bool ret = false;
    104102        lock( lock __cfaabi_dbg_ctx2 );
    105         if( owner == 0p ) {
     103        if( owner == NULL ) {
    106104                owner = kernelTLS.this_thread;
    107105                recursion_count = 1;
     
    120118        recursion_count--;
    121119        if( recursion_count == 0 ) {
    122                 $thread * thrd = pop_head( blocked_threads );
     120                thread_desc * thrd = pop_head( blocked_threads );
    123121                owner = thrd;
    124122                recursion_count = (thrd ? 1 : 0);
    125                 unpark( thrd );
     123                WakeThread( thrd );
    126124        }
    127125        unlock( lock );
     
    140138void notify_one(condition_variable & this) with(this) {
    141139        lock( lock __cfaabi_dbg_ctx2 );
    142         unpark(
     140        WakeThread(
    143141                pop_head( this.blocked_threads )
    144142        );
     
    149147        lock( lock __cfaabi_dbg_ctx2 );
    150148        while(this.blocked_threads) {
    151                 unpark(
     149                WakeThread(
    152150                        pop_head( this.blocked_threads )
    153151                );
     
    159157        lock( this.lock __cfaabi_dbg_ctx2 );
    160158        append( this.blocked_threads, kernelTLS.this_thread );
    161         unlock( this.lock );
    162         park();
     159        BlockInternal( &this.lock );
    163160}
    164161
     
    167164        lock( this.lock __cfaabi_dbg_ctx2 );
    168165        append( this.blocked_threads, kernelTLS.this_thread );
    169         unlock(l);
    170         unlock(this.lock);
    171         park();
     166        void __unlock(void) {
     167                unlock(l);
     168                unlock(this.lock);
     169        }
     170        BlockInternal( __unlock );
    172171        lock(l);
    173172}
Note: See TracChangeset for help on using the changeset viewer.