本文整理汇总了C++中BPatch::pollForStatusChange方法的典型用法代码示例。如果您正苦于以下问题:C++ BPatch::pollForStatusChange方法的具体用法?C++ BPatch::pollForStatusChange怎么用?C++ BPatch::pollForStatusChange使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BPatch
的用法示例。
在下文中一共展示了BPatch::pollForStatusChange方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: logerror
// static bool mutatorTest3and4(int testno, const char *testname)
test_results_t test_thread_3_Mutator::executeTest() {
test3_threadCreateCounter = 0;
callback_tids.clear();
unsigned int timeout = 0; // in ms
int err = 0;
BPatchAsyncThreadEventCallback createcb = threadCreateCB;
if (!bpatch->registerThreadEventCallback(BPatch_threadCreateEvent, createcb))
{
FAIL_MES(TESTNAME, TESTDESC);
logerror("%s[%d]: failed to register thread callback\n",
__FILE__, __LINE__);
appThread->getProcess()->terminateExecution();
return FAILED;
}
#if 0
// unset mutateeIde to trigger thread (10) spawn.
int zero = 0;
// FIXME Check the return value of setVar()
setVar("mutateeIdle", (void *) &zero, TESTNO, TESTDESC);
dprintf("%s[%d]: continue execution for test %d\n", __FILE__, __LINE__, TESTNO);
appThread->continueExecution();
#endif
// wait until we have received the desired number of events
// (or timeout happens)
BPatch_Vector<BPatch_thread *> threads;
BPatch_process *appProc = appThread->getProcess();
assert(appProc);
appProc->getThreads(threads);
int active_threads = 11; // FIXME Magic number
threads.clear();
while (((test3_threadCreateCounter < TEST3_THREADS)
|| (active_threads > 1))
&& (timeout < TIMEOUT)) {
dprintf("%s[%d]: waiting for completion for test %d, num active threads = %d\n",
__FILE__, __LINE__, TESTNO, active_threads);
sleep_ms(SLEEP_INTERVAL/*ms*/);
timeout += SLEEP_INTERVAL;
if (appProc->isTerminated()) {
dprintf("%s[%d]: BAD NEWS: somehow the process died\n", __FILE__, __LINE__);
err = 1;
break;
}
bpatch->pollForStatusChange();
if (appProc->isStopped()) {
appProc->continueExecution();
}
appProc->getThreads(threads);
active_threads = threads.size();
threads.clear();
}
if (timeout >= TIMEOUT) {
FAIL_MES(TESTNAME, TESTDESC);
logerror("%s[%d]: test timed out. got %d/10 events\n", __FILE__, __LINE__, test3_threadCreateCounter);
logerror("test3_createCounter is %d, expected %d; active threads %d, expected %d\n",
test3_threadCreateCounter, TEST3_THREADS, active_threads, 1);
err = 1;
}
dprintf("%s[%d]: ending test %d, num active threads = %d\n",
__FILE__, __LINE__, TESTNO, active_threads);
dprintf("%s[%d]: stop execution for test %d\n", __FILE__, __LINE__, TESTNO);
appProc->stopExecution();
// read all tids from the mutatee and verify that we got them all
unsigned long mutatee_tids[TEST3_THREADS];
const char *threads_varname = "test4_threads";
getVar(threads_varname, (void *) mutatee_tids,
(sizeof(unsigned long) * TEST3_THREADS),
TESTNO, TESTDESC);
if (debugPrint()) {
dprintf("%s[%d]: read following tids for test%d from mutatee\n", __FILE__, __LINE__, TESTNO);
for (unsigned int i = 0; i < TEST3_THREADS; ++i) {
dprintf("\t%lu\n", mutatee_tids[i]);
}
}
for (unsigned int i = 0; i < TEST3_THREADS; ++i) {
bool found = false;
for (unsigned int j = 0; j < callback_tids.size(); ++j) {
if (callback_tids[j] == mutatee_tids[i]) {
found = true;
break;
}
}
if (!found) {
FAIL_MES(TESTNAME, TESTDESC);
logerror("%s[%d]: could not find record for tid %lu: have these:\n",
__FILE__, __LINE__, mutatee_tids[i]);
for (unsigned int j = 0; j < callback_tids.size(); ++j) {
logerror("%lu\n", callback_tids[j]);
//.........这里部分代码省略.........
示例2: defined
//.........这里部分代码省略.........
return FAILED;
}
if (debugPrint())
{
int one = 1;
const char *varName = "libraryDebug";
if (setVar(varName, (void *) &one, TESTNO, TESTNAME))
{
logerror("%s[%d]: Error setting variable '%s' in mutatee\n",
FILE__, __LINE__, varName);
bpatch->removeUserEventCallback(test7cb);
appProc->terminateExecution();
return FAILED;
}
}
dprintf("%s[%d]: did instrumentation, continuing process...: %s\n",
__FILE__, __LINE__, libname);
// unset mutateeIdle to trigger mutatee to issue messages.
int timeout = 0;
appProc->continueExecution();
dprintf("%s[%d]: continued process...: %s\n",
__FILE__, __LINE__, libname);
// wait until we have received the desired number of events
// (or timeout happens)
while(!test7err && !test7done && (timeout < TIMEOUT))
{
sleep_ms(SLEEP_INTERVAL/*ms*/);
timeout += SLEEP_INTERVAL;
bpatch->pollForStatusChange();
if (appProc->isTerminated())
{
BPatch_exitType et = appProc->terminationStatus();
if (et == ExitedNormally)
{
int ecode = appProc->getExitCode();
logerror("%s[%d]: normal exit with code %d\n",
__FILE__, __LINE__, ecode);
}
if (et == ExitedViaSignal)
{
int ecode = appProc->getExitSignal();
logerror("%s[%d]: caught signal %d\n",
__FILE__, __LINE__, ecode);
}
log_res();
bpatch->removeUserEventCallback(test7cb);
return FAILED;
}
}
dprintf("%s[%d]: after wait loop: test7err = %s, test7done = %s, timeout = %d\n",
__FILE__, __LINE__, test7err ? "true" : "false", test7done ? "true" : "false", timeout);
if (timeout >= TIMEOUT)
{
FAIL_MES(TESTNAME, TESTDESC);
logerror("%s[%d]: test timed out: %d ms\n",
__FILE__, __LINE__, TIMEOUT);
test7err = true;
}