xref: /haiku/headers/private/debug/DebugLooper.h (revision 99d027cd0238c1d86da86d7c3f4200509ccc61a6)
1 /*
2  * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _DEBUG_LOOPER_H
6 #define _DEBUG_LOOPER_H
7 
8 
9 #include <Locker.h>
10 
11 #include <ObjectList.h>
12 
13 
14 class BDebugMessageHandler;
15 class BTeamDebugger;
16 
17 
18 class BDebugLooper {
19 public:
20 								BDebugLooper();
21 	virtual						~BDebugLooper();
22 
23 			status_t			Init();
24 
25 			thread_id			Run(bool spawnThread);
26 			void				Quit();
27 
28 			status_t			AddTeamDebugger(BTeamDebugger* debugger,
29 									BDebugMessageHandler* handler);
30 			bool				RemoveTeamDebugger(BTeamDebugger* debugger);
31 			bool				RemoveTeamDebugger(team_id team);
32 
33 private:
34 			struct Debugger;
35 
36 			struct Job;
37 			struct JobList;
38 			struct AddDebuggerJob;
39 			struct RemoveDebuggerJob;
40 
41 			friend struct AddDebuggerJob;
42 			friend struct RemoveDebuggerJob;
43 
44 			typedef BObjectList<Debugger> DebuggerList;
45 
46 private:
47 	static	status_t			_MessageLoopEntry(void* data);
48 			status_t			_MessageLoop();
49 
50 			status_t			_DoJob(Job* job);
51 			void				_Notify();
52 
53 private:
54 			BLocker				fLock;
55 			thread_id			fThread;
56 			bool				fOwnsThread;
57 			bool				fTerminating;
58 			bool				fNotified;
59 			JobList*			fJobs;
60 			sem_id				fEventSemaphore;
61 			DebuggerList		fDebuggers;
62 };
63 
64 
65 #endif	// _DEBUG_LOOPER_H
66