Ich weiss jetzt nicht in wieweit ich durch den folgenden Vorschlag in Euer Design eingreife.

So wie es aussieht, werden mit jedem Aufruf der Prozedur aus Service-Program C statische Deskriptoren gebildet, die den Speicher blockieren und bei Beenden der Prozedur nicht freigeben.

*INLR = *ON wird auch nicht helfen, da der Speicher in einer ILE-Umgebung dadurch nicht freigegeben, sondern reserviert bleibt bis die Aktivierungsgruppe, in der das Programm oder Service-Programm läuft beendet wird.

Ich würde versuchen das Service-Programm C in einer benannten Aktivierungsgruppe (z.B. SrvPgm-Name = Aktivierungsgruppe) laufen lassen und nach jedem Aufruf diese Aktivierungsgruppe explizit mit dem CL-Befehl RCLACTGRP(SrvPgm) schließen. Dadruch müsste der Speicher freigegeben und die Deskriptoren wieder gelöscht werden. Wie sich das Ganze performancemäßig verhält bleibt auszuprobieren.

Eine andere Frage, die sich stellt:
Ist der Aufruf des APIs unbedigt erforderlich oder kann die Prozedur im 2.Service-Programm, die den Prozedur-Pointer zurückgibt nicht direkt aufgerufen werden?

Birgitta