On Fri, Oct 02, 2015 at 02:18:58PM +0900, Namhyung Kim wrote:

SNIP

>  int __thread__set_comm(struct thread *thread, const char *str, u64 timestamp,
>                      bool exec)
>  {
> @@ -182,6 +257,40 @@ int __thread__set_comm(struct thread *thread, const char 
> *str, u64 timestamp,
>                       unwind__flush_access(thread);
>       }
>  
> +     if (exec) {
> +             struct machine *machine;
> +
> +             BUG_ON(thread->mg == NULL || thread->mg->machine == NULL);
> +
> +             machine = thread->mg->machine;
> +
> +             if (thread->tid != thread->pid_) {
> +                     struct map_groups *old = thread->mg;
> +                     struct thread *leader;
> +
> +                     leader = machine__findnew_thread(machine, thread->pid_,
> +                                                      thread->pid_);
> +
> +                     /* now it'll be a new leader */
> +                     thread->pid_ = thread->tid;
> +
> +                     thread->mg = map_groups__new(old->machine);
> +                     if (thread->mg == NULL)
> +                             return -ENOMEM;
> +
> +                     /* save current mg in the new leader */
> +                     thread__clone_map_groups(thread, leader);
> +
> +                     /* current mg of leader thread needs one more refcnt */
> +                     map_groups__get(thread->mg);
> +
> +                     thread__set_map_groups(thread, thread->mg, 
> old->timestamp);
> +             }
> +
> +             /* create a new mg for newly executed binary */
> +             thread__set_map_groups(thread, map_groups__new(machine), 
> timestamp);

should this     ^^^^ be in the else case of above condition?

also thread__fork calls thread__clone_map_groups once again,
I have some difficulty to sort this out ATM.. is that correct?

some comment on how we treat map groups in general (for fork/clone/exit)
would be awesome ;-)

thanks,
jirka
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to