[CRIU] [PATCH 1/2] tty: Write unread pty buffers on post dump stage

Cyrill Gorcunov gorcunov at gmail.com
Fri May 13 07:46:41 PDT 2016


On Fri, May 13, 2016 at 05:28:00PM +0300, Pavel Emelyanov wrote:
> >>
> >> Any reason why data is put into global list and is then picked by
> >> ttys instead of tty itself is searched at data collect stage and
> >> receives data in its list_head?
> > 
> > Not sure I follow this moment. Queued data are saved in records inside
> > separate image, and it's collected automatically, into one list.
> 
> Yup. My point is that -- why not collect this data into respective tty's
> list immediately? We already have list of all tty to lookup tty from,
> so we'd avoid introducing yet another one.

We need to keep the data read somewhere. Look, I guess it's unclean from
the patch itself. Here is how we collect everything:

static struct collect_image_info *cinfos[] = {
	...
	&tty_cdata,
	&tty_info_cinfo,
	&tty_cinfo,
	...
};

The &tty_cdata represents records in tty-data.img, which has only
id per each record, so each record is hooked into one global list
which we use for lookup later.

static int collect_one_tty(void *obj, ProtobufCMessage *msg, struct cr_img *i)
{
	info->tie = lookup_tty_info_entry(info->tfe->tty_info_id);
	info->tty_data = is_pty(info->driver) ? tty_lookup_data(info) : NULL;

here we walk over records from @&tty_cdata and find which queue
blongs to particular tty entry we're reading from image now.

Could you please write in pseudocode which exactly you would like to see here?


More information about the CRIU mailing list