bool Thread::Resume() { if (was_started() && thread_handle_ != nullptr) { ResumeThread(thread_handle_); return true; } return false; }
bool Thread::Suspend() { if (was_started() && thread_handle_ != nullptr) { SuspendThread(thread_handle_); return true; } return false; }
void Thread::Stop() { if (!was_started()) { return; } StopInternal(); ThreadHelper::Join(thread_handle_); assert(!message_loop_); was_started_ = false; stopping_ = false; }
static void test_analyze_results(struct test *test, int *stdo, int *stde) { scanstate scanner; char scanbuf[BUFSIZ]; *stdo = *stde = -1; if(was_aborted(test->status)) { test_failures++; return; } if(was_disabled(test->status)) { return; } if(test->status == test_has_failed) { test_failures++; return; } if(!was_started(test->status)) { test_failures++; return; } test->stdout_match = match_unknown; test->stderr_match = match_unknown; scanstate_init(&scanner, scanbuf, sizeof(scanbuf)); scan_sections(test, &test->testscanner, parse_section_compare, &scanner); assert(test->stdout_match != match_inprogress); assert(test->stderr_match != match_inprogress); if(test->stdout_match == match_unknown) { test->stdout_match = (fd_has_data(test, test->outfd) ? match_no : match_yes); } if(test->stderr_match == match_unknown) { test->stderr_match = (fd_has_data(test, test->errfd) ? match_no : match_yes); } *stdo = (test->stdout_match != match_yes); *stde = (test->stderr_match != match_yes); if(!*stdo && !*stde && !test->exitsignal) { test_successes++; } else { test_failures++; } }
static void dump_reason(struct test *test, const char *name) { fprintf(stderr, "ERROR Test %s", name); if(!was_started(test->status)) { fprintf(stderr, " by %s", convert_testfile_name(test->last_file_processed)); if(test->status_reason) { printf(": "); } } if(test->status_reason) { fprintf(stderr, ": %s", test->status_reason); } fprintf(stderr, "\n"); }
static void print_reason(struct test *test, const char *name, const char *prep) { printf("%s %-25s ", name, convert_testfile_name(test->testfile)); if(!was_started(test->status)) { printf("%s %s", prep, test->last_file_processed); if(test->status_reason) { printf(": "); } } if(test->status_reason) { printf("%s", test->status_reason); } printf("\n"); }
void dump_results(struct test *test) { int tempref = 0; if(was_aborted(test->status)) { dump_reason(test, "was aborted"); return; } if(was_disabled(test->status)) { dump_reason(test, "is disabled"); return; } if(!was_started(test->status)) { fprintf(stderr, "Error: %s was not started due to errors in %s.\n", convert_testfile_name(test->testfile), test->last_file_processed); test_failures++; return; } // The command section has already been dumped. We just // need to dump the STDERR and STDOUT results. test->stdout_match = match_unknown; test->stderr_match = match_unknown; scan_sections(test, &test->testscanner, parse_section_output, &tempref); // if any sections haven't been output, but they differ from // the default, then they need to be output here at the end. if(test->stderr_match == match_unknown && fd_has_data(test, test->errfd)) { write_strconst(test->rewritefd, "STDERR:\n"); write_file(test, test->rewritefd, test->errfd, NULL); } if(test->stdout_match == match_unknown && fd_has_data(test, test->outfd)) { write_strconst(test->rewritefd, "STDOUT:\n"); write_file(test, test->rewritefd, test->outfd, NULL); } }
void test_results(struct test *test) { int stdo, stde; // true if there are differences. test_analyze_results(test, &stdo, &stde); if(was_aborted(test->status)) { print_reason(test, "ABRT", "by"); return; } if(was_disabled(test->status)) { if(verbose) { print_reason(test, "dis ", "by"); } return; } if(test->status == test_has_failed) { if(verbose) { print_reason(test, "FAIL", "by"); } else { putchar('F'); fflush(stdout); } return; } if(!was_started(test->status)) { if(verbose) { print_reason(test, "ERR ", "error in"); } else { putchar('E'); fflush(stdout); } return; } if(!stdo && !stde && !test->exitsignal) { if(verbose) { printf("ok %s \n", convert_testfile_name(test->testfile)); } else { putchar('.'); fflush(stdout); } } else { if(verbose) { printf("FAIL %-25s ", convert_testfile_name(test->testfile)); if(test->exitsignal) { printf("terminated by signal %d%s", test->exitsignal, (test->exitcored ? " with core" : "")); } else { printf("%c%c ", (stdo ? 'O' : '.'), (stde ? 'E' : '.')); if(stdo || stde) { if(stdo) printf("stdout "); if(stdo && stde) printf("and "); if(stde) printf("stderr "); printf("differed"); } } printf("\n"); } else { putchar('F'); fflush(stdout); } } return; }