]> git.mxchange.org Git - simgear.git/commitdiff
Reset: Nasal additions to force GC, clear saved refs.
authorJames Turner <zakalawe@mac.com>
Sun, 6 Oct 2013 17:11:50 +0000 (19:11 +0200)
committerJames Turner <zakalawe@mac.com>
Wed, 9 Oct 2013 07:59:50 +0000 (09:59 +0200)
simgear/nasal/code.c
simgear/nasal/gc.c
simgear/nasal/nasal.h

index 5601b074d663e9e6eac444f6bfb6b76e946bc952..0ce9b0537f447b0dc70b6172403a0b08a113d950 100644 (file)
@@ -765,6 +765,14 @@ void naSave(naContext ctx, naRef obj)
     naVec_append(globals->save, obj);
 }
 
+void naClearSaved()
+{
+    naContext c;
+    c = naNewContext();
+    globals->save = naNewVector(c);
+    naFreeContext(c);   
+}
+
 int naStackDepth(naContext ctx)
 {
     return ctx ? ctx->fTop + naStackDepth(ctx->callChild): 0;
index 9773c795237c6e4ae5bc0a565490bcbf878a9444..c3f1e66020c70a491ef5c6423e55e16521b93eab 100644 (file)
@@ -118,6 +118,15 @@ static void bottleneck()
     }
 }
 
+void naGC()
+{
+    LOCK();
+    globals->needGC = 1;
+    bottleneck();
+    UNLOCK();
+    naCheckBottleneck();
+}
+
 void naCheckBottleneck()
 {
     if(globals->bottleneck) { LOCK(); bottleneck(); UNLOCK(); }
index db7354eab327e6634ca581d91bcf5a9c00464672..e57c856b7e65a67cee00211e0b48f573c739625c 100644 (file)
@@ -42,10 +42,16 @@ naContext naSubContext(naContext super);
 void naSetUserData(naContext c, void* p);
 void* naGetUserData(naContext c) GCC_PURE;
 
+// run GC now (may block)
+void naGC();
+
 // "Save" this object in the context, preventing it (and objects
 // referenced by it) from being garbage collected.
 void naSave(naContext ctx, naRef obj);
 
+// Drop all saved references
+void naClearSaved();
+
 // Similar, but the object is automatically released when the
 // context next runs native bytecode.  Useful for saving off C-space
 // temporaries to protect them before passing back into a naCall.