Changeset 0453261 in mainline for uspace/lib/c/generic/fibril.c


Ignore:
Timestamp:
2015-06-06T19:02:49Z (9 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ee1c2d9
Parents:
b5143bd (diff), 4d11204 (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:

Mainline fix

File:
1 edited

Legend:

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

    rb5143bd r0453261  
    5757/**
    5858 * This futex serializes access to ready_list,
    59  * serialized_list and manager_list.
     59 * serialized_list, manager_list and fibril_list.
    6060 */
    6161static futex_t fibril_futex = FUTEX_INITIALIZER;
     
    126126       
    127127        fibril->waits_for = NULL;
     128
     129        futex_lock(&fibril_futex);
    128130        list_append(&fibril->all_link, &fibril_list);
     131        futex_unlock(&fibril_futex);
    129132       
    130133        return fibril;
    131134}
    132135
    133 void fibril_teardown(fibril_t *fibril)
    134 {
     136void fibril_teardown(fibril_t *fibril, bool locked)
     137{       
     138        if (!locked)
     139                futex_lock(&fibril_futex);
    135140        list_remove(&fibril->all_link);
     141        if (!locked)
     142                futex_unlock(&fibril_futex);
    136143        tls_free(fibril->tcb);
    137144        free(fibril);
     
    208215                                        as_area_destroy(stack);
    209216                                }
    210                                 fibril_teardown(srcf->clean_after_me);
     217                                fibril_teardown(srcf->clean_after_me, true);
    211218                                srcf->clean_after_me = NULL;
    212219                        }
     
    294301            AS_AREA_LATE_RESERVE);
    295302        if (fibril->stack == (void *) -1) {
    296                 fibril_teardown(fibril);
     303                fibril_teardown(fibril, false);
    297304                return 0;
    298305        }
     
    321328       
    322329        as_area_destroy(fibril->stack);
    323         fibril_teardown(fibril);
     330        fibril_teardown(fibril, false);
    324331}
    325332
Note: See TracChangeset for help on using the changeset viewer.