Hallo,
schon mal überlegt was ist, wenn der Counter bei 0 angekommen ist, und in der nächsten runde nochmal 1 angezogen wird ?
zB. in der Abfrage ob der counter 0 ist, diesen gleich mit einem neuen Wert vorbelegen.

Warum sich das mit warte() aufhängt kommt daher, da es keine Abbruchbedingung gibt, und es im Prinzip ein Deadlock ist. Wenn warte() einmal aufgerufen wird kommt der nimmer da raus, pro funktionsaufruf wird eine Rücksprungadresse im Speicher hinterlegt, das geht solange gut bis der Speicher voll ist, dann schepperts.