Fix: format address fields as hexadecimal
[lttng-modules.git] / lttng-events.c
index 4b76ea03d72c5f7d31aadf975b2667072a07e857..ffb605106ab6f775f467a7409f507947a1cdbc95 100644 (file)
@@ -1043,17 +1043,22 @@ int lttng_session_list_tracker_pids(struct lttng_session *session)
                ret = PTR_ERR(tracker_pids_list_file);
                goto file_error;
        }
+       if (atomic_long_add_unless(&session->file->f_count,
+               1, INT_MAX) == INT_MAX) {
+               goto refcount_error;
+       }
        ret = lttng_tracker_pids_list_fops.open(NULL, tracker_pids_list_file);
        if (ret < 0)
                goto open_error;
        m = tracker_pids_list_file->private_data;
        m->private = session;
        fd_install(file_fd, tracker_pids_list_file);
-       atomic_long_inc(&session->file->f_count);
 
        return file_fd;
 
 open_error:
+       atomic_long_dec(&session->file->f_count);
+refcount_error:
        fput(tracker_pids_list_file);
 file_error:
        put_unused_fd(file_fd);
@@ -1955,11 +1960,14 @@ int _lttng_event_header_declare(struct lttng_session *session)
  * taken at start of trace.
  * Yes, this is only an approximation. Yes, we can (and will) do better
  * in future versions.
+ * Return 0 if offset is negative. It may happen if the system sets
+ * the REALTIME clock to 0 after boot.
  */
 static
 uint64_t measure_clock_offset(void)
 {
-       uint64_t offset, monotonic[2], realtime;
+       uint64_t monotonic_avg, monotonic[2], realtime;
+       int64_t offset;
        struct timespec rts = { 0, 0 };
        unsigned long flags;
 
@@ -1970,10 +1978,12 @@ uint64_t measure_clock_offset(void)
        monotonic[1] = trace_clock_read64();
        local_irq_restore(flags);
 
-       offset = (monotonic[0] + monotonic[1]) >> 1;
+       monotonic_avg = (monotonic[0] + monotonic[1]) >> 1;
        realtime = (uint64_t) rts.tv_sec * NSEC_PER_SEC;
        realtime += rts.tv_nsec;
-       offset = realtime - offset;
+       offset = (int64_t) realtime - monotonic_avg;
+       if (offset < 0)
+               return 0;
        return offset;
 }
 
@@ -2185,6 +2195,9 @@ static int __init lttng_events_init(void)
        if (ret)
                return ret;
        ret = wrapper_get_pfnblock_flags_mask_init();
+       if (ret)
+               return ret;
+       ret = wrapper_get_pageblock_flags_mask_init();
        if (ret)
                return ret;
        ret = lttng_context_init();
This page took 0.023223 seconds and 4 git commands to generate.