[CRIU] [PATCH 07/12] parasite: Extend tid_state_s structure

Cyrill Gorcunov gorcunov at openvz.org
Fri Mar 1 14:31:59 EST 2013


On Fri, Mar 01, 2013 at 10:51:19PM +0400, Pavel Emelyanov wrote:
> > diff --git a/pie/parasite.c b/pie/parasite.c
> > index 3b2617c..c8b5f60 100644
> > --- a/pie/parasite.c
> > +++ b/pie/parasite.c
> > @@ -20,9 +20,11 @@ static int tsock = -1;
> >  static int ctlsock = -1;
> >  
> >  static struct tid_state_s {
> > +	unsigned int	id;
> 
> Isn't tid good enough to address thread? Why?

We don't know tids at moment when we inject parasite code (especially
when we dump in namespaces, we have

int parasite_dump_thread_seized(struct parasite_ctl *ctl, struct pid *tid,
		CoreEntry *core)
{
	struct parasite_dump_thread *args;
	int ret;

	args = parasite_args(ctl, struct parasite_dump_thread);
	ret = parasite_execute_by_pid(PARASITE_CMD_DUMP_THREAD, ctl, tid->real);
	...
-->	tid->virt = args->tid;
	core_put_tls(core, args->tls);
}

routine to fetch the tid back to crtools code.

Actually, initially I used tids for that -- I did sharing of tid_state_s
structure between parasiet-syscall.c and parasite blob itself. But eventually
the less things we share between crtools and parasite blob then better bacause
it isolate parasite from the rest of program.

Thus, now it's abstract @id which crtools pass to parasite code asking a daemon
to serve some request. This @id must be unique between all threads, and crtools
uses global pids for that.


More information about the CRIU mailing list