TMS Components verwendet meines Wissens kein TMonitor. Allerdings wird es in XE4 an deutlich mehr Stellen in der
VCL verwendet als noch in D2009 (sogar in
BDE.DBTables). Es kann also durchaus sein, daß es sich um ein ganz normales
RTL/
VCL-Objekt handelt, daß in XE4 jetzt den Monitor-Support nutzt. Wenn du eine dieser Instanzen nicht freigibst, dann kann genau dieses Verhalten auftreten.
Du kannst ja mal probeweise den MonitorSupport überwachen, in dem du folgende
Unit einbindest:
Delphi-Quellcode:
unit WrapMonitorSupport;
interface
implementation
var
SaveMonitorSupport: PMonitorSupport;
function NewSyncObj: Pointer;
begin
result := SaveMonitorSupport.NewSyncObject;
end;
procedure FreeSyncObj(SyncObject: Pointer);
begin
SaveMonitorSupport.FreeSyncObject(SyncObject);
end;
function NewWaitObj: Pointer;
begin
result := SaveMonitorSupport.NewWaitObject;
end;
procedure FreeWaitObj(WaitObject: Pointer);
begin
SaveMonitorSupport.FreeWaitObject(WaitObject);
end;
function WaitOrSignalObj(SignalObject, WaitObject: Pointer; Timeout: Cardinal): Cardinal;
begin
result := SaveMonitorSupport.WaitOrSignalObject(SignalObject, WaitObject, Timeout);
end;
const
MonitorSupport: TMonitorSupport = (
NewSyncObject: NewSyncObj;
FreeSyncObject: FreeSyncObj;
NewWaitObject: NewWaitObj;
FreeWaitObject: FreeWaitObj;
WaitOrSignalObject: WaitOrSignalObj;
);
initialization
SaveMonitorSupport := System.MonitorSupport;
System.MonitorSupport := @MonitorSupport;
end.
Einfach BreakPoints in die Wrapper setzen und schauen, wer die aufruft.