xref: /haiku/src/kits/debugger/jobs/WriteCoreFileJob.cpp (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
1 /*
2  * Copyright 2016, Rene Gollent, rene@gollent.com.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #include "Jobs.h"
7 
8 #include <Path.h>
9 
10 #include <AutoLocker.h>
11 
12 #include "DebuggerInterface.h"
13 #include "Team.h"
14 
15 
16 
17 WriteCoreFileJob::WriteCoreFileJob(Team* team,
18 	DebuggerInterface* interface, const entry_ref& path)
19 	:
20 	fKey(&path, JOB_TYPE_WRITE_CORE_FILE),
21 	fTeam(team),
22 	fDebuggerInterface(interface),
23 	fTargetPath(path)
24 {
25 	fDebuggerInterface->AcquireReference();
26 }
27 
28 
29 WriteCoreFileJob::~WriteCoreFileJob()
30 {
31 	fDebuggerInterface->AcquireReference();
32 }
33 
34 
35 const JobKey&
36 WriteCoreFileJob::Key() const
37 {
38 	return fKey;
39 }
40 
41 
42 status_t
43 WriteCoreFileJob::Do()
44 {
45 	BPath path(&fTargetPath);
46 	status_t error = path.InitCheck();
47 	if (error != B_OK)
48 		return error;
49 
50 	error = fDebuggerInterface->WriteCoreFile(path.Path());
51 	if (error != B_OK)
52 		return error;
53 
54 	AutoLocker< ::Team> teamLocker(fTeam);
55 	fTeam->NotifyCoreFileChanged(path.Path());
56 
57 	return B_OK;
58 }
59