Ignore:
File:
1 edited

Legend:

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

    r2654afb r6aeca0d  
    4949#include <assert.h>
    5050#include <async.h>
    51 #include <futex.h>
    5251
    5352#ifdef FUTEX_UPGRADABLE
     
    115114        fibril->waits_for = NULL;
    116115
    117         futex_lock(&fibril_futex);
     116        fibril->switches = 0;
     117
     118        /*
     119         * We are called before __tcb_set(), so we need to use
     120         * futex_down/up() instead of futex_lock/unlock() that
     121         * may attempt to access TLS.
     122         */
     123        futex_down(&fibril_futex);
    118124        list_append(&fibril->all_link, &fibril_list);
    119         futex_unlock(&fibril_futex);
     125        futex_up(&fibril_futex);
    120126       
    121127        return fibril;
     
    212218                        assert(stype == FIBRIL_TO_MANAGER);
    213219
     220                        srcf->switches++;
     221
    214222                        /*
    215223                         * Don't put the current fibril into any list, it should
     
    271279        size_t stack_size = (stksz == FIBRIL_DFLT_STK_SIZE) ?
    272280            stack_size_get() : stksz;
    273         fibril->stack = as_area_create((void *) -1, stack_size,
     281        fibril->stack = as_area_create(AS_AREA_ANY, stack_size,
    274282            AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE | AS_AREA_GUARD |
    275             AS_AREA_LATE_RESERVE);
     283            AS_AREA_LATE_RESERVE, AS_AREA_UNPAGED);
    276284        if (fibril->stack == (void *) -1) {
    277285                fibril_teardown(fibril, false);
Note: See TracChangeset for help on using the changeset viewer.