* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include <babeltrace/ctf/events.h>
#include <stdlib.h>
+#include <linux/unistd.h>
#include <string.h>
#include "common.h"
+uint64_t get_cpu_id(const struct bt_ctf_event *event)
+{
+ const struct definition *scope;
+ uint64_t cpu_id;
+
+ scope = bt_ctf_get_top_level_scope(event, BT_STREAM_PACKET_CONTEXT);
+ cpu_id = bt_ctf_get_uint64(bt_ctf_get_field(event, scope, "cpu_id"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "[error] get cpu_id\n");
+ return -1ULL;
+ }
+
+ return cpu_id;
+}
+
+uint64_t get_context_tid(const struct bt_ctf_event *event)
+{
+ const struct definition *scope;
+ uint64_t tid;
+
+ scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT);
+ tid = bt_ctf_get_int64(bt_ctf_get_field(event,
+ scope, "_tid"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing tid context info\n");
+ return -1ULL;
+ }
+
+ return tid;
+}
+
+uint64_t get_context_pid(const struct bt_ctf_event *event)
+{
+ const struct definition *scope;
+ uint64_t pid;
+
+ scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT);
+ pid = bt_ctf_get_int64(bt_ctf_get_field(event,
+ scope, "_pid"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing pid context info\n");
+ return -1ULL;
+ }
+
+ return pid;
+}
+
+uint64_t get_context_ppid(const struct bt_ctf_event *event)
+{
+ const struct definition *scope;
+ uint64_t ppid;
+
+ scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT);
+ ppid = bt_ctf_get_int64(bt_ctf_get_field(event,
+ scope, "_ppid"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing ppid context info\n");
+ return -1ULL;
+ }
+
+ return ppid;
+}
+
+char *get_context_comm(const struct bt_ctf_event *event)
+{
+ const struct definition *scope;
+ char *comm;
+
+ scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT);
+ comm = bt_ctf_get_char_array(bt_ctf_get_field(event,
+ scope, "_procname"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing comm context info\n");
+ return NULL;
+ }
+
+ return comm;
+}
+
struct processtop *find_process_tid(struct lttngtop *ctx, int tid, char *comm)
{
gint i;
newproc->tid = tid;
newproc->birth = timestamp;
newproc->process_files_table = g_ptr_array_new();
- newproc->files_history = g_new0(struct file_history, 1);
- newproc->files_history->next = NULL;
+ newproc->files_history = NULL;
newproc->totalfileread = 0;
newproc->totalfilewrite = 0;
newproc->fileread = 0;
if (tmpf != NULL) {
tmpf->read = 0;
tmpf->write = 0;
+
+ if (tmpf->flag == __NR_close)
+ g_ptr_array_index(
+ tmp->process_files_table, j
+ ) = NULL;
}
}
}
new->threads = g_ptr_array_new();
new->comm = strdup(tmp->comm);
new->process_files_table = g_ptr_array_new();
+ new->files_history = tmp->files_history;
new->perf = g_hash_table_new(g_str_hash, g_str_equal);
g_hash_table_foreach(tmp->perf, copy_perf_counter, new->perf);