[vtkusers] bug with multiple render windows?
Frank Broicher
broicher at techinfo.rwth-aachen.de
Thu Feb 20 01:24:08 EST 2003
Hi Nick and everybody else,
I do not have a solution to the problem, but I can strongly confirm,
that it is not your own code that's having bugs since we encountered
exactly the same problems. The only solution that was offered two
weeks ago after my posting was the usage of one window that renders
more than one view. Unfortunately this solution is incompatible with
our software.
We are trying to find the bug in VTK on our own. Maybe (when it is as
important to you as it is to us) we can join forces.
With best regards
Frank
N Smethurst schrieb:
> Hi
>
> I'm sorry to repost this but it seems my original post didn't
> have the MIME information decoded and thus it was difficult
> to read. The original message (which I pray displays correctly
> now) is as follows:
>
> I am working on an application that uses multiple render windows
> and have noticed that memory is leaked on each render window
> destruction. VTK's leak detection reports nothing and manual
> examination of object reference counts confirms that my code seems
> to be functioning correctly. I have tried nightly builds from
> 17/01/03 (using cmake 1.4) and 09/02/03 (using cmake 1.6) on
> mandrake linux 9.0.
>
> I am sorry if this email is rather long but I feel that I should
> be specific and detailed. Here is a piece of code to illustrate
> this behaviour. The code doesn't do anything apart from creating
> render windows and deleting them after rendering once, pausing
> between actions so I can record memory usage:
>
> ///////////////////start code///////////////////
> #include <vtkConeSource.h>
> #include <vtkPolyDataMapper.h>
> #include <vtkActor.h>
> #include <vtkRenderer.h>
> #include <vtkRenderWindow.h>
> #include <stdio.h>
>
> int main()
> {
> vtkConeSource *cone = vtkConeSource::New();
> vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
> mapper->SetInput(cone->GetOutput());
> vtkActor *actor = vtkActor::New();
> actor->SetMapper(mapper);
>
> // create first window
> vtkRenderer *ren1 = vtkRenderer::New();
> ren1->AddActor(actor);
> vtkRenderWindow *renWin1 = vtkRenderWindow::New();
> renWin1->AddRenderer(ren1);
> renWin1->Render();
>
> // correct reference counts
> cone->Delete();
> mapper->Delete();
> actor->Delete();
> ren1->Delete();
>
> cout << "Created objects and first renderer & renWin.\n";
> // pause to check memory usage
> char temp;
> cin >> temp;
>
> // create second window
> vtkRenderer *ren2 = vtkRenderer::New();
> ren2->AddActor(actor);
> vtkRenderWindow *renWin2 = vtkRenderWindow::New();
> renWin2->AddRenderer(ren2);
> ren2->Delete();
> renWin2->Render();
> cout << "Created second renderer and renWindow.\n";
> cin >> temp;
>
> // create third window
> vtkRenderer *ren3 = vtkRenderer::New();
> ren3->AddActor(actor);
> vtkRenderWindow *renWin3 = vtkRenderWindow::New();
> renWin3->AddRenderer(ren3);
> ren3->Delete();
> renWin3->Render();
> cout << "Created third renderer and renWindow.\n";
> cin >> temp;
>
> // create fourth window
> vtkRenderer *ren4 = vtkRenderer::New();
> ren4->AddActor(actor);
> vtkRenderWindow *renWin4 = vtkRenderWindow::New();
> renWin4->AddRenderer(ren4);
> ren4->Delete();
> renWin4->Render();
> cout << "Created fourth renderer and renWindow.\n";
> cin >> temp;
>
> // delete one by one in order to record memory usage
> renWin4->Delete();
> cout << "Deleted fourth ren window.\n";
> cin >> temp;
>
> renWin3->Delete();
> cout << "Deleted third ren window.\n";
> cin >> temp;
>
> renWin2->Delete();
> cout << "Deleted second ren window.\n";
> cin >> temp;
>
> renWin1->Delete();
> return 0;
> }
> ///////////////////end code///////////////////
>
> I get the following memory usage with the 17/01/03 nightly build:
>
> total difference leak size
> VmSize VmRss VmSize VmRss VmSize VmRss
> one window created 165016 14268
> two windows created 166556 14828 1540 560
> three windows created 168084 15364 1528 536
> four windows created 169612 15904 1528 540
> fourth window deleted 167996 15356 -1616 -548 -88 -8
> third window deleted 166776 15032 -1220 -324 308 212
> second window deleted 165552 14704 -1224 -328 316 232
> total leak: 536 436
>
> With the 09/02/03 nightly build, I get the following:
>
> total difference leak size
> VmSize VmRss VmSize VmRss VmSize VmRss
> one window created 29528 11244
> two windows created 32892 12392 3364 1148
> three windows created 36256 13524 3364 1132
> four windows created 39624 14652 3368 1128
> fourth window deleted 38924 14412 -700 -240 2668 888
> third window deleted application crashes with error:
> XIO: fatal IO error 9 (Bad file descriptor) on X server ":0.0"
> after 362 requests (361 known processed) with 0 events remaining.
>
> (However, this crash does not happen in my application!)
>
> Running a piece of non-vtk code with
> int* a=new int[50000];
> and
> delete []a;
> commands in place of the vtk creation/deletion results in the
> following:
>
> total difference leak size
> VmSize VmRss VmSize VmRss VmSize VmRss
> ready to create.. 29044 12896
> one created 29240 13100 196 204
> two created 29436 13296 196 196
> three created 29632 13492 196 196
> fourth created 29828 13688 196 196
> fourth deleted 29632 13492 -196 -196 0 0
> third deleted 29436 13296 -196 -196 0 0
> second deleted 29240 13100 -196 -196 0 0
> first deleted 29044 12904 -196 -196 0 8
> total leak: 0 8
>
> hence the memory management of the kernel seems to be working
> correctly.
>
> In my actual application, if render windows are repeatidly created
> and distroyed, the memory usage climbs and climbs and is not
> released until the whole application is closed.
>
> I have noticed that I get the following warning messages when
> running my application and closing a window. I'm not sure if they
> are relevant. They do not appear when running the code given here:
>
> Generic Warning:
> In /home/nic/comp/VTK/VTK/Common/vtkDebugLeaks.cxx, line 280
> Deleting unknown object: vtkXOpenGLRenderWindow
> Generic Warning:
> In /home/nic/comp/VTK/VTK/Common/vtkDebugLeaks.cxx, line 280
> Deleting unknown object: vtkRenderWindowInteractor
>
> Kind regards
>
> Nick
--
Dipl.-Inform. F. H. Broicher
Chair of Technical Computer Science Lehrstuhl f. Technische Informatik
RWTH Aachen University RWTH-Aachen
Ahornstraße 55, Room 2226
D-52074 Aachen
------------------------------------------------------------------------
Tel.: +49 (241) 80 23636 mailto:broicher at techinfo.rwth-aachen.de
Fax.: +49 (241) 80 22308 mailto:frank.broicher at ieee.org
------------------------------------------------------------------------
Fate, it seems, is not without a sense of irony. (Morpheus, The Matrix)
More information about the vtkusers
mailing list