Changeset ebbc8a74 in mainline for uspace/lib/c/generic/io/log.c
- Timestamp:
- 2012-08-16T15:44:27Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade
- Children:
- d6ddeb7
- Parents:
- dc5aa568
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/log.c
rdc5aa568 rebbc8a74 62 62 #define MESSAGE_BUFFER_SIZE 4096 63 63 64 FIBRIL_RWLOCK_INITIALIZE(current_observed_level_lock);65 log_level_t current_observed_level;66 67 64 static int logger_register(async_sess_t *session, const char *prog_name) 68 65 { … … 113 110 114 111 return reg_msg_rc; 115 }116 117 static void cannot_use_level_changed_monitor(void)118 {119 fibril_rwlock_write_lock(¤t_observed_level_lock);120 current_observed_level = LVL_LIMIT;121 fibril_rwlock_write_unlock(¤t_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(¤t_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(¤t_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(¤t_observed_level_lock);170 log_level_t level = current_observed_level;171 fibril_rwlock_read_unlock(¤t_observed_level_lock);172 return level;173 112 } 174 113 … … 230 169 int rc = logger_register(logger_session, log_prog_name); 231 170 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 241 171 return rc; 242 172 } … … 266 196 } 267 197 268 bool _log_shall_record(log_context_t context, log_level_t level)269 {270 return get_current_observed_level() >= level;271 }272 273 198 /** Write an entry to the log. 274 199 * … … 278 203 * @param fmt Format string (no traling newline). 279 204 */ 280 void _log_ctx_msg(log_context_t ctx, log_level_t level, const char *fmt, ...)205 void log_ctx_msg(log_context_t ctx, log_level_t level, const char *fmt, ...) 281 206 { 282 207 va_list args; 283 208 284 209 va_start(args, fmt); 285 _log_ctx_msgv(ctx, level, fmt, args);210 log_ctx_msgv(ctx, level, fmt, args); 286 211 va_end(args); 287 212 } … … 294 219 * @param fmt Format string (no trailing newline) 295 220 */ 296 void _log_ctx_msgv(log_context_t ctx, log_level_t level, const char *fmt, va_list args)221 void log_ctx_msgv(log_context_t ctx, log_level_t level, const char *fmt, va_list args) 297 222 { 298 223 assert(level < LVL_LIMIT); 299 300 if (get_current_observed_level() < level) {301 return;302 }303 224 304 225 char *message_buffer = malloc(MESSAGE_BUFFER_SIZE);
Note:
See TracChangeset
for help on using the changeset viewer.