Changeset ebbc8a74 in mainline for uspace/lib/c/generic/io/log.c


Ignore:
Timestamp:
2012-08-16T15:44:27Z (12 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d6ddeb7
Parents:
dc5aa568
Message:

Remove premature optimizations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/io/log.c

    rdc5aa568 rebbc8a74  
    6262#define MESSAGE_BUFFER_SIZE 4096
    6363
    64 FIBRIL_RWLOCK_INITIALIZE(current_observed_level_lock);
    65 log_level_t current_observed_level;
    66 
    6764static int logger_register(async_sess_t *session, const char *prog_name)
    6865{
     
    113110
    114111        return reg_msg_rc;
    115 }
    116 
    117 static void cannot_use_level_changed_monitor(void)
    118 {
    119         fibril_rwlock_write_lock(&current_observed_level_lock);
    120         current_observed_level = LVL_LIMIT;
    121         fibril_rwlock_write_unlock(&current_observed_level_lock);
    122 }
    123 
    124 static int observed_level_changed_monitor(void *arg)
    125 {
    126         async_sess_t *monitor_session = service_connect_blocking(EXCHANGE_SERIALIZE, SERVICE_LOGGER, LOGGER_INTERFACE_SINK, 0);
    127         if (monitor_session == NULL) {
    128                 cannot_use_level_changed_monitor();
    129                 return ENOMEM;
    130         }
    131 
    132         int rc = logger_register(monitor_session, log_prog_name);
    133         if (rc != EOK) {
    134                 cannot_use_level_changed_monitor();
    135                 return rc;
    136         }
    137 
    138         async_exch_t *exchange = async_exchange_begin(monitor_session);
    139         if (exchange == NULL) {
    140                 cannot_use_level_changed_monitor();
    141                 return ENOMEM;
    142         }
    143 
    144         while (true) {
    145                 sysarg_t has_reader;
    146                 sysarg_t msg_rc = async_req_0_1(exchange,
    147                     LOGGER_BLOCK_UNTIL_READER_CHANGED, &has_reader);
    148                 if (msg_rc != EOK) {
    149                         cannot_use_level_changed_monitor();
    150                         break;
    151                 }
    152 
    153                 fibril_rwlock_write_lock(&current_observed_level_lock);
    154                 if ((bool) has_reader) {
    155                         current_observed_level = LVL_LIMIT;
    156                 } else {
    157                         current_observed_level = LVL_NOTE;
    158                 }
    159                 fibril_rwlock_write_unlock(&current_observed_level_lock);
    160         }
    161 
    162         async_exchange_end(exchange);
    163 
    164         return EOK;
    165 }
    166 
    167 static log_level_t get_current_observed_level(void)
    168 {
    169         fibril_rwlock_read_lock(&current_observed_level_lock);
    170         log_level_t level = current_observed_level;
    171         fibril_rwlock_read_unlock(&current_observed_level_lock);
    172         return level;
    173112}
    174113
     
    230169        int rc = logger_register(logger_session, log_prog_name);
    231170
    232         current_observed_level = LVL_NOTE;
    233 
    234         fid_t observed_level_changed_fibril = fibril_create(observed_level_changed_monitor, NULL);
    235         if (observed_level_changed_fibril == 0) {
    236                 cannot_use_level_changed_monitor();
    237         } else {
    238                 fibril_add_ready(observed_level_changed_fibril);
    239         }
    240 
    241171        return rc;
    242172}
     
    266196}
    267197
    268 bool _log_shall_record(log_context_t context, log_level_t level)
    269 {
    270         return get_current_observed_level() >= level;
    271 }
    272 
    273198/** Write an entry to the log.
    274199 *
     
    278203 * @param fmt           Format string (no traling newline).
    279204 */
    280 void _log_ctx_msg(log_context_t ctx, log_level_t level, const char *fmt, ...)
     205void log_ctx_msg(log_context_t ctx, log_level_t level, const char *fmt, ...)
    281206{
    282207        va_list args;
    283208
    284209        va_start(args, fmt);
    285         _log_ctx_msgv(ctx, level, fmt, args);
     210        log_ctx_msgv(ctx, level, fmt, args);
    286211        va_end(args);
    287212}
     
    294219 * @param fmt           Format string (no trailing newline)
    295220 */
    296 void _log_ctx_msgv(log_context_t ctx, log_level_t level, const char *fmt, va_list args)
     221void log_ctx_msgv(log_context_t ctx, log_level_t level, const char *fmt, va_list args)
    297222{
    298223        assert(level < LVL_LIMIT);
    299 
    300         if (get_current_observed_level() < level) {
    301                 return;
    302         }
    303224
    304225        char *message_buffer = malloc(MESSAGE_BUFFER_SIZE);
Note: See TracChangeset for help on using the changeset viewer.