Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: experimental/visual_studio_plugin/src/debug_conn/debug_host.cc

Issue 10928195: First round of dead file removal (Closed) Base URL: https://github.com/samclegg/nativeclient-sdk.git@master
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: experimental/visual_studio_plugin/src/debug_conn/debug_host.cc
diff --git a/experimental/visual_studio_plugin/src/debug_conn/debug_host.cc b/experimental/visual_studio_plugin/src/debug_conn/debug_host.cc
deleted file mode 100644
index 08626889c1ee7d0b47d1629318e703dd0366414a..0000000000000000000000000000000000000000
--- a/experimental/visual_studio_plugin/src/debug_conn/debug_host.cc
+++ /dev/null
@@ -1,689 +0,0 @@
-/*
- * Copyright 2011 The Native Client Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can
- * be found in the LICENSE file.
- */
-
-#include <string>
-
-#include "debug_conn/debug_host.h"
-#include "debug_conn/debug_packet.h"
-#include "debug_conn/debug_pipe.h"
-#include "debug_conn/debug_socket.h"
-#include "debug_conn/debug_util.h"
-
-using namespace nacl_debug_conn;
-
-using std::string;
-
-DebugHost::DebugHost(DebugPipe *pipe)
- : pipe_(pipe),
- outputFunc_(0),
- outputObj_(0),
- stopFunc_(0),
- stopObj_(0) { }
-
-DebugHost::~DebugHost() {
- if (pipe_)
- delete pipe_;
-}
-
-DebugHost *DebugHost::SocketConnect(const char *addr) {
- DebugSocket *sock = DebugSocket::CreateClient(addr);
- if (NULL == sock)
- return NULL;
-
- DebugPipe *pipe = new DebugPipe(sock);
- DebugHost *host = new DebugHost(pipe);
-
- pipe->SetName("host");
- pipe->SetFlagsMasked(DebugPipe::DPF_DEBUG_SEND | DebugPipe::DPF_DEBUG_RECV, DebugPipe::DPF_DEBUG_MASK);
- pipe->SetFlagsMasked(DebugPipe::DPF_IGNORE_ACK, DebugPipe::DPF_IGNORE_ACK);
- pipe->SetFlagsMasked(DebugPipe::DPF_USE_SEQ, DebugPipe::DPF_USE_SEQ);
- return host;
-}
-
-DebugHost::DHResult DebugHost::Transact(DebugPacket *outPkt, DebugPacket *inPkt) {
- DebugPipe::DPResult res;
- bool stopPending = false;
-
- if (NULL == pipe_)
- return DHR_LOST;
-
- res = pipe_->SendPacket(outPkt);
- if (res == DebugPipe::DPR_ERROR)
- return DHR_LOST;
-
- if (res == DebugPipe::DPR_NO_DATA)
- return DHR_TIMEOUT;
-
- if (res == DHR_OK) {
- while(1) {
- // HACK HACK HACK: cheezy wait/timeout implementation
- // TODO(noelallen): make this really async
- // FIXME(mmortensen) -- address/remove the comment above
- const DWORD timeout = 0xffffffff;
- DWORD start = GetTickCount();
- debug_log_info("DebugHost::Transact...Start=%u stopPending=%ld\n",
- start, stopPending);
- while(!pipe_->DataAvail()) {
- debug_log_info("DebugHost::Transact...No data avail\n");
- Sleep(0);
- if(GetTickCount() - start > timeout) {
- debug_log_info("DebugHost::Transact returning DHR_TIMEOUT(%d)\n",
- DHR_TIMEOUT);
- return DHR_TIMEOUT;
- }
- }
-
- res = pipe_->GetPacket(inPkt);
- const char *packet_string = 0;
- // Look at (peek at) packet without modifying it -- some packet methods
- // modify of the received data.
- inPkt->PeekString(&packet_string);
- debug_log_info("DebugHost::Transact inPkt->GetPacket res=%d {%s}\n",
- res, packet_string);
- if (res == DebugPipe::DPR_ERROR)
- return DHR_LOST;
-
- if (res == DebugPipe::DPR_NO_DATA)
- return DHR_TIMEOUT;
-
- char peek_char;
- if (inPkt->PeekChar(&peek_char)) {
- debug_log_info("DebugHost::Transact PeekChar for inPkt='%c'\n",
- peek_char);
- if (peek_char == 'W' || peek_char == 'O' ||
- peek_char == 'S' || peek_char == 'T') {
-
- // Find the command -- the first character received.
- char cmd = peek_char;
-
- switch(cmd) {
- case 'W':
- case 'S':
- case 'T':
- flags_.SetFlagsMasked(0, DHF_RUNNING);
- stopPending = true;
- debug_log_info("DebugHost::Transact cmd=%c,"
- " set flags to DHF_RUNNING\n",
- cmd, stopPending);
-
- if (stopFunc_) {
- debug_log_info("DebugHost::Transact Calling stopFunc @%s:%d\n",
- __FILE__, __LINE__);
- stopFunc_(DHR_OK, stopObj_);
- debug_log_info("DebugHost::Transact Called stopFunc..."
- "returning DebugHost::DHR_OK(%d)\n",
- DebugHost::DHR_OK);
- return DebugHost::DHR_OK;
- }
- continue; // sends us back to the TOP of the loop & block
- case 'O':
- if (outputFunc_) {
- const char *str = 0;
- if (inPkt->GetHexString(&str)) {
- debug_log_info(" DebugHost::Transact %d Calling outputFunc"
- " with str=[%s] packet_string=[%s]\n",
- __LINE__, str, packet_string);
- // outputFunc_(DHR_OK, outputObj_, str);
- outputFunc_(DHR_OK, outputObj_, packet_string);
- free((void *) str);
- return DebugHost::DHR_OK;
- }
- }
- continue;
- default:
- debug_log_info("DebugHost::Transact returning DHR_LOST\n");
- return DebugHost::DHR_LOST;
- } // end switch
- // end 'if peek_char is W,S,O, or T'
- } else {
- debug_log_info("DebugHost::Transact peek_char is not W,S,O,T\n");
- }
- // end if inPkt->PeekChar returns true
- } else {
- debug_log_info("DebugHost::Transact inPkt->PeekChar returned false\n");
- }
-
- if (stopPending && stopFunc_) {
- debug_log_info("DebugHost::Transact Calling stopFunc @ %s:%d\n",
- __FILE__, __LINE__);
- stopFunc_(DHR_OK, stopObj_);
- } else {
- debug_log_info("DebugHost::Transact Didn't call stopFunc,"
- " stopPending=%d\n", stopPending);
- }
-
- debug_log_info("DebugHost::Transact returning DHR_OK %s:%d\n",
- __FILE__, __LINE__);
- return DHR_OK;
- }
- }
- debug_log_info("DebugHost::Transact returning DHR_FAILED %s:%d\n",
- __FILE__, __LINE__);
- return DHR_FAILED;
-}
-
-
-
-
-nacl_debug_conn::DebugHost::DHResult nacl_debug_conn::DebugHost::SendString( const char* str, const char** ppReply )
-{
- DebugPacket outPkt, inPkt;
- DHResult res;
-
- outPkt.Clear();
- outPkt.AddString(str);
- res = Transact(&outPkt, &inPkt);
-
- if (res == DHR_OK) {
- if (!inPkt.GetString(&str)) {
- res = DHR_FAILED;
- }
- }
-
- return res;
-}
-
-DebugHost::DHResult DebugHost::SendStringAsync(const char *str, DHAsyncStr reply, void *obj) {
- DebugPacket outPkt, inPkt;
- DHResult res;
-
- outPkt.Clear();
- outPkt.AddString(str);
- debug_log_info("DebugHost::SendStringAsync Calling Transact %s %d\n",
- __FILE__, __LINE__);
- res = Transact(&outPkt, &inPkt);
- debug_log_info("DebugHost::SendStringAsync [%s], Transact returned %d\n",
- str, res);
- if (res == DHR_OK) {
- const char *pstr;
- debug_log_info("DebugHost::SendStringAsync, calling GetString on inPkt\n");
- if (inPkt.GetString(&pstr)) {
- debug_log_info("DebugHost::SendStringAsync, REPLY pstr=[%s]\n", pstr);
- reply(DHR_OK, obj, pstr);
- delete[] pstr;
- } else {
- debug_log_info("DebugHost::SendStringAsync inPkt.GetString failed");
- }
- }
-
- // Note: it's NOT asynchronous!
- // Danger: callback gets called only in some cases!
-
- return res;
-}
-
-typedef struct {
- DebugHost::DHAsyncStr func;
- uint32_t count;
- void *obj;
-} StripObj_t;
-
-static void __stdcall StripResult(DebugHost::DHResult res, void *obj, const char *str) {
- StripObj_t *sobj = reinterpret_cast<StripObj_t *>(obj);
- uint32_t pos = static_cast<uint32_t>(strlen(str));
-
- if (pos > sobj->count)
- pos = sobj->count;
-
- sobj->func(res, sobj->obj, &str[pos]);
-}
-
-DebugHost::DHResult DebugHost::GetArchAsync(DHAsyncStr reply, void *obj) {
- StripObj_t sobj;
-
- sobj.count= 1;
- sobj.func = reply;
- sobj.obj = obj;
-
- return SendStringAsync("qXfer:features:read:target.xml:0,fff", StripResult, &sobj);
-}
-
-DebugHost::DHResult DebugHost::GetLastSig(int *sig) {
- DebugPacket outPkt, inPkt;
- DHResult res;
-
- outPkt.Clear();
- outPkt.AddString("?");
- debug_log_info("DebugHost::GetLastSig Calling Transact\n");
- res = Transact(&outPkt, &inPkt);
- debug_log_info("DebugHost::GetLastSig, Transact returned %d\n", res);
- if (res == DHR_OK) {
- char ch;
- uint8_t num;
- bool local_result = inPkt.GetRawChar(&ch);
- debug_log_info("DebugHost::GetLastSig: GetRawChar returned %d, ch=%c\n",
- local_result, ch);
- if (local_result && 'S' == ch) {
- if (inPkt.GetByte(&num)) {
- debug_log_info("DebugHost::GetLastSig: GetByte num=%d\n", num);
- *sig = num;
- return DHR_OK;
- }
- }
- return DHR_FAILED;
- }
- return res;
-}
-
-
-typedef struct {
- string outstr;
- bool done;
-} ThreadFetchObj_t;
-
-static void __stdcall ThreadFetch(DebugHost::DHResult res, void *obj, const char *str) {
- ThreadFetchObj_t *tfo = reinterpret_cast<ThreadFetchObj_t *>(obj);
- char *words[32];
- char tmp[128];
-
- if (res == DebugHost::DHR_OK) {
- if ('m' == str[0]) {
- debug_log_info("DebugHost::ThreadFetch Found 'm' in ThreadFetch [%s]\n",
- str);
- int loop;
- int cnt = debug_get_tokens(&str[1], ',', words, 32);
- debug_log_info("DebugHost::ThreadFetch. cnt=%d\n", cnt);
- for (loop = 0; loop < cnt; loop++) {
- sprintf(tmp, "<thread id=\"%s\" core=\"0\"/>\n", words[loop]);
- tfo->outstr += tmp;
- }
- debug_log_info("DebugHost::ThreadFetch. tfo->outstr = [%s]\n",
- tfo->outstr.c_str());
- return;
- }
- }
-
- tfo->done = 1;
-}
-
-DebugHost::DHResult DebugHost::GetThreadsAsync(DHAsyncStr cb, void *obj) {
- DHResult res;
- ThreadFetchObj_t tfo;
-
- tfo.done = 0;
- tfo.outstr = "<threads>\n";
- debug_log_info("DebugHost::GetThreadsAsync");
- res = SendStringAsync("qfThreadInfo", ThreadFetch, &tfo);
- while (!tfo.done) {
- if (res != DHR_OK)
- break;
- res = SendStringAsync("qsThreadInfo", ThreadFetch, &tfo);
- }
- tfo.outstr += "</threads>\n";
- cb(res, obj, tfo.outstr.data());
- return res;
-}
-
-nacl_debug_conn::DebugHost::DHResult nacl_debug_conn::DebugHost::GetRegisters( void *data, uint32_t max )
-{
- DebugPacket outPkt, inPkt;
- DHResult res;
-
- outPkt.Clear();
- outPkt.AddRawChar('g');
- debug_log_info("DebugHost::GetRegisters max=%d Calling Transact\n", max);
- res = Transact(&outPkt, &inPkt);
-
- // Log if an error occurs. On success log the length of the reply, since
- // a short reply occurs if we get out of sync and get something like "S05"
- // from a previous transmission instead of a long list of register values.
- if (res == DHR_OK) {
- int len = inPkt.Read(data, max);
- debug_log_info("DebugHost::GetRegisters res=OK, max=%d len=%d\n", max, len);
- } else {
- debug_log_info("DebugHost::GetRegisters, bad res=%d, max=%d\n", res, max);
- }
- return res;
-}
-
-DebugHost::DHResult DebugHost::SetRegisters(void *data, uint32_t size) {
- DebugPacket outPkt, inPkt;
- DHResult res;
-
- outPkt.Clear();
- outPkt.AddRawChar('G');
- outPkt.AddBlock(data, size);
- res = Transact(&outPkt, &inPkt);
- debug_log_info("DebugHost::SetRegisters, Transact returned %d\n", res);
- if (res == DHR_OK) {
- const char *str;
- if (inPkt.GetString(&str)) {
- if (!strcmp(str, "OK"))
- res = DHR_OK;
- else {
- if (str[0] == 'E') {
- debug_log_warning("DebugHost::Set registers error, str='%s'\n", str);
- res = DHR_FAILED;
- }
- }
- delete[] str;
- }
- }
-
- return res;
-}
-
-
-nacl_debug_conn::DebugHost::DHResult nacl_debug_conn::DebugHost::GetMemory(uint64_t offs, void* data, uint32_t max)
-{
- DebugPacket outPkt, inPkt;
- DHResult res;
-
- int len = 0;
-
- outPkt.Clear();
- outPkt.AddRawChar('m');
- outPkt.AddNumberSep(offs, ',');
- outPkt.AddNumberSep(max, 0);
- debug_log_info("DebugHost::GetMemory Calling Transact\n");
- res = Transact(&outPkt, &inPkt);
- debug_log_info("DebugHost::GetMemory, Transact returned %d\n", res);
- if (res == DHR_OK) {
- len = inPkt.Read(data, max);
- debug_log_info(" DebugHost::GetMemory, len=%d\n", len);
- if (len == max) {
- res = DHR_OK;
- } else {
- res = DHR_LOST;
- }
- }
-
- return res;
-}
-
-DebugHost::DHResult DebugHost::SetMemory(uint64_t offs, void *data, uint32_t max) {
- DebugPacket outPkt, inPkt;
- DHResult res;
-
- outPkt.Clear();
- outPkt.AddRawChar('M');
- outPkt.AddNumberSep(offs, ',');
- outPkt.AddNumberSep(max, ':');
- outPkt.AddBlock(data, max);
- debug_log_info("DebugHost::SetMemory Calling Transact\n");
- res = Transact(&outPkt, &inPkt);
- debug_log_info("DebugHost::SetMemory, Transact returned %d\n", res);
- if (res == DHR_OK) {
- const char *str;
- if (inPkt.GetString(&str)) {
- debug_log_info("DebugHost::SetMemory, inPkt.GetString returned '%s'\n",
- str);
- if (!strcmp(str, "OK"))
- res = DHR_OK;
- else {
- if (str[0] == 'E') {
- debug_log_warning("DebugHost::Set memory reported error '%s'\n",
- str);
- res = DHR_FAILED;
- }
- }
- delete[] str;
- }
- }
-
- debug_log_info("DebugHost::SetMemory returning %d\n", res);
- return res;
-}
-
-DebugHost::DHResult DebugHost::WaitForReply() {
- DebugPacket inPkt;
- while (true) {
- DebugPipe::DPResult res = pipe_->GetPacket(&inPkt);
- if (res == DebugPipe::DPR_NO_DATA)
- continue;
-
- if (res == DebugPipe::DPR_OK) {
- char cmd = 0;
- //Find the command
- inPkt.GetRawChar(&cmd);
- debug_log_info("DebutHost::SendAndWaitForBreak cmd=%d\n", cmd);
- switch(cmd) {
- case 'W':
- case 'S':
- case 'T':
- flags_.ClearFlag(DHF_RUNNING);
- if (stopFunc_) {
- debug_log_info("Calling stopFunc @ %s:%d\n", __FILE__, __LINE__);
- stopFunc_(DHR_OK, stopObj_);
- }
- debug_log_info("Called stopFunc...returning DebugHost::DHR_OK(%d)\n",
- DebugHost::DHR_OK);
- return DebugHost::DHR_OK;
-
- case 'O':
- if (outputFunc_) {
- const char *str = 0;
- if (inPkt.GetHexString(&str)) {
- outputFunc_(DHR_OK, outputObj_, str);
- free((void *) str);
- }
- }
- continue;
-
- default:
- return DebugHost::DHR_LOST;
- }
- }
- return DebugHost::DHR_LOST;
- }
- return DHR_OK;
-}
-
-DebugHost::DHResult DebugHost::SendAndWaitForBreak(const char* str, bool w) {
- DebugPipe::DPResult res;
- DebugPacket outPkt, inPkt;
-
- // Send CTRL-C for break signal
- outPkt.Clear();
- outPkt.AddString(str);
-
- debug_log_info("DebugHost::SendAndWaitFor Break [%s] w=%d\n", str, w);
- if (NULL == pipe_)
- return DHR_LOST;
-
- res = pipe_->SendPacket(&outPkt);
- if (res == DebugPipe::DPR_ERROR)
- return DHR_LOST;
-
- if (res == DebugPipe::DPR_NO_DATA)
- return DHR_TIMEOUT;
-
- if (w)
- return WaitForReply();
- return DHR_OK;
-}
-
-DebugHost::DHResult DebugHost::RequestContinue() {
- debug_log_info("DebugHost::RequestContinue\n");
-
- // When we send 'c', there will be a reply (e.g. "S05"), so
- // we don't wait for it here, but wait in the worker thread.
- flags_.SetFlag(DHF_RUNNING);
- return SendAndWaitForBreak("c", false);
-}
-
-DebugHost::DHResult DebugHost::RequestStep() {
- debug_log_info("DebugHost::ReqeuestStep\n");
- return SendAndWaitForBreak("s", true);
-}
-
-DebugHost::DHResult DebugHost::RequestBreak() {
- debug_log_info("DebugHost::ReqeuestBreak\n");
- return SendAndWaitForBreak("\03", false);
-}
-
-// *********************************************************
-//
-// Breakpoint Functions
-//
-// *********************************************************
-bool DebugHost::HasBreakpoint(uint64_t offs) {
- if (breaks_.count(offs)) {
- debug_log_info("DebugHost::HasBreakpoint offs=0x%x breaks_.count=%d\n",
- offs, breaks_.count(offs));
- return true;
- }
- debug_log_info("DebugHost::HasBreakpoint did NOT find offset=0x%x\n", offs);
- return false;
-}
-
-DebugHost::DHResult DebugHost::AddBreakpoint(uint64_t offs) {
- char ch;
-
- debug_log_info("DebugHost::AddBreakpoint 0x%x\n", offs);
- if (breaks_.count(offs))
- return DHR_OK;
-
- debug_log_info("DebugHost::AddBreakpoint getting memory for 0x%x\n", offs);
- GetMemory(offs, &ch, 1);
- debug_log_info("DebugHost::AddBreakpoint got char '%d'\n", (unsigned int) ch);
- BreakpointRecord br = {
- offs,
- false,
- false,
- ch
- };
- breaks_[offs] = br;
-
- EnableBreakpoint(offs);
- return DHR_OK;
-}
-
-DebugHost::DHResult DebugHost::EnableBreakpoint(uint64_t offs) {
- // Check if we know about this breakpoint
- if (breaks_.count(offs) == 0)
- {
- debug_log_warning("DebugHost::EnableBreakpoint Could not find BP 0x%x.\n",
- offs);
- return DHR_FAILED;
- }
- debug_log_warning("DebugHost::EnableBreakpoint enabling BP 0x%x.\n", offs);
- breaks_[offs].enabled = true;
- return BreakpointStatusChanged(offs);
-}
-
-DebugHost::DHResult DebugHost::DisableBreakpoint(uint64_t offs) {
- // Check if we know about this breakpoint
- if (breaks_.count(offs) == 0) {
- debug_log_info("DebugHost::DisableBreakpoint - did not find 0x%x\n", offs);
- return DHR_FAILED;
- }
- debug_log_info("DebugHost::DisableBreakpoint - disabling 0x%x\n", offs);
- breaks_[offs].enabled = false;
- return BreakpointStatusChanged(offs);
-}
-
-DebugHost::DHResult DebugHost::RemoveBreakpoint(uint64_t offs) {
- if (breaks_.count(offs) == 0) {
- debug_log_info("DebugHost::RemoveBreakpoint count 0x%x is 0,"
- " returning DHR_FAILED\n", offs);
- return DHR_FAILED;
- }
-
- debug_log_info("DebugHost::RemoveBreakpoint 0x%x,"
- " calling DisableBreakpoint\n", offs);
- // Make sure to disable it just in case.
- DisableBreakpoint(offs);
-
- breaks_.erase(offs);
- debug_log_info("DebugHost::RemoveBreakpoint returning DHR_OK\n");
- return DHR_OK;
-}
-
-DebugHost::DHResult nacl_debug_conn::DebugHost::SuspendBreakpoint( uint64_t offs )
-{
- // Check if we know about this breakpoint
- if (breaks_.count(offs) == 0) {
- debug_log_warning("DebugHost::SuspendBreakpoint: Did not find BP 0x%x.\n",
- offs);
- return DHR_FAILED;
- }
-
- debug_log_warning("DebugHost::SuspendBreakpoint: suspending 0x%x.\n", offs);
- breaks_[offs].suspended = true;
- return BreakpointStatusChanged(offs);
-}
-
-DebugHost::DHResult nacl_debug_conn::DebugHost::ResumeBreakpoint( uint64_t offs )
-{
- // Check if we know about this breakpoint
- if (breaks_.count(offs) == 0) {
- debug_log_warning("DebugHost::ResumeBreakpoint Could not find BP 0x%x.\n",
- offs);
- return DHR_FAILED;
- }
- debug_log_warning("DebugHost::ResumeBreakpoint resuming BP 0x%x.\n", offs);
- breaks_[offs].suspended = false;
- return BreakpointStatusChanged(offs);
-}
-
-nacl_debug_conn::DebugHost::DHResult nacl_debug_conn::DebugHost::BreakpointStatusChanged( uint64_t offs )
-{
- if (breaks_.count(offs) == 0) {
- debug_log_warning("DebugHost::BreakpointStatusChanged"
- "Could not find BP 0x%x.\n", offs);
- return DHR_FAILED;
- }
- debug_log_warning("DebugHost::Breakpoint status changed 0x%x.\n", offs);
- BreakpointRecord br = breaks_[offs];
-
- // if breakpoint is enabled and not suspended, write a 0xCC byte. Otherwise,
- // restore the original memory. Both of these operations are idempotent, so
- // we're not concerned about the breakpoint's previous status.
- if (br.enabled && !br.suspended) {
- unsigned char ch = 0xCC;
- debug_log_warning("conn::DebugHost::BreakpointStatusChanged enabled"
- " && !suspended - setting 0xCC\n");
- return SetMemory(offs, &ch, 1);
- } else {
- char ch = breaks_[offs].previousContents;
- debug_log_warning("conn::DebugHost::BreakpointStatusChanged setting"
- " %c to memory\n", ch);
- return SetMemory(offs, &ch, 1);
- }
-}
-
-bool DebugHost::IsRunning() {
- debug_log_info("DebugHost::IsRunning");
- return flags_.GetFlags() & DHF_RUNNING;
-}
-
-void DebugHost::SetOutputAsync(DHAsyncStr reply, void *obj) {
- outputFunc_ = reply;
- outputObj_ = obj;
-}
-
-void DebugHost::SetStopAsync(DHAsync reply, void *obj) {
- debug_log_info("DebugHost::SetStopAsync stopFunc=%p obj=%p\n", reply, obj);
- stopFunc_ = reply;
- stopObj_ = obj;
-}
-
-DebugHost::DHResult DebugHost::RequestStepBackground() {
- DebugPipe::DPResult res;
- DebugPacket outPkt;
-
- debug_log_info("DebugHost::RequestStepBackground");
- if (NULL == pipe_)
- return DHR_LOST;
-
- outPkt.AddString("s");
-
- // Turn off sequences for out of sequence requests
- uint32_t flags = pipe_->GetFlagsMasked(DebugPipe::DPF_USE_SEQ);
- pipe_->SetFlagsMasked(0, DebugPipe::DPF_USE_SEQ);
- res = pipe_->SendPacket(&outPkt);
- pipe_->SetFlagsMasked(flags, DebugPipe::DPF_USE_SEQ);
-
- if (res == DebugPipe::DPR_ERROR)
- return DHR_LOST;
-
- if (res == DebugPipe::DPR_NO_DATA)
- return DHR_TIMEOUT;
-
- return DHR_OK;
-}
-

Powered by Google App Engine
This is Rietveld 408576698