History

xfreememimage

yiyus committed 15 years ago

Commit 07aba3b1 parent 8a342c84 files · +40 −8Browse files

Unified · Split

4 files
  1. devwsys/devdraw.c +14 −6
  2. devwsys/fns.h +2 −0
  3. devwsys/ixp_fsys.c +1 −0
  4. devwsys/x11/alloc.c +23 −2
devwsys/devdraw.c+14−6
@@ -53,7 +53,7 @@ drawnewclient(Draw *draw) · 52 unmodified lines
53}53}
54 54
55void55void
56drawreplacescreenimage(Client *cl, Memimage *m)56drawreplacescreenimage(Window *w, Memimage *m)
57{57{
58 /*58 /*
59 * Replace the screen image because the screen59 * Replace the screen image because the screen
@@ -70,10 +70,10 @@ drawreplacescreenimage(Client *cl, Memimage *m) · 10 unmodified lines
70 Memimage *om;70 Memimage *om;
71 Memimage *screenimage;71 Memimage *screenimage;
72 72
73 screenimage = cl->draw->screenimage;73 screenimage = w->draw.screenimage;
74 // qlock(&sdraw.lk);74 // qlock(&sdraw.lk);
75 om = screenimage;75 om = screenimage;
76 cl->draw->screenimage = m;76 w->draw.screenimage = m;
77 // m->screenref = 1;77 // m->screenref = 1;
78 // if(om && --om->screenref == 0){78 // if(om && --om->screenref == 0){
79 // freememimage(om);79 // freememimage(om);
@@ -288,6 +288,10 @@ drawfreedimage(Draw *draw, DImage *dimage) · 208 unmodified lines
288 Memimage *l;288 Memimage *l;
289 DScreen *ds;289 DScreen *ds;
290 290
291if(!dimage){
292print("XXX drawfreedimage on nil dimage\n");
293return;
294}
291 dimage->ref--;295 dimage->ref--;
292 if(dimage->ref < 0)296 if(dimage->ref < 0)
293 fprint(2, "negative ref in drawfreedimage\n");297 fprint(2, "negative ref in drawfreedimage\n");
@@ -319,8 +323,12 @@ drawfreedimage(Draw *draw, DImage *dimage) · 25 unmodified lines
319 else323 else
320 memlfree(l);324 memlfree(l);
321 drawfreedscreen(draw, ds);325 drawfreedscreen(draw, ds);
322 }else326 }else{
323 freememimage(dimage->image);327 // if(l->screenref==0)
328 xfreememimage(l);
329 // else if(--l->screenref==0)
330 // freememimage(l);
331 }
324 Return:332 Return:
325 free(dimage->fchar);333 free(dimage->fchar);
326 free(dimage);334 free(dimage);
@@ -849,7 +857,7 @@ drawmesg(Client *client, void *av, int n) · 522 unmodified lines
849 if(!repl)857 if(!repl)
850 rectclip(&i->clipr, r);858 rectclip(&i->clipr, r);
851 if(drawinstall(client, dstid, i, 0) == 0){859 if(drawinstall(client, dstid, i, 0) == 0){
852 freememimage(i);860 xfreememimage(i);
853 goto Edrawmem;861 goto Edrawmem;
854 }862 }
855 memfillcolor(i, value);863 memfillcolor(i, value);
devwsys/fns.h+2−0
@@ -26,6 +26,7 @@ void* nextreq(Reqbuf *reqs); · 25 unmodified lines
26void deletewin(Window*);26void deletewin(Window*);
27Window* newwin(char*, char*);27Window* newwin(char*, char*);
28int parsewinsize(char*, Rectangle*, int*);28int parsewinsize(char*, Rectangle*, int*);
29void drawreplacescreenimage(Window*, Memimage*);
29void setlabel(Window*, char*);30void setlabel(Window*, char*);
30 31
31/* Ixp */32/* Ixp */
@@ -40,6 +41,7 @@ void xclose(void); · 8 unmodified lines
40 41
41/* X window */42/* X window */
42Memimage* xallocmemimage(Window*, Rectangle, ulong, int);43Memimage* xallocmemimage(Window*, Rectangle, ulong, int);
44void xfreememimage(Memimage*);
43void xattach(Window*, char*);45void xattach(Window*, char*);
44void xdeletewin(Window*);46void xdeletewin(Window*);
45void xflushmemscreen(Window*, Rectangle);47void xflushmemscreen(Window*, Rectangle);
devwsys/ixp_fsys.c+1−0
@@ -393,6 +393,7 @@ fs_read(Ixp9Req *r) { · 392 unmodified lines
393 return;393 return;
394 }394 }
395 readrefresh(buf, r->ifcall.io.count, cl);395 readrefresh(buf, r->ifcall.io.count, cl);
396 ixp_srv_readbuf(r, buf, strlen(buf));
396 ixp_respond(r, nil);397 ixp_respond(r, nil);
397 return;398 return;
398 }399 }
devwsys/x11/alloc.c+23−2
@@ -36,7 +36,7 @@ xallocmemimage(Window *w, Rectangle r, ulong chan, int pixmap) · 35 unmodified lines
36 36
37 xm = mallocz(sizeof(Xmem), 1);37 xm = mallocz(sizeof(Xmem), 1);
38 if(xm == nil){38 if(xm == nil){
39 freememimage(m);39 xfreememimage(m);
40 return nil;40 return nil;
41 }41 }
42 42
@@ -71,7 +71,7 @@ xallocmemimage(Window *w, Rectangle r, ulong chan, int pixmap) · 28 unmodified lines
71 ZPixmap, 0, (char*)m->data->bdata, Dx(r), Dy(r),71 ZPixmap, 0, (char*)m->data->bdata, Dx(r), Dy(r),
72 32, m->width*sizeof(u32int));72 32, m->width*sizeof(u32int));
73 if(xi == nil){73 if(xi == nil){
74 freememimage(m);74 xfreememimage(m);
75 if(xm->pixmap != pixmap)75 if(xm->pixmap != pixmap)
76 XFreePixmap(xconn.display, xm->pixmap);76 XFreePixmap(xconn.display, xm->pixmap);
77 return nil;77 return nil;
@@ -97,3 +97,24 @@ xallocmemimage(Window *w, Rectangle r, ulong chan, int pixmap) · 19 unmodified lines
97 // XXX! TODO m->X = xm;97 // XXX! TODO m->X = xm;
98 return m;98 return m;
99}99}
100
101void
102xfreememimage(Memimage *m)
103{
104 Xmem *xm;
105
106 if(m == nil)
107 return;
108
109 xm = nil; // m->X;
110 if(xm && m->data->ref == 1){
111 if(xm->xi){
112 xm->xi->data = nil;
113 XFree(xm->xi);
114 }
115 XFreePixmap(xconn.display, xm->pixmap);
116 free(xm);
117 // m->X = nil;
118 }
119 freememimage(m);
120}