I got this error quite often. I'm pointed always to AwUser.pas. Below you will find MadExcept log. I hope it will be useful.
What I was doing:
My app is periodically scanning serial network in separate thread, so all connected devices can request some actions. If a device requests something, there is usually some communication between PC and device using own protocol.
As I see from report, my app just wrote something to serial port, and then waited until sending is complete (doing sleep(1)). Before loop I set up stOutBuffUsed trigger, so I can break the loop if sending finish earlier. Code:
Sending := true; // will be set up to false if stOutBuffUsed triggers
MyHandle := SerialPort.AddStatusTrigger(stOutBuffUsed);
SerialPort.SetStatusTrigger(MyHandle, 0, True);
QueryPerformanceCounter(start);
SerialPort.Output := packetBody;
repeat
sleep(1);
QueryPerformanceCounter(tmp);
if (tmp > start)
then dif := (tmp - start) / (highresCounter / 1000.0)
else dif := ((High(Int64) - start) + tmp) / (highresCounter / 1000.0);
until (Sending = False) or (dif > WAIT_TIMEOUT); //Timeout ie 3sec.
SerialPort.RemoveTrigger(MyHandle);
BugReport from MadExcept