~kris/9p

9hist

af286704d3ddfd156561a53b26cce98195bae798 — David du Colombier 26 years ago cced767
Plan 9 from Bell Labs 2000-03-06
1 files changed, 8 insertions(+), 4 deletions(-)

M port/devdraw.c
M port/devdraw.c => port/devdraw.c +8 -4
@@ 117,8 117,7 @@ struct FChar
 * Reference counts in DImages:
 *	one per open by original client
 *	one per screen image or fill
 * Images published by name are not ref'ed, but protected by
 * comparing version number with the DName entry.
 * 	one per image derived from this one by name
 */
struct DImage
{


@@ 131,6 130,7 @@ struct DImage
	int		nfchar;
	FChar*		fchar;
	DScreen*	dscreen;	/* 0 if not a window */
	DImage*	fromname;	/* image this one is derived from, by name */
	DImage*		next;
};



@@ 496,10 496,10 @@ drawinstall(Client *client, int id, Memimage *i, DScreen *dscreen)
	d->image = i;
	d->nfchar = 0;
	d->fchar = 0;
	d->fromname = 0;
	d->dscreen = dscreen;
	d->next = client->dimage[id&HASHMASK];
	client->dimage[id&HASHMASK] = d;
//	print("install %d %p...", id, d);
	return i;
}



@@ 616,8 616,10 @@ drawfreedimage(DImage *dimage)
			drawdelname(sdraw.name+i);
		else
			i++;
	if(dimage->vers != 0)	/* acquired by name; owned by someone else*/
	if(dimage->fromname){	/* acquired by name; owned by someone else*/
		drawfreedimage(dimage->fromname);
		goto Return;
	}
	if(dimage->image == screenimage)	/* don't free the display */
		goto Return;
	ds = dimage->dscreen;


@@ 1594,6 1596,8 @@ drawmesg(Client *client, void *av, int n)
				error("draw: can't happen");
			di->vers = dn->vers;
			di->name = smalloc(j+1);
			di->fromname = dn->dimage;
			di->fromname->ref++;
			memmove(di->name, a+6, j);
			di->name[j] = 0;
			client->infoid = dstid;