1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
/*=========================================================================
Program: Visualization Toolkit
Module: TestTIFFReaderMultiple.cxx
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include <vtkTIFFReader.h>
#include <vtkSmartPointer.h>
#include "vtkTestErrorObserver.h"
#ifndef _WIN32
#include <fcntl.h>
#endif
int TestTIFFReaderMultiple(int argc, char *argv[])
{
if ( argc <= 1 )
{
std::cout << "Usage: " << argv[0] << " <meta image file>" << endl;
return EXIT_FAILURE;
}
#ifndef _WIN32
// See how many file descriptors are in use
int fdUsedBefore = 1;
for (int i = 0; i < 1024; ++i)
{
if (fcntl(i, F_GETFD) == -1)
{
break;
}
++fdUsedBefore;
}
#endif
vtkSmartPointer<vtkTest::ErrorObserver> errorObserver =
vtkSmartPointer<vtkTest::ErrorObserver>::New();
// Read the same file multiple times to check for memory leaks and/or
// file descriptor leaks
for (int i = 0; i < 9; i++)
{
vtkSmartPointer<vtkTIFFReader> TIFFReader =
vtkSmartPointer<vtkTIFFReader>::New();
TIFFReader->AddObserver(vtkCommand::ErrorEvent,errorObserver);
TIFFReader->SetFileName(argv[1]);
TIFFReader->Update();
std::cout << i << std::endl;
if (errorObserver->GetError())
{
std::cout << "ERROR: " << errorObserver->GetErrorMessage() << std::endl;
return EXIT_FAILURE;
}
errorObserver->Clear();
}
#ifndef _WIN32
// See how many file descriptors are in use
int fdUsedAfter = 1;
for (int i = 0; i < 1024; ++i)
{
if (fcntl(i, F_GETFD) == -1)
{
break;
}
++fdUsedAfter;
}
if (fdUsedBefore != fdUsedAfter)
{
std::cout << "ERROR: the number of file descriptors used after the I/O ("
<< fdUsedAfter
<< ") does not equal the number used before the I/O ("
<< fdUsedBefore
<< ")" << std::endl;
return EXIT_FAILURE;
}
#endif
return EXIT_SUCCESS;
}
|