File tree Expand file tree Collapse file tree 4 files changed +20
-10
lines changed Expand file tree Collapse file tree 4 files changed +20
-10
lines changed Original file line number Diff line number Diff line change 1
1
#include " console.h"
2
+ #include " threading.h"
3
+
4
+ static char msg[66000 ] = " " ;
2
5
3
6
void dputs (const char * text)
4
7
{
@@ -7,9 +10,9 @@ void dputs(const char* text)
7
10
8
11
void dprintf (const char * format, ...)
9
12
{
13
+ CriticalSectionLocker locker (LockDprintf);
10
14
va_list args;
11
15
va_start (args, format);
12
- Memory<char *> msg (66000 );
13
- vsnprintf (msg, msg.size (), format, args);
16
+ vsnprintf (msg, sizeof (msg), format, args);
14
17
GuiAddLogMessage (msg);
15
18
}
Original file line number Diff line number Diff line change @@ -28,10 +28,10 @@ bool waitislocked(WAIT_ID id)
28
28
return waitarray[id];
29
29
}
30
30
31
- static CRITICAL_SECTION locks[LockLast] = {};
32
- static bool bInitDone = false ;
31
+ CRITICAL_SECTION CriticalSectionLocker:: locks[LockLast] = {};
32
+ bool CriticalSectionLocker:: bInitDone = false ;
33
33
34
- static void CriticalSectionInitializeLocks ()
34
+ void CriticalSectionLocker::Initialize ()
35
35
{
36
36
if (bInitDone)
37
37
return ;
@@ -40,18 +40,21 @@ static void CriticalSectionInitializeLocks()
40
40
bInitDone = true ;
41
41
}
42
42
43
- void CriticalSectionDeleteLocks ()
43
+ void CriticalSectionLocker::Deinitialize ()
44
44
{
45
45
if (!bInitDone)
46
46
return ;
47
47
for (int i = 0 ; i < LockLast; i++)
48
+ {
49
+ EnterCriticalSection (&locks[i]); // obtain ownership
48
50
DeleteCriticalSection (&locks[i]);
51
+ }
49
52
bInitDone = false ;
50
53
}
51
54
52
55
CriticalSectionLocker::CriticalSectionLocker (CriticalSectionLock lock)
53
56
{
54
- CriticalSectionInitializeLocks (); // initialize critical sections
57
+ Initialize (); // initialize critical sections
55
58
gLock = lock;
56
59
57
60
EnterCriticalSection (&locks[gLock ]);
Original file line number Diff line number Diff line change @@ -31,20 +31,24 @@ enum CriticalSectionLock
31
31
LockBreakpoints,
32
32
LockPatches,
33
33
LockThreads,
34
+ LockDprintf,
34
35
LockLast
35
36
};
36
37
37
- void CriticalSectionDeleteLocks ();
38
-
39
38
class CriticalSectionLocker
40
39
{
41
40
public:
41
+ static void Deinitialize ();
42
42
CriticalSectionLocker (CriticalSectionLock lock);
43
43
~CriticalSectionLocker ();
44
44
void unlock ();
45
45
void relock ();
46
46
47
47
private:
48
+ static void Initialize ();
49
+ static bool bInitDone;
50
+ static CRITICAL_SECTION locks[LockLast];
51
+
48
52
CriticalSectionLock gLock ;
49
53
bool Locked;
50
54
};
Original file line number Diff line number Diff line change @@ -312,7 +312,7 @@ extern "C" DLL_EXPORT void _dbg_dbgexitsignal()
312
312
}
313
313
else
314
314
DeleteFileA (alloctrace);
315
- CriticalSectionDeleteLocks ();
315
+ CriticalSectionLocker::Deinitialize ();
316
316
}
317
317
318
318
extern " C" DLL_EXPORT bool _dbg_dbgcmddirectexec (const char * cmd)
You can’t perform that action at this time.
0 commit comments