X-Git-Url: https://pd.if.org/git/?p=nbds;a=blobdiff_plain;f=runtime%2Flwt.c;h=8212c5cf00ecaa072a0886f9e282f8a4e80b3ec6;hp=be83e5fb1c31453463897f231d5318eb24f01cd9;hb=d61d7ffdfa8fab555a5086e61d2e9dfe699a14b9;hpb=af2000653f50ce43e94bfd260ce47e4b53ab2222 diff --git a/runtime/lwt.c b/runtime/lwt.c index be83e5f..8212c5c 100644 --- a/runtime/lwt.c +++ b/runtime/lwt.c @@ -29,7 +29,7 @@ typedef struct lwt_buffer { } lwt_buffer_t; lwt_buffer_t *lwt_buf_[MAX_NUM_THREADS] = {}; -uint64_t flag_mask_ = 0; +char flag_state_[256] = {}; static const char *flags_ = ""; void lwt_thread_init (int thread_id) @@ -45,9 +45,9 @@ void lwt_set_trace_level (const char *flags) { assert(strlen(flags) % 2 == 0); // a well formed should be an even number of characters long flags_ = flags; - int i; - for (i = 0; flags[i]; i+=2) { - flag_mask_ |= 1 << (flags[i] - 'A'); + memset(flag_state_, 0, sizeof(flag_state_)); + for (int i = 0; flags[i]; i+=2) { + flag_state_[(unsigned)flags[i]] = flags[i+1]; } } @@ -56,8 +56,7 @@ static inline void dump_record (FILE *file, int thread_id, lwt_record_t *r, uint // print the record if its trace category is enabled at a high enough level int flag = (size_t)r->format >> 56; int level = ((size_t)r->format >> 48) & 0xFF; - const char *f = strchr(flags_, flag); - if (f != NULL && level <= f[1]) { + if (flag_state_[(unsigned)flag] >= level) { char s[3] = {flag, level, '\0'}; fprintf(file, "%09llu %d %s ", ((uint64_t)r->timestamp - offset) >> 6, thread_id, s); const char *format = (const char *)((size_t)r->format & MASK(48)); // strip out the embedded flags