diff --git a/libpolyml/memmgr.cpp b/libpolyml/memmgr.cpp
index 37abbf56..49e88fb6 100644
--- a/libpolyml/memmgr.cpp
+++ b/libpolyml/memmgr.cpp
@@ -696,7 +696,9 @@ PolyWord *MemMgr::AllocHeapSpace(uintptr_t minWords, uintptr_t &maxWords, bool d
     if (minWords > defaultSpaceSize && minWords < spaceBeforeMinorGC)
         RemoveExcessAllocation(spaceBeforeMinorGC - minWords);
 
-    if (currentAllocSpace/* + minWords */ < spaceBeforeMinorGC)
+    // If the GC finished with any space at all, force the allocation the GC was requested
+    // for to succeed
+    if ((!doAllocation && spaceBeforeMinorGC) || currentAllocSpace/* + minWords */ < spaceBeforeMinorGC)
     {
         // i.e. the current allocation space is less than the space allowed for the minor GC
         // but it may be that allocating this object will take us over the limit.  We allow
