History

reduce memory leak on resizes

yiyus committed 15 years ago

Commit eb9e4431 parent 1c802d95 files · +13 −15Browse files

Unified · Split

5 files
  1. devwsys/devdraw.c +8 −9
  2. devwsys/x11/alloc.c +3 −6
  3. devwsys/x11/event.c +1 −1
  4. devwsys/x11/window.c +2 −0
  5. libninep/Posix.o +0 −0
devwsys/devdraw.c+8−9
@@ -514,13 +514,13 @@ drawfreedimage(Draw *d, DImage *dimage) · 513 unmodified lines
514514 l = dimage->image;
515515 dimage->dscreen = nil; /* paranoia */
516516 dimage->image = nil;
517− if(ds){
518− /*
519− * l->layer will be nil if we get any
520− * ConfigEvent before having a screen
521− */
522− if(!l->layer)
523− return;
517+ /*
518+ * TODO:
519+ * l->layer will be nil if we get any
520+ * ConfigEvent before having a screen.
521+ * Why else?
522+ */
523+ if(ds && l->layer){
524524 screenimage = d->window->screenimage;
525525 if(l->data == screenimage->data)
526526 addflush(d, l->layer->screenr);
@@ -1838,7 +1838,6 @@ drawreplacescreenimage(Window *w) · 1311 unmodified lines
18381838 if(d->screendimage == nil)
18391839 return;
18401840
1841− xreplacescreenimage(w);
18421841 if(w->screenimage == nil)
18431842 return;
18441843 /*
@@ -1863,7 +1862,7 @@ drawreplacescreenimage(Window *w) · 18 unmodified lines
18631862 }
18641863 }
18651864
1866− drawfreedimage(d, d->screendimage); // XXX
1865+ drawfreedimage(d, d->screendimage);
18671866 d->screendimage = di;
18681867
18691868 /*
devwsys/x11/alloc.c+3−6
@@ -104,14 +104,12 @@ xfreememimage(Memimage *m) · 103 unmodified lines
104104 {
105105 Xmem *xm;
106106
107− // print("XXX xfreememimage (%p)\n", m);
108− // XXX TODO: why m->data == nil ?
109− if(!m || !m->data)
107+ if(m == nil)
110108 return;
111109
112110 xm = m->X;
113− if(xm && m->data->ref == 1){
114− if(xm->xi){
111+ if(xm != nil){
112+ if(xm->xi != nil){
115113 xm->xi->data = nil;
116114 XFree(xm->xi);
117115 }
@@ -119,6 +117,5 @@ xfreememimage(Memimage *m) · 1 unmodified line
119117 free(xm);
120118 m->X = nil;
121119 }
122−// print("XXX free %d with layer %d\n", m, m->layer);
123120 _freememimage(m);
124121 }
devwsys/x11/event.c+1−1
@@ -123,7 +123,7 @@ configevent(Window *w, XEvent xev) · 122 unmodified lines
123123
124124 m.xy.x = Dx(r);
125125 m.xy.y = Dy(r);
126− drawreplacescreenimage(w);
126+ xreplacescreenimage(w);
127127 debugev("Configure event at window %d: w=%d h=%d\n", w->id, m.xy.x, m.xy.y);
128128 w->resized = 1;
129129 writemouse(w, m, 1);
devwsys/x11/window.c+2−0
@@ -98,6 +98,8 @@ xreplacescreenimage(Window *w) · 97 unmodified lines
9898 xw->nextscreenpm = pixmap;
9999 w->screenimage = m;
100100 w->screenr = r;
101+ drawreplacescreenimage(w);
102+ xw->screenpm = xw->nextscreenpm;
101103 }
102104
103105 int
libninep/Posix.o+0−0

Binary file not shown.