/** @file * * Testcase for bug #1023 autoincrement of file handles. * * InnoTek Systemberatung GmbH confidential * * Copyright (c) 2004 InnoTek Systemberatung GmbH * Author: knut st. osmundsen * * All Rights Reserved * */ /******************************************************************************* * Header Files * *******************************************************************************/ #define INCL_DOS #define INCL_DOSINFOSEG #ifdef __IBMC__ #include "../src/emx/include/os2emx.h" #else #include #endif #include #include int main(int argc, const char **argv) { int i,j; LONG lFHDelta = 0; ULONG cFHs = 0; ULONG cFHLast; unsigned msLastInc; unsigned msEnd; unsigned msStart; PGINFOSEG pGIS = GETGINFOSEG(); #define MAX_FHS 0x11000 static FILE *apFiles[MAX_FHS]; DosSetRelMaxFH(&lFHDelta, &cFHs); printf("cFHs=%d\n", cFHs); cFHLast = cFHs; msLastInc = pGIS->msecs; for (i = 0; i < MAX_FHS; i++) { msStart = pGIS->msecs; apFiles[i] = fopen(argv[argc - 1], "rb"); msEnd = pGIS->msecs; if (apFiles[i] == NULL) { printf("error %d!\n", i + 1); break; } lFHDelta = cFHs = 0; DosSetRelMaxFH(&lFHDelta, &cFHs); lFHDelta = cFHs = 0; DosSetRelMaxFH(&lFHDelta, &cFHs); if (cFHs != cFHLast) { printf("Max FH change %i (fh=%d): %d -> %d (inc: %d ms since last: %d ms)\n", i + 1, fileno(apFiles[i]), cFHLast, cFHs, msEnd - msStart, msStart - msLastInc); msLastInc = msEnd; } cFHLast = cFHs; } lFHDelta = cFHs = 0; DosSetRelMaxFH(&lFHDelta, &cFHs); printf("cFHs=%d\n", cFHs); /* * Free the files. */ msStart = pGIS->msecs; for (j = 0; j < i; j++) fclose(apFiles[j]); msEnd = pGIS->msecs; printf("close of %j files took %d ms\n", j, msEnd - msStart); /* * Report the result. */ if (i < 9900) { printf("1023-maxfilehandles: failed, could only open %d handles, expected > 9900\n", i); return 1; } printf("1023-maxfilehandles: succeeded opening %d handles.\n", i); return 0; }