Changes in / [fa2e183:13edbac]


Ignore:
Location:
libcfa/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/bits/defs.hfa

    rfa2e183 r13edbac  
    3030#ifdef __cforall
    3131#define __cfa_anonymous_object(x) inline struct x
    32 #define __cfa_dlink(x) inline dlink(x)
     32#define __cfa_dlink1(x) dlink(x)
    3333#else
    3434#define __cfa_anonymous_object(x) struct x __cfa_anonymous_object
    35 #define __cfa_dlink(x) struct { struct x * next; struct x * back; } __dlink_substitute
     35#define __cfa_dlink1(x) struct { struct x * next; struct x * back; }
    3636#endif
    3737
  • libcfa/src/concurrency/invoke.h

    rfa2e183 r13edbac  
    196196
    197197                // used to put threads on dlist data structure
    198                 __cfa_dlink(thread$);
     198                __cfa_dlink1(thread$) user_link;
    199199
    200200                struct {
     
    218218                #endif
    219219        };
    220         #ifdef __cforall
    221                 P9_EMBEDDED( thread$, dlink(thread$) )
    222         #endif
     220
    223221        // Wrapper for gdb
    224222        struct cfathread_thread_t { struct thread$ debug; };
     
    241239                }
    242240
     241                static inline tytagref( dlink(thread$), dlink(thread$) ) ?`inner( thread$ & this ) {
     242                        dlink(thread$) & b = this.user_link;
     243                        tytagref( dlink(thread$), dlink(thread$) ) result = { b };
     244                        return result;
     245                }
     246
    243247                static inline void ?{}(__monitor_group_t & this) {
    244248                        (this.data){0p};
  • libcfa/src/concurrency/kernel.cfa

    rfa2e183 r13edbac  
    602602                /* 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 );
    603603
    604                 thrd->state = Halting;
    605604                if( TICKET_RUNNING != thrd->ticket ) { abort( "Thread terminated with pending unpark" ); }
    606605                if( thrd != this->owner ) { abort( "Thread internal monitor has incorrect owner" ); }
    607606                if( this->recursion != 1) { abort( "Thread internal monitor has unbalanced recursion" ); }
     607
     608                thrd->state = Halting;
     609                thrd->ticket = TICKET_DEAD;
    608610
    609611                // Leave the thread
  • libcfa/src/concurrency/kernel/private.hfa

    rfa2e183 r13edbac  
    166166#define TICKET_RUNNING ( 0) // thread is running
    167167#define TICKET_UNBLOCK ( 1) // thread should ignore next block
     168#define TICKET_DEAD    (0xDEAD) // thread should never be unparked
    168169
    169170//-----------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.