X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fctf-ir%2Fclock-class.c;h=7d02a989ec9ddad8b30d80fcc5166d3ed04544bd;hb=f3534905684ef28f99ab7f60d85dbe84a5645297;hp=aab320f6d59885ca1eaf4a83a529e4d80e132230;hpb=0290b3c5d4f0bb3a893bd5d2fd9821fba8e904d3;p=deliverable%2Fbabeltrace.git diff --git a/lib/ctf-ir/clock-class.c b/lib/ctf-ir/clock-class.c index aab320f6d..7d02a989e 100644 --- a/lib/ctf-ir/clock-class.c +++ b/lib/ctf-ir/clock-class.c @@ -92,13 +92,38 @@ end: return ret; } -struct bt_ctf_clock_class *bt_ctf_clock_class_create(const char *name) +static +bool validate_freq(struct bt_ctf_clock_class *clock_class, + const char *name, uint64_t freq) +{ + bool is_valid = true; + + if (freq == -1ULL || freq == 0) { + BT_LOGW("Invalid parameter: frequency is invalid: " + "addr=%p, name=\"%s\", freq=%" PRIu64, + clock_class, name, freq); + is_valid = false; + goto end; + } + +end: + return is_valid; +} + +struct bt_ctf_clock_class *bt_ctf_clock_class_create(const char *name, + uint64_t freq) { int ret; - struct bt_ctf_clock_class *clock_class; + struct bt_ctf_clock_class *clock_class = NULL; BT_LOGD("Creating default clock class object: name=\"%s\"", name); + + if (!validate_freq(NULL, name, freq)) { + /* validate_freq() logs errors */ + goto error; + } + clock_class = g_new0(struct bt_ctf_clock_class, 1); if (!clock_class) { BT_LOGE_STR("Failed to allocate one clock class."); @@ -106,7 +131,7 @@ struct bt_ctf_clock_class *bt_ctf_clock_class_create(const char *name) } clock_class->precision = 1; - clock_class->frequency = 1000000000; + clock_class->frequency = freq; bt_object_init(clock_class, bt_ctf_clock_class_destroy); if (name) { @@ -211,15 +236,20 @@ int bt_ctf_clock_class_set_frequency(struct bt_ctf_clock_class *clock_class, { int ret = 0; - if (!clock_class || freq == -1ULL) { + if (!clock_class) { BT_LOGW("Invalid parameter: clock class is NULL or frequency is invalid: " - "addr=%p, name=\"%s\", freq=%" PRIu64, - clock_class, bt_ctf_clock_class_get_name(clock_class), - freq); + "addr=%p, name=\"%s\"", + clock_class, bt_ctf_clock_class_get_name(clock_class)); ret = -1; goto end; } + if (!validate_freq(clock_class, bt_ctf_clock_class_get_name(clock_class), + freq)) { + /* validate_freq() logs errors */ + goto end; + } + if (clock_class->frozen) { BT_LOGW("Invalid parameter: clock class is frozen: addr=%p, name=\"%s\"", clock_class, bt_ctf_clock_class_get_name(clock_class));