/* * Copyright 2015, Rene Gollent, rene@gollent.com. * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ #include "Jobs.h" #include #include "Architecture.h" #include "CpuState.h" #include "DebuggerInterface.h" #include "TeamTypeInformation.h" #include "Tracing.h" #include "Value.h" #include "ValueLocation.h" #include "ValueNode.h" #include "ValueNodeContainer.h" #include "ValueWriter.h" WriteValueNodeValueJob::WriteValueNodeValueJob( DebuggerInterface* debuggerInterface, Architecture* architecture, CpuState* cpuState, TeamTypeInformation* typeInformation, ValueNode* valueNode, Value* newValue) : fKey(valueNode, JOB_TYPE_WRITE_VALUE_NODE_VALUE), fDebuggerInterface(debuggerInterface), fArchitecture(architecture), fCpuState(cpuState), fTypeInformation(typeInformation), fValueNode(valueNode), fNewValue(newValue) { if (fCpuState != NULL) fCpuState->AcquireReference(); fValueNode->AcquireReference(); fNewValue->AcquireReference(); } WriteValueNodeValueJob::~WriteValueNodeValueJob() { if (fCpuState != NULL) fCpuState->ReleaseReference(); fValueNode->ReleaseReference(); fNewValue->ReleaseReference(); } const JobKey& WriteValueNodeValueJob::Key() const { return fKey; } status_t WriteValueNodeValueJob::Do() { ValueNodeContainer* container = fValueNode->Container(); if (container == NULL) return B_BAD_VALUE; ValueWriter writer(fArchitecture, fDebuggerInterface, fCpuState, -1); BVariant value; fNewValue->ToVariant(value); status_t error = writer.WriteValue(fValueNode->Location(), value); if (error != B_OK) return error; AutoLocker containerLocker(container); fValueNode->SetLocationAndValue(fValueNode->Location(), fNewValue, B_OK); return B_OK; }