more non_blocking fixes. now the unit test passes

This commit is contained in:
Sears Russell 2010-09-23 19:52:54 +00:00
parent 774ccfb002
commit 4a5d14f2c6
2 changed files with 18 additions and 10 deletions

View file

@ -1,3 +1,4 @@
#include <stasis/common.h> #include <stasis/common.h>
#undef STLSEARCH // XXX #undef STLSEARCH // XXX
@ -366,7 +367,7 @@ static int nbw_close(stasis_handle_t * h) {
pthread_mutex_destroy(&impl->mut); pthread_mutex_destroy(&impl->mut);
stasis_handle_t * slow; stasis_handle_t * slow;
while(-1 != (long)(slow = (stasis_handle_t*)popMaxVal(&impl->available_slow_handles))) { while(-1 != (long)(slow = (stasis_handle_t*)popMaxVal(&impl->available_slow_handles))) {
slow->close(slow); if(!impl->slow_factory_close) slow->close(slow);
impl->available_slow_handle_count--; impl->available_slow_handle_count--;
} }
destroyList(&impl->available_slow_handles); destroyList(&impl->available_slow_handles);
@ -847,7 +848,7 @@ stasis_handle_t * stasis_handle(open_non_blocking)
pthread_cond_init(&impl->force_completed_cond, 0); pthread_cond_init(&impl->force_completed_cond, 0);
impl->still_open = 1; impl->still_open = 1;
impl->refcount++; impl->refcount = 1;
stasis_handle_t *h = malloc(sizeof(stasis_handle_t)); stasis_handle_t *h = malloc(sizeof(stasis_handle_t));
*h = nbw_func; *h = nbw_func;

View file

@ -428,9 +428,13 @@ static stasis_handle_t * slow_factory_file(void * argsP) {
sf_args * args = (sf_args*) argsP; sf_args * args = (sf_args*) argsP;
return stasis_handle(open_file)(0, args->filename, args->openMode, args->filePerm); return stasis_handle(open_file)(0, args->filename, args->openMode, args->filePerm);
} }
static stasis_handle_t * slow_factory_pfile(void * argsP) { static stasis_handle_t * slow_pfile_factory(void * argsP) {
sf_args * args = (sf_args*) argsP; stasis_handle_t * h = argsP;
return stasis_handle(open_pfile)(0, args->filename, args->openMode, args->filePerm); return h;
}
static int slow_pfile_close(void * argsP) {
stasis_handle_t * h = argsP;
return h->close(h);
} }
START_TEST(io_nonBlockingTest_file) { START_TEST(io_nonBlockingTest_file) {
@ -482,7 +486,9 @@ START_TEST(io_nonBlockingTest_pfile) {
FILE_PERM FILE_PERM
}; };
h = stasis_handle(open_non_blocking)(slow_factory_pfile, 0, &slow_args, 0, stasis_handle_t * pfile_singleton = slow_factory_file(&slow_args);
h = stasis_handle(open_non_blocking)(slow_pfile_factory, slow_pfile_close, pfile_singleton, 0,
fast_factory, 0, fast_factory, 0,
5, 1024*1024, 100); 5, 1024*1024, 100);
// h = stasis_handle(open_debug)(h); // h = stasis_handle(open_debug)(h);
@ -491,7 +497,8 @@ START_TEST(io_nonBlockingTest_pfile) {
unlink("logfile.txt"); unlink("logfile.txt");
h = stasis_handle(open_non_blocking)(slow_factory_pfile, 0, &slow_args, 0, pfile_singleton = slow_factory_file(&slow_args);
h = stasis_handle(open_non_blocking)(slow_pfile_factory, slow_pfile_close, pfile_singleton, 0,
fast_factory, 0, fast_factory, 0,
5, 1024*1024, 100); 5, 1024*1024, 100);
//h = stasis_handle(open_debug)(h); //h = stasis_handle(open_debug)(h);
@ -500,7 +507,8 @@ START_TEST(io_nonBlockingTest_pfile) {
unlink("logfile.txt"); unlink("logfile.txt");
h = stasis_handle(open_non_blocking)(slow_factory_pfile, 0, &slow_args, 0, pfile_singleton = slow_factory_file(&slow_args);
h = stasis_handle(open_non_blocking)(slow_pfile_factory, slow_pfile_close, pfile_singleton, 0,
fast_factory, 0, fast_factory, 0,
5, 1024 * 1024, 100); 5, 1024 * 1024, 100);
handle_concurrencytest(h); handle_concurrencytest(h);
@ -521,12 +529,11 @@ Suite * check_suite(void) {
// tcase_set_timeout(tc, 1800); // thirty minute timeout // tcase_set_timeout(tc, 1800); // thirty minute timeout
/* Sub tests are added, one per line, here */ /* Sub tests are added, one per line, here */
tcase_add_test(tc, io_nonBlockingTest_pfile);
tcase_add_test(tc, io_memoryTest); tcase_add_test(tc, io_memoryTest);
tcase_add_test(tc, io_fileTest); tcase_add_test(tc, io_fileTest);
tcase_add_test(tc, io_pfileTest); tcase_add_test(tc, io_pfileTest);
tcase_add_test(tc, io_nonBlockingTest_file); tcase_add_test(tc, io_nonBlockingTest_file);
(void)io_nonBlockingTest_pfile; // XXX fails due to bug in test (or in pfile?)
// tcase_add_test(tc, io_nonBlockingTest_pfile);
/* --------------------------------------------- */ /* --------------------------------------------- */
tcase_add_checked_fixture(tc, setup, teardown); tcase_add_checked_fixture(tc, setup, teardown);
suite_add_tcase(s, tc); suite_add_tcase(s, tc);