Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 55bd76c in mainline


Ignore:
Timestamp:
2010-11-05T16:15:52Z (11 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master
Children:
9414abc, a66e2993
Parents:
649efcd
Message:

More straightforward use of check_for_deadlock().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/fibril_synch.c

    r649efcd r55bd76c  
    5858}
    5959
    60 static bool check_for_deadlock(fibril_owner_info_t *oi)
    61 {
    62         while (oi && oi->owned_by) {
    63                 if (oi->owned_by == (fibril_t *) fibril_get_id())
    64                         return true;
    65                 oi = oi->owned_by->waits_for;
    66         }
    67 
    68         return false;
    69 }
    70 
    7160static void print_deadlock(fibril_owner_info_t *oi)
    7261{
     
    8978                oi = oi->owned_by->waits_for;
    9079        }
    91 
    92         abort();
    93 }
     80}
     81
     82
     83static void check_for_deadlock(fibril_owner_info_t *oi)
     84{
     85        while (oi && oi->owned_by) {
     86                if (oi->owned_by == (fibril_t *) fibril_get_id()) {
     87                        print_deadlock(oi);
     88                        abort();
     89                }
     90                oi = oi->owned_by->waits_for;
     91        }
     92}
     93
    9494
    9595void fibril_mutex_initialize(fibril_mutex_t *fm)
     
    113113                link_initialize(&wdata.wu_event.link);
    114114                list_append(&wdata.wu_event.link, &fm->waiters);
    115 
    116                 if (check_for_deadlock(&fm->oi))
    117                         print_deadlock(&fm->oi);
     115                check_for_deadlock(&fm->oi);
    118116                f->waits_for = &fm->oi;
    119 
    120117                fibril_switch(FIBRIL_TO_MANAGER);
    121118        } else {
     
    194191                f->flags &= ~FIBRIL_WRITER;
    195192                list_append(&wdata.wu_event.link, &frw->waiters);
    196                
    197                 if (check_for_deadlock(&frw->oi))
    198                         print_deadlock(&frw->oi);
     193                check_for_deadlock(&frw->oi);
    199194                f->waits_for = &frw->oi;
    200                
    201195                fibril_switch(FIBRIL_TO_MANAGER);
    202196        } else {
     
    220214                f->flags |= FIBRIL_WRITER;
    221215                list_append(&wdata.wu_event.link, &frw->waiters);
    222                
    223                 if (check_for_deadlock(&frw->oi))
    224                         print_deadlock(&frw->oi);
     216                check_for_deadlock(&frw->oi);
    225217                f->waits_for = &frw->oi;
    226                
    227218                fibril_switch(FIBRIL_TO_MANAGER);
    228219        } else {
Note: See TracChangeset for help on using the changeset viewer.