Zum Inhalt springen

4.5.19: loadTCA infinity loop/recursion

Erstellt am 27. Juni 2013 · 2 Antworten · letzte Antwort am 9. Juli 2013

Tags: Frage

Spikx ·

Wir verwenden (in einem Typo3 4.5.19 System) eine eigens programmierte Newsletter Extension, wo einzelne Newsletter mit Artikel befüllt werden können. Die nötigen Tabellen bzw. Objekte dafür sind alle über TCAs abgebildet. Die Newsletter werden daher ganz normal über das Backend gefüllt in einem eigenen Bereich. Dort kann man dann über das von der TCA definierte Formular neue Datensätze erstellen (welche in einem eigenen Systemordner gespeichert sind).

Seit einiger Zeit besteht das Problem, dass das Typo3 PHP script irgendwann unendlich lang läuft beim abspeichern eines Datensatzes. Nach bspw. 10 hintereinander angelegten Datensätzen (manchmal weniger) tut sich beim abspeichern einfach gar nichts mehr. Der Aufruf der typo3/alt_doc.php läuft einfach unendlich lang, bzw. bis zur max_execution_time von PHP. Durch ein wenig debugging haben wir festgestellt, dass irgendwann die Funktion t3lib_div::loadTCA immer und immer wieder aufgerufen wird. Die genaue Aufruf-kette ist

SC_alt_doc::makeEditForm()
-> t3lib_transferData::fetchRecord()
---> t3lib_div::loadTCA()

Also nachdem einmal das t3lib_div::loadTCA() gleich am Beginn der t3lib_transferData::fetchRecord() aufgerufen wird, bleibt das script für immer dort hängen, weil innerhalb der t3lib_div::loadTCA() anscheinend unendlich oft immer wieder die gleichen TCAs geladen werden.

Aber das Ganze passiert erst nach ~10 eingetragenen Datensätzen. Und ab dann immer, bis die Server Session destroyed ist... wir haben momentan echt keinen Plan warum sowas passieren könnte. Evt. hat hier jemand eine Idee?

aemka ·

Wie wäre es wenn ihr erstmal auf 4.5.latest updatet um die Ursache da auszuschließen?

Spikx ·

Es passiert auch in 4.5.27. Wir haben es auch in einem lokalen xampp (Windows) versucht, das selbe Problem tritt auch dort auf. Allerdings scheint es doch keine unendliche Rekursion zu sein. Nach einiger Zeit, innerhalb der max_execution_time geht es dann doch weiter, es dauert nur sehr lange all ~10 mal.

Was ich noch nicht erwähnt hatte: in der Tabelle existieren über 37000 Einträge. Wenn diese Einträge gelöscht werden, tritt das Problem nicht mehr auf. Das Problem tritt auch nicht mehr auf, wenn man den 37000 Einträgen manuell eine andere (x-beliebige) PID zuweist (sodass es für das Typo3 Backend aussieht, als wären gar keine Einträge vorhanden).

Man müsste das evt. noch genauer testen und eine kleinstmögliche Extension schreiben, die das Verhalten unserer Extension simuliert (und eben auch 40000 Testeinträge in der jeweiligen Tabelle machen), um festzustellen ob sich das beliebig reproduzieren lässt.