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
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkTestErrorObserver.h"
#include <vtkSmartPointer.h>
#include <vtkTIFFReader.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;
}
|