Ok I've figured out whats causing the NULL events.
Anyway heres what I did to debug. First, added some debug statements
Code: Select all
VOID AddEvent(DWORD Event, PCHAR FirstArg, ...)
.
.
.
if (!gEventStack) {
gEventStack = pEvent;
sprintf(Buffer,"START = 0x%p",pEvent);
WriteChatColor(Buffer,USERCOLOR_DEFAULT);
} else {
PEVENTSTACK pTemp = NULL;
for (pTemp = gEventStack;pTemp->pNext;pTemp=pTemp->pNext) {
sprintf(Buffer,"WTF = 0x%p",pTemp);
WriteChatColor(Buffer,USERCOLOR_DEFAULT);
}
sprintf(Buffer,"END = 0x%p",pEvent);
WriteChatColor(Buffer,USERCOLOR_DEFAULT);
pTemp->pNext = pEvent;
}
and
Code: Select all
VOID DoEvents(PSPAWNINFO pChar, PCHAR szLine)
.
.
.
if (!pEventToRun || (SpecificEvent[0] && !Found)) return;
sprintf(Buffer,"DoEvents: Running event %d\\%s = 0x%p",pEventToRun->Type,(pEventToRun->pEventList)?pEventToRun->pEventList->szName:"NULL",pEventToRun);
WriteChatColor(Buffer,USERCOLOR_DEFAULT);
DebugSpewNoFile("DoEvents: Running event %d\\%s = 0x%p",pEventToRun->Type,(pEventToRun->pEventList)?pEventToRun->pEventList->szName:"NULL",pEventToRun);
pStack = (PMACROSTACK)malloc(sizeof(MACROSTACK));
gMacroStack->Location = gMacroStack->Location->pPrev;
Then Ran this macro
Code: Select all
Sub Main
/declare t1 timer outer
/declare t2 timer outer
/declare t3 timer outer
/declare t4 timer outer
/declare t5 timer outer
/declare t6 timer outer
/declare t7 timer outer
/declare t8 timer outer
/declare t9 timer outer
/declare t0 timer outer
/varset t1 10
/varset t2 10
/varset t3 10
/varset t4 10
/varset t5 10
/varset t6 10
/varset t7 10
/varset t8 10
/varset t9 10
/varset t0 60000
:Loop
/doevent Timer
/goto :Loop
/return
Sub Event_Timer(Timer,Value)
/echo ${Timer} ${Value} - ${t0}
/varset ${Timer} 20
/return
Then here is the Log File
Code: Select all
[Tue May 11 03:27:24 2004] START = 0x0FA9E908
[Tue May 11 03:27:24 2004] END = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] END = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] END = 0x0FACC220
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] END = 0x0FACE288
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FACC220
[Tue May 11 03:27:24 2004] END = 0x0FAD02F0
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FACC220
[Tue May 11 03:27:24 2004] WTF = 0x0FACE288
[Tue May 11 03:27:24 2004] END = 0x0FAD2358
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FACC220
[Tue May 11 03:27:24 2004] WTF = 0x0FACE288
[Tue May 11 03:27:24 2004] WTF = 0x0FAD02F0
[Tue May 11 03:27:24 2004] END = 0x0FAD43C0
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FACC220
[Tue May 11 03:27:24 2004] WTF = 0x0FACE288
[Tue May 11 03:27:24 2004] WTF = 0x0FAD02F0
[Tue May 11 03:27:24 2004] WTF = 0x0FAD2358
[Tue May 11 03:27:24 2004] END = 0x0FAD6428
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FA9E908
[Tue May 11 03:27:24 2004] [MQ2] t9 10 - 59990
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FA9E958
[Tue May 11 03:27:24 2004] [MQ2] t8 10 - 59990
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:24 2004] [MQ2] t7 10 - 59989
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:24 2004] [MQ2] t6 10 - 59989
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FACE288
[Tue May 11 03:27:24 2004] [MQ2] t5 10 - 59988
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FAD02F0
[Tue May 11 03:27:24 2004] [MQ2] t4 10 - 59988
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FAD2358
[Tue May 11 03:27:24 2004] [MQ2] t3 10 - 59988
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FAD43C0
[Tue May 11 03:27:24 2004] [MQ2] t2 10 - 59987
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FAD6428
[Tue May 11 03:27:24 2004] [MQ2] t1 10 - 59987
[Tue May 11 03:27:26 2004] START = 0x0FACC220
[Tue May 11 03:27:26 2004] END = 0x0FA9E970
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:26 2004] [MQ2] t9 20 - 59970
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:26 2004] [MQ2] t8 20 - 59970
[Tue May 11 03:27:26 2004] START = 0x0FA9E970
[Tue May 11 03:27:26 2004] END = 0x0FACC220
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:26 2004] [MQ2] t7 20 - 59969
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:26 2004] START = 0x0FACC220
[Tue May 11 03:27:26 2004] END = 0x0FA9E970
[Tue May 11 03:27:26 2004] WTF = 0x0FACC220
[Tue May 11 03:27:26 2004] END = 0x0FA9E958
[Tue May 11 03:27:26 2004] [MQ2] t6 20 - 59968
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:26 2004] [MQ2] NULL NULL - 59968
[Tue May 11 03:27:26 2004] /varset failed, variable 'NULL' not found
[Tue May 11 03:27:26 2004] test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
[Tue May 11 03:27:26 2004] test.mac@28 (Main): :Loop
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:26 2004] END = 0x0FA9E970
[Tue May 11 03:27:26 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:26 2004] END = 0x0FACC220
[Tue May 11 03:27:26 2004] [MQ2] t4 20 - 59967
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E958
[Tue May 11 03:27:26 2004] [MQ2] t3 20 - 59967
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:26 2004] [MQ2] NULL NULL - 59967
[Tue May 11 03:27:26 2004] /varset failed, variable 'NULL' not found
[Tue May 11 03:27:26 2004] test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
[Tue May 11 03:27:26 2004] test.mac@28 (Main): :Loop
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:26 2004] [MQ2] t1 20 - 59966
[Tue May 11 03:27:28 2004] START = 0x0FACC220
[Tue May 11 03:27:28 2004] END = 0x0FA9E970
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:28 2004] [MQ2] t9 20 - 59950
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:28 2004] [MQ2] t8 20 - 59950
[Tue May 11 03:27:28 2004] START = 0x0FA9E970
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:28 2004] [MQ2] t7 20 - 59949
[Tue May 11 03:27:28 2004] START = 0x0FA9E970
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:28 2004] [MQ2] t6 20 - 59948
[Tue May 11 03:27:28 2004] START = 0x0FA9E970
[Tue May 11 03:27:28 2004] END = 0x0FACC220
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:28 2004] [MQ2] t4 20 - 59947
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:28 2004] [MQ2] t3 20 - 59947
[Tue May 11 03:27:28 2004] START = 0x0FACC220
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:28 2004] [MQ2] t1 20 - 59946
[Tue May 11 03:27:30 2004] START = 0x0FACC220
[Tue May 11 03:27:30 2004] END = 0x0FA9E970
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:30 2004] [MQ2] t9 20 - 59930
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:30 2004] [MQ2] t8 20 - 59930
[Tue May 11 03:27:30 2004] START = 0x0FA9E970
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:30 2004] [MQ2] t7 20 - 59929
[Tue May 11 03:27:30 2004] START = 0x0FA9E970
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:30 2004] [MQ2] t6 20 - 59928
[Tue May 11 03:27:30 2004] START = 0x0FA9E970
[Tue May 11 03:27:30 2004] END = 0x0FACC220
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:30 2004] [MQ2] t4 20 - 59927
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:30 2004] START = 0x0FACC220
[Tue May 11 03:27:30 2004] [MQ2] t3 20 - 59926
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:30 2004] [MQ2] NULL NULL - 59926
[Tue May 11 03:27:30 2004] /varset failed, variable 'NULL' not found
[Tue May 11 03:27:30 2004] test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
[Tue May 11 03:27:30 2004] test.mac@28 (Main): :Loop
[Tue May 11 03:27:32 2004] START = 0x0FACC220
[Tue May 11 03:27:32 2004] END = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:32 2004] [MQ2] t9 20 - 59910
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t8 20 - 59910
[Tue May 11 03:27:32 2004] START = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t7 20 - 59909
[Tue May 11 03:27:32 2004] START = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t6 20 - 59908
[Tue May 11 03:27:32 2004] START = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t4 20 - 59907
[Tue May 11 03:27:32 2004] START = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t3 20 - 59906
[Tue May 11 03:27:34 2004] START = 0x0FA9E970
[Tue May 11 03:27:34 2004] END = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:34 2004] [MQ2] t9 20 - 59890
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t8 20 - 59890
[Tue May 11 03:27:34 2004] START = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t7 20 - 59889
[Tue May 11 03:27:34 2004] START = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t6 20 - 59888
[Tue May 11 03:27:34 2004] START = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t4 20 - 59887
[Tue May 11 03:27:34 2004] START = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t3 20 - 59886
[Tue May 11 03:27:36 2004] START = 0x0FACC220
[Tue May 11 03:27:36 2004] END = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:36 2004] [MQ2] t9 20 - 59870
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t8 20 - 59870
[Tue May 11 03:27:36 2004] START = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t7 20 - 59869
[Tue May 11 03:27:36 2004] START = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t6 20 - 59868
[Tue May 11 03:27:36 2004] START = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t4 20 - 59867
[Tue May 11 03:27:36 2004] START = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t3 20 - 59866
[Tue May 11 03:27:37 2004] The current macro has ended.
[Tue May 11 03:29:00 2004] MQ2 Unloading...
[Tue May 11 03:29:00 2004] MQ2 Unloaded.
So Anyway the upshot of all this is right here.
START = 0x0FA9E970 ---- t7 Gets Adds
END = 0x0FACC220 ---- t6 Gets Adds
DoEvents: Running event 1\NULL = 0x0FA9E970 ---- Run t7
[MQ2] t7 20 - 59969 - t7 runs
DoEvents: Running event 1\NULL = 0x0FACC220 ---- Run t6
START = 0x0FACC220 ---- t5 gets added before t6 runs on the same address ( THIS IS THE TROUBLE MAKER)
END = 0x0FA9E970 ---- t4 gets added
WTF = 0x0FACC220
END = 0x0FA9E958 ---- t3 gets added
[MQ2] t6 20 - 59968 ---- t6 Runs and clears the events
DoEvents: Running event 1\NULL = 0x0FACC220 --- Run t5
[MQ2] NULL NULL - 59968 --- We try the run t5 but the event has been clear, thus NULLS
/varset failed, variable 'NULL' not found
test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
test.mac@28 (Main): :Loop
DoEvents: Running event 1\NULL = 0x0FA9E970 --- Run t4
END = 0x0FA9E970 --- t2 gets added
WTF = 0x0FA9E958
END = 0x0FACC220 --- t1 Gets added
[MQ2] t4 20 - 59967 -- t4 Runs and clears the event that was added on t2
DoEvents: Running event 1\NULL = 0x0FA9E958 --- Run t3
[MQ2] t3 20 - 59967 --- t3 Runs
DoEvents: Running event 1\NULL = 0x0FA9E970 --- Run t2
[MQ2] NULL NULL - 59967 --- Event was clears so we get Nulls
/varset failed, variable 'NULL' not found
test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
test.mac@28 (Main): :Loop
So basically we're adding events to the stack that MQ thinks are done but actually haven't finished running yet, thus they get added to the same address, when The event does run it clear the new event we are interested in so, when they run they return NULLS.
Looks like a side effect of the new turbo code. Should be a pretty easy fix, but I'm not sure which way you guys would want to attack it.