Changeset cf2af94 in mainline for uspace/lib/c/generic/fibril_synch.c


Ignore:
Timestamp:
2011-02-09T11:46:47Z (14 years ago)
Author:
Martin Sucha <sucha14@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
cb15135a
Parents:
a49c4002 (diff), 0b37882 (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:

Merge mainline changes

Local modifications:

  • change pipefs and ext2 to build again (use async_* calls instead of ipc_*)
File:
1 edited

Legend:

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

    ra49c4002 rcf2af94  
    3636#include <fibril.h>
    3737#include <async.h>
    38 #include <async_priv.h>
    3938#include <adt/list.h>
    4039#include <futex.h>
     
    4443#include <stacktrace.h>
    4544#include <stdlib.h>
     45#include "private/async.h"
    4646
    4747static void optimize_execution_power(void)
     
    5555         */
    5656        if (atomic_get(&threads_in_ipc_wait) > 0)
    57                 ipc_poke();
     57                async_poke();
    5858}
    5959
     
    103103{
    104104        fibril_t *f = (fibril_t *) fibril_get_id();
     105
     106        if (fibril_get_sercount() != 0)
     107                abort();
    105108
    106109        futex_down(&async_futex);
     
    139142static void _fibril_mutex_unlock_unsafe(fibril_mutex_t *fm)
    140143{
    141         assert(fm->counter <= 0);
    142144        if (fm->counter++ < 0) {
    143145                link_t *tmp;
     
    165167void fibril_mutex_unlock(fibril_mutex_t *fm)
    166168{
     169        assert(fibril_mutex_is_locked(fm));
    167170        futex_down(&async_futex);
    168171        _fibril_mutex_unlock_unsafe(fm);
    169172        futex_up(&async_futex);
     173}
     174
     175bool fibril_mutex_is_locked(fibril_mutex_t *fm)
     176{
     177        bool locked = false;
     178       
     179        futex_down(&async_futex);
     180        if (fm->counter <= 0)
     181                locked = true;
     182        futex_up(&async_futex);
     183       
     184        return locked;
    170185}
    171186
     
    182197        fibril_t *f = (fibril_t *) fibril_get_id();
    183198       
     199        if (fibril_get_sercount() != 0)
     200                abort();
     201
    184202        futex_down(&async_futex);
    185203        if (frw->writers) {
     
    207225        fibril_t *f = (fibril_t *) fibril_get_id();
    208226       
     227        if (fibril_get_sercount() != 0)
     228                abort();
     229
    209230        futex_down(&async_futex);
    210231        if (frw->writers || frw->readers) {
     
    230251{
    231252        futex_down(&async_futex);
    232         assert(frw->readers || (frw->writers == 1));
    233253        if (frw->readers) {
    234254                if (--frw->readers) {
     
    296316void fibril_rwlock_read_unlock(fibril_rwlock_t *frw)
    297317{
     318        assert(fibril_rwlock_is_read_locked(frw));
    298319        _fibril_rwlock_common_unlock(frw);
    299320}
     
    301322void fibril_rwlock_write_unlock(fibril_rwlock_t *frw)
    302323{
     324        assert(fibril_rwlock_is_write_locked(frw));
    303325        _fibril_rwlock_common_unlock(frw);
     326}
     327
     328bool fibril_rwlock_is_read_locked(fibril_rwlock_t *frw)
     329{
     330        bool locked = false;
     331
     332        futex_down(&async_futex);
     333        if (frw->readers)
     334                locked = true;
     335        futex_up(&async_futex);
     336
     337        return locked;
     338}
     339
     340bool fibril_rwlock_is_write_locked(fibril_rwlock_t *frw)
     341{
     342        bool locked = false;
     343
     344        futex_down(&async_futex);
     345        if (frw->writers) {
     346                assert(frw->writers == 1);
     347                locked = true;
     348        }
     349        futex_up(&async_futex);
     350
     351        return locked;
     352}
     353
     354bool fibril_rwlock_is_locked(fibril_rwlock_t *frw)
     355{
     356        return fibril_rwlock_is_read_locked(frw) ||
     357            fibril_rwlock_is_write_locked(frw);
    304358}
    305359
     
    314368{
    315369        awaiter_t wdata;
     370
     371        assert(fibril_mutex_is_locked(fm));
    316372
    317373        if (timeout < 0)
Note: See TracChangeset for help on using the changeset viewer.