Hi Rene,
After struggling a few hours to make a small X-only (outside root)
example that shows the leak with XCopyArea behaviour, I noticed that the
leak happens when one does a series of XCopyArea, without calling
XNextEvent. If one does an XCopyArea followed by an XNextEvent, the
problem disappears.
So there is a workaround. In TCanvas.cxx, the routine TCanvas::Flush()
(which calls most of the XCopyArea) becomes :
void TCanvas::Flush()
{
//*-*-*-*-*-*-*-*-*Flush canvas
buffers*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-* ====================
if (fCanvasID == -1) return;
TPad *padsav = (TPad*)gPad;
cd();
if (!IsBatch()) {
gVirtualX->SelectWindow(fCanvasID);
gPad = padsav; //don't do cd() because then also the pixmap is
changed
CopyPixmaps();
gVirtualX->UpdateWindow(1);
int x,y;
gVirtualX->RequestLocator(1,1,x,y);
}
padsav->cd();
}
where were only added two lines.
RequestLocator will just make a call to XNextEvent after each update of
the canvas. I don't know if my choice of the cursor is the best.
This seems to work, i.e. there is no memory leak anymore on my machine.
I didn't test other machines and I don't know what is the effect, say,
on Windows.
But I must let you some work, Rene ;-)
Cheers
Damir
Rene Brun wrote:
>
> Hi Damir,
>
> I repeat what we already reported on this topic.
> The memory leak is on the X server side, not on the application process.
> This had been traced to XCopyArea. When using bitmaps intensively, the
> effect becomes important after many screen updates.
> You can verify this by running the server on a different machine and monitoring
> the memory growth on the client and server side.
>
> Rene Brun
>
> Damir Buskulic wrote:
> >
> > Hi all,
> >
> > Some time ago, there was a thread about a memory leak in XFree86
> > (XCopyArea). As A. Zvyagin pointed out, running
> >
> > > root [0] TCanvas *c = new TCanvas("c","c",100,100);
> > > root [1] while(1) c->Update();
> >
> > consumes memory.
> >
> > I have the same behaviour on Alpha/OSF1. Did somebody already noticed it
> > ?
> >
> > This may become a big problem, since an online program displaying
> > varying plots cannot be run more than a few hours without restarting (in
> > my case, the average leak is a 5-10 MB per hour).
> > How do people overcome this problem ?
> >
> > Cheers
> >
> > Damir
> >
> > --
> > =====================================================================
> > | Damir Buskulic | Universite de Savoie/LAPP |
> > | | Chemin de Bellevue, B.P. 110 |
> > | Tel : +33 (0)450091600 | F-74941 Annecy-le-Vieux Cedex |
> > | e-mail: buskulic@lapp.in2p3.fr | FRANCE |
> > =====================================================================
> > mailto:buskulic@lapp.in2p3.fr
--
=====================================================================
| Damir Buskulic | Universite de Savoie/LAPP |
| | Chemin de Bellevue, B.P. 110 |
| Tel : +33 (0)450091600 | F-74941 Annecy-le-Vieux Cedex |
| e-mail: buskulic@lapp.in2p3.fr | FRANCE |
=====================================================================
mailto:buskulic@lapp.in2p3.fr
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:40 MET