ram_reply_t ramtra_mktrash2(ramtra_trash_t *trash_arg) { assert(trash_arg != NULL); RAM_FAIL_TRAP(rammtx_mkmutex(&trash_arg->ramtrat_mutex)); RAM_FAIL_TRAP(ramslst_mklist(&trash_arg->ramtrat_items)); trash_arg->ramtrat_size = 0; return RAM_REPLY_OK; }
ram_reply_t ramtest_inittest2(ramtest_test_t *test_arg, const ramtest_params_t *params_arg) { size_t i = 0; size_t seqlen = 0; size_t maxthreads = 0; size_t unused = 0; RAM_FAIL_NOTNULL(params_arg); RAM_FAIL_NOTZERO(params_arg->ramtestp_alloccount); RAM_FAIL_EXPECT(RAM_REPLY_RANGEFAIL, params_arg->ramtestp_minsize > 0); RAM_FAIL_EXPECT(RAM_REPLY_RANGEFAIL, params_arg->ramtestp_minsize <= params_arg->ramtestp_maxsize); RAM_FAIL_EXPECT(RAM_REPLY_RANGEFAIL, params_arg->ramtestp_mallocchance >= 0); RAM_FAIL_EXPECT(RAM_REPLY_RANGEFAIL, params_arg->ramtestp_mallocchance <= 100); RAM_FAIL_NOTNULL(params_arg->ramtestp_acquire); RAM_FAIL_NOTNULL(params_arg->ramtestp_release); RAM_FAIL_NOTNULL(params_arg->ramtestp_query); /* *params_arg->ramtestp_flush* is allowed to be NULL. */ RAM_FAIL_NOTNULL(params_arg->ramtestp_check); RAM_FAIL_TRAP(ramtest_maxthreadcount(&maxthreads)); RAM_FAIL_EXPECT(RAM_REPLY_DISALLOWED, params_arg->ramtestp_threadcount <= maxthreads); test_arg->ramtestt_params = *params_arg; if (0 == test_arg->ramtestt_params.ramtestp_threadcount) { RAM_FAIL_TRAP(ramtest_defaultthreadcount( &test_arg->ramtestt_params.ramtestp_threadcount)); } test_arg->ramtestt_records = calloc(test_arg->ramtestt_params.ramtestp_alloccount, sizeof(*test_arg->ramtestt_records)); RAM_FAIL_EXPECT(RAM_REPLY_RESOURCEFAIL, NULL != test_arg->ramtestt_records); test_arg->ramtestt_threads = calloc(test_arg->ramtestt_params.ramtestp_threadcount, sizeof(*test_arg->ramtestt_threads)); RAM_FAIL_EXPECT(RAM_REPLY_RESOURCEFAIL, NULL != test_arg->ramtestt_threads); seqlen = test_arg->ramtestt_params.ramtestp_alloccount * 2; test_arg->ramtestt_sequence = calloc(seqlen, sizeof(*test_arg->ramtestt_sequence)); RAM_FAIL_EXPECT(RAM_REPLY_RESOURCEFAIL, NULL != test_arg->ramtestt_sequence); RAM_FAIL_TRAP(rammtx_mkmutex(&test_arg->ramtestt_mtx)); for (i = 0; i < test_arg->ramtestt_params.ramtestp_alloccount; ++i) { RAM_FAIL_TRAP(rammtx_mkmutex( &test_arg->ramtestt_records[i].ramtestar_mtx)); } /* the sequence array must contain two copies of each index into * *test_arg->ramtestt_records*. the first represents an allocation. * the second, a deallocation. */ for (i = 0; i < seqlen; ++i) test_arg->ramtestt_sequence[i] = (i / 2); /* i shuffle the sequence array to ensure a randomized order of * operations. */ RAM_FAIL_TRAP(ramtest_shuffle(test_arg->ramtestt_sequence, sizeof(test_arg->ramtestt_sequence[0]), seqlen)); if (!test_arg->ramtestt_params.ramtestp_userngseed) test_arg->ramtestt_params.ramtestp_rngseed = (unsigned int)time(NULL); srand(test_arg->ramtestt_params.ramtestp_rngseed); RAM_FAIL_TRAP(ramtest_fprintf(&unused, stderr, "[0] i seeded the random generator with the value %u.\n", test_arg->ramtestt_params.ramtestp_rngseed)); test_arg->ramtestt_nextrec = 0; return RAM_REPLY_OK; }