Eine Applikation mit mehreren Rendering-Threads schmiert auf einer Multiprozessor-Maschine nach einiger Zeit ab. Manchmal mit einer Exception, manchmal verschwindet sie einfach, mal bleibt sie hängen. Wenn man die Applikation auf einen Prozessor zwingt (Affinity), dann läuft sie ohne Probleme bis zum jüngsten Tag. Der Code in den Threads an sich scheint wirklich korrekt zu sein, es wird nur auf interne, direkt von TObject abgeleitete Objekte zugegriffen, es wird nur lesend auf externe Arrays zugegriffen, kein Synchronize aufgerufen und ordentlich mit Waitfor auf sie gewartet, müsste also butterweich laufen. Das Erzeugen und Freigaben übernimmt der VCL-Thread. Auf jeden Fall ist nach ein paar Minuten hoher Last Schluss.
Jetzt habe ich den Heapmanager durch RecyclerMM ersetzt (
glscene.sourceforge.net/RecyclerMM.htm) und alle Probleme sind verschwunden, läuft jetzt schon zig Stunden durch.
Die Frage jetzt: Race-Conditions sind eigentlich ziemlich unwahrscheinlich. Ist da vielleicht ein Bug im GetMem/FreeMem (D3) ?