From 1ae6ddc0369982f0d7b6c9b2e9b62a750f99c7ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Albert=20Gr=C3=A4f?= <aggraef@gmail.com>
Date: Sat, 18 Feb 2017 19:10:41 +0100
Subject: [PATCH] Backport rev. 5a58ca2b by msp from vanilla: patch 1990599 -
 allow recursive calls of new_anything().

---
 pd/src/m_class.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/pd/src/m_class.c b/pd/src/m_class.c
index 85ca52349..f5926e98e 100644
--- a/pd/src/m_class.c
+++ b/pd/src/m_class.c
@@ -599,6 +599,7 @@ static t_symbol *addfileextent(t_symbol *s)
     return (gensym(namebuf));
 }
 
+#define MAXOBJDEPTH 1000
 static int tryingalready;
 
 void canvas_popabstraction(t_canvas *x);
@@ -613,14 +614,17 @@ int pd_setloadingabstraction(t_symbol *sym);
     doesn't know.  Pd tries to load it as an extern, then as an abstraction. */
 void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv)
 {
-    if (tryingalready) return;
+    if (tryingalready>MAXOBJDEPTH){
+      error("maximum object loading depth %d reached", MAXOBJDEPTH);
+      return;
+    }
     newest = 0;
     class_loadsym = s;
     if (sys_load_lib(canvas_getcurrent(), s->s_name))
     {
-        tryingalready = 1;
+        tryingalready++;
         typedmess(dummy, s, argc, argv);
-        tryingalready = 0;
+        tryingalready--;
         return;
     }
     class_loadsym = 0;
-- 
GitLab