X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=lttng-context-vppid.c;h=f01b02068d67fa8ef1bdfc8e1a278f93b27cf618;hb=a2563e83f4c439343daf2f558c11ee6e83479177;hp=d55e12db6b2541afd1d7da7274fdb6385f326088;hpb=09fec6b43d11b3e0ece36f9e9e44b9627c1b565d;p=lttng-modules.git diff --git a/lttng-context-vppid.c b/lttng-context-vppid.c index d55e12db..f01b0206 100644 --- a/lttng-context-vppid.c +++ b/lttng-context-vppid.c @@ -31,10 +31,18 @@ void vppid_record(struct lttng_ctx_field *field, struct lib_ring_buffer_ctx *ctx, struct ltt_channel *chan) { + struct task_struct *parent; pid_t vppid; + /* + * nsproxy can be NULL when scheduled out of exit. + */ rcu_read_lock(); - vppid = task_tgid_vnr(current->real_parent); + parent = rcu_dereference(current->real_parent); + if (!parent->nsproxy) + vppid = 0; + else + vppid = task_tgid_vnr(parent); rcu_read_unlock(); lib_ring_buffer_align_ctx(ctx, ltt_alignof(vppid)); chan->ops->event_write(ctx, &vppid, sizeof(vppid)); @@ -47,6 +55,10 @@ int lttng_add_vppid_to_ctx(struct lttng_ctx **ctx) field = lttng_append_context(ctx); if (!field) return -ENOMEM; + if (lttng_find_context(*ctx, "vppid")) { + lttng_remove_context_field(ctx, field); + return -EEXIST; + } field->event_field.name = "vppid"; field->event_field.type.atype = atype_integer; field->event_field.type.u.basic.integer.size = sizeof(pid_t) * CHAR_BIT;