⛏️ index : haiku.git

/*
 * Copyright 2015, Rene Gollent, rene@gollent.com.
 * Distributed under the terms of the MIT License.
 */

#include "Jobs.h"

#include "Team.h"
#include "TeamMemory.h"


WriteMemoryJob::WriteMemoryJob(Team* team,
	TeamMemory* teamMemory, target_addr_t address, void* data,
	target_size_t size)
	:
	fKey(data, JOB_TYPE_WRITE_MEMORY),
	fTeam(team),
	fTeamMemory(teamMemory),
	fTargetAddress(address),
	fData(data),
	fSize(size)
{
	fTeamMemory->AcquireReference();
}


WriteMemoryJob::~WriteMemoryJob()
{
	fTeamMemory->ReleaseReference();
}


const JobKey&
WriteMemoryJob::Key() const
{
	return fKey;
}


status_t
WriteMemoryJob::Do()
{
	ssize_t result = fTeamMemory->WriteMemory(fTargetAddress, fData, fSize);
	if (result < 0)
		return result;

	fTeam->NotifyMemoryChanged(fTargetAddress, fSize);

	return B_OK;
}