Changeset ef5be68 in mainline for uspace/srv/logger/namespace.c


Ignore:
Timestamp:
2012-07-14T11:42:41Z (12 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2e39656
Parents:
f6bc83a
Message:

Logger: namespace can have more writers

File:
1 edited

Legend:

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

    rf6bc83a ref5be68  
    4242struct logging_namespace {
    4343        fibril_mutex_t guard;
    44         bool has_writer;
     44        size_t writers_count;
    4545        bool has_reader;
    4646        const char *name;
     
    114114        prodcons_initialize(&namespace->messages);
    115115        namespace->has_reader = false;
    116         namespace->has_writer = true;
     116        namespace->writers_count = 0;
    117117        link_initialize(&namespace->link);
    118118
     
    135135
    136136        fibril_mutex_lock(&namespace->guard);
    137         if (namespace->has_reader || namespace->has_writer) {
     137        if (namespace->has_reader || (namespace->writers_count > 0)) {
    138138                fibril_mutex_unlock(&namespace->guard);
    139139                fibril_mutex_unlock(&namespace_list_guard);
     
    175175}
    176176
     177logging_namespace_t *namespace_writer_attach(const char *name)
     178{
     179        logging_namespace_t *namespace = NULL;
     180
     181        fibril_mutex_lock(&namespace_list_guard);
     182
     183        namespace = namespace_find_no_lock(name);
     184
     185        if (namespace == NULL) {
     186                namespace = namespace_create(name);
     187        }
     188
     189        fibril_mutex_lock(&namespace->guard);
     190        namespace->writers_count++;
     191        fibril_mutex_unlock(&namespace->guard);
     192
     193        fibril_mutex_unlock(&namespace_list_guard);
     194
     195        return namespace;
     196}
     197
    177198void namespace_reader_detach(logging_namespace_t *namespace)
    178199{
     
    187208{
    188209        fibril_mutex_lock(&namespace->guard);
    189         namespace->has_writer = false;
     210        assert(namespace->writers_count > 0);
     211        namespace->writers_count--;
    190212        fibril_mutex_unlock(&namespace->guard);
    191213
Note: See TracChangeset for help on using the changeset viewer.