/** @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; LONG lFHDelta = 0; ULONG cFHs = 0; ULONG cFHLast; unsigned msLastInc; PGINFOSEG pGIS = GETGINFOSEG(); #define MAX_FHS 32768 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++) { unsigned msEnd; unsigned msStart = pGIS->msecs; apFiles[i] = fopen("\\dev\\nul", "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: %d -> %d (inc: %d ms since last: %d ms)\n", i + 1, cFHLast, cFHs, msEnd - msStart, msStart - msLastInc); msLastInc = msEnd; } cFHLast = cFHs; } lFHDelta = cFHs = 0; DosSetRelMaxFH(&lFHDelta, &cFHs); printf("cFHs=%d\n", cFHs); 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; }