Changeset 9bde0d5 in mainline for uspace/lib/c/generic/async/server.c


Ignore:
Timestamp:
2018-07-18T19:56:43Z (6 years ago)
Author:
Jiří Zárevúcky <jiri.zarevucky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
42f5860
Parents:
40abf56
git-author:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-07-18 19:47:28)
git-committer:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-07-18 19:56:43)
Message:

Replace a bunch of direct uses of futex_t.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/async/server.c

    r40abf56 r9bde0d5  
    234234}
    235235
    236 static futex_t client_futex = FUTEX_INITIALIZER;
     236static FIBRIL_RMUTEX_INITIALIZE(client_mutex);
    237237static hash_table_t client_hash_table;
    238238
    239239// TODO: lockfree notification_queue?
    240 static futex_t notification_futex = FUTEX_INITIALIZER;
     240static FIBRIL_RMUTEX_INITIALIZE(notification_mutex);
    241241static hash_table_t notification_hash_table;
    242242static LIST_INITIALIZE(notification_queue);
     
    339339        client_t *client = NULL;
    340340
    341         futex_lock(&client_futex);
     341        fibril_rmutex_lock(&client_mutex);
    342342        ht_link_t *link = hash_table_find(&client_hash_table, &client_id);
    343343        if (link) {
     
    346346        } else if (create) {
    347347                // TODO: move the malloc out of critical section
     348                /* malloc() is rmutex safe. */
    348349                client = malloc(sizeof(client_t));
    349350                if (client) {
     
    356357        }
    357358
    358         futex_unlock(&client_futex);
     359        fibril_rmutex_unlock(&client_mutex);
    359360        return client;
    360361}
     
    364365        bool destroy;
    365366
    366         futex_lock(&client_futex);
     367        fibril_rmutex_lock(&client_mutex);
    367368
    368369        if (atomic_predec(&client->refcnt) == 0) {
     
    372373                destroy = false;
    373374
    374         futex_unlock(&client_futex);
     375        fibril_rmutex_unlock(&client_mutex);
    375376
    376377        if (destroy) {
     
    693694                fibril_semaphore_down(&notification_semaphore);
    694695
    695                 futex_lock(&notification_futex);
     696                fibril_rmutex_lock(&notification_mutex);
    696697
    697698                /*
     
    727728                        list_remove(&notification->qlink);
    728729
    729                 futex_unlock(&notification_futex);
     730                fibril_rmutex_unlock(&notification_mutex);
    730731
    731732                if (handler)
     
    766767        assert(call);
    767768
    768         futex_lock(&notification_futex);
     769        fibril_rmutex_lock(&notification_mutex);
    769770
    770771        notification_msg_t *m = list_pop(&notification_freelist,
     
    772773
    773774        if (!m) {
    774                 futex_unlock(&notification_futex);
     775                fibril_rmutex_unlock(&notification_mutex);
    775776                m = malloc(sizeof(notification_msg_t));
    776777                if (!m) {
     
    779780                }
    780781
    781                 futex_lock(&notification_futex);
     782                fibril_rmutex_lock(&notification_mutex);
    782783                notification_freelist_total++;
    783784        }
     
    789790                // TODO: Make sure this can't happen and turn it into assert.
    790791                notification_freelist_total--;
    791                 futex_unlock(&notification_futex);
     792                fibril_rmutex_unlock(&notification_mutex);
    792793                free(m);
    793794                return;
     
    804805                list_append(&notification->qlink, &notification_queue);
    805806
    806         futex_unlock(&notification_futex);
     807        fibril_rmutex_unlock(&notification_mutex);
    807808
    808809        fibril_semaphore_up(&notification_semaphore);
     
    829830        fid_t fib = 0;
    830831
    831         futex_lock(&notification_futex);
     832        fibril_rmutex_lock(&notification_mutex);
    832833
    833834        if (notification_avail == 0) {
     
    835836                fib = fibril_create(notification_fibril_func, NULL);
    836837                if (fib == 0) {
    837                         futex_unlock(&notification_futex);
     838                        fibril_rmutex_unlock(&notification_mutex);
    838839                        free(notification);
    839840                        return NULL;
     
    847848        hash_table_insert(&notification_hash_table, &notification->htlink);
    848849
    849         futex_unlock(&notification_futex);
     850        fibril_rmutex_unlock(&notification_mutex);
    850851
    851852        if (imethod == 0) {
Note: See TracChangeset for help on using the changeset viewer.