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

Changeset ef5be68 in mainline


Ignore:
Timestamp:
2012-07-14T11:42:41Z (10 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial
Children:
2e39656
Parents:
f6bc83a
Message:

Logger: namespace can have more writers

Location:
uspace/srv/logger
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/logger/logger.h

    rf6bc83a ref5be68  
    6262void namespace_destroy(logging_namespace_t *);
    6363logging_namespace_t *namespace_reader_attach(const char *);
     64logging_namespace_t *namespace_writer_attach(const char *);
    6465void namespace_reader_detach(logging_namespace_t *);
    6566void namespace_writer_detach(logging_namespace_t *);
  • uspace/srv/logger/main.c

    rf6bc83a ref5be68  
    4747#include "logger.h"
    4848
    49 static logging_namespace_t *register_namespace(void)
     49static logging_namespace_t *find_namespace_and_attach_writer(void)
    5050{
    5151        ipc_call_t call;
     
    6565        }
    6666
    67         logging_namespace_t *result = namespace_create((const char *) name);
     67        logging_namespace_t *result = namespace_writer_attach((const char *) name);
    6868
    6969        free(name);
     
    224224                /* First call has to be the registration. */
    225225                async_answer_0(iid, EOK);
    226                 namespace = register_namespace();
     226                namespace = find_namespace_and_attach_writer();
    227227                if (namespace == NULL) {
    228228                        fprintf(stderr, NAME ": failed to register namespace.\n");
  • 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.