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

Changeset 01b8c2e4 in mainline


Ignore:
Timestamp:
2012-07-16T15:43:27Z (10 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial
Children:
be73793
Parents:
ceafd1b
Message:

Fix deadlock (recursive mutex locking)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/logger/namespace.c

    rceafd1b r01b8c2e4  
    9090}
    9191
    92 logging_namespace_t *namespace_create(const char *name)
    93 {
    94         fibril_mutex_lock(&namespace_list_guard);
     92static logging_namespace_t *namespace_create_no_lock(const char *name)
     93{
    9594        logging_namespace_t *existing = namespace_find_no_lock(name);
    9695        if (existing != NULL) {
    97                 fibril_mutex_unlock(&namespace_list_guard);
    9896                return NULL;
    9997        }
     
    10199        logging_namespace_t *namespace = malloc(sizeof(logging_namespace_t));
    102100        if (namespace == NULL) {
    103                 fibril_mutex_unlock(&namespace_list_guard);
    104101                return NULL;
    105102        }
     
    107104        namespace->name = str_dup(name);
    108105        if (namespace->name == NULL) {
    109                 fibril_mutex_unlock(&namespace_list_guard);
    110106                free(namespace);
    111107                return NULL;
     
    119115
    120116        list_append(&namespace->link, &namespace_list);
    121         fibril_mutex_unlock(&namespace_list_guard);
    122117
    123118        return namespace;
     119}
     120
     121
     122logging_namespace_t *namespace_create(const char *name)
     123{
     124        fibril_mutex_lock(&namespace_list_guard);
     125        logging_namespace_t *result = namespace_create_no_lock(name);
     126        fibril_mutex_unlock(&namespace_list_guard);
     127        return result;
    124128}
    125129
     
    186190
    187191        if (namespace == NULL) {
    188                 namespace = namespace_create(name);
     192                namespace = namespace_create_no_lock(name);
    189193        }
    190194
Note: See TracChangeset for help on using the changeset viewer.