From 7dc74da5505399d289249f54ddba5d582391a3ea Mon Sep 17 00:00:00 2001
From: Marcus Comstedt <marcus@mc.pp.se>
Date: Sun, 5 Aug 2018 11:45:13 +0200
Subject: [PATCH] Thread.ResourceCountKey: Make destruct immediate

---
 lib/modules/Thread.pmod |  3 +++
 src/builtin.cmod        | 13 +++++++++++++
 src/program.c           |  6 +++---
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/lib/modules/Thread.pmod b/lib/modules/Thread.pmod
index 5969c8aadf..06c5052a97 100644
--- a/lib/modules/Thread.pmod
+++ b/lib/modules/Thread.pmod
@@ -879,6 +879,9 @@ optional class Farm
 //!   @[ResourceCount], @[MutexKey]
 //!
 optional class ResourceCountKey {
+
+  private inherit __builtin.DestructImmediate;
+
   /*semi*/private ResourceCount parent;
 
   /*semi*/private void create(ResourceCount _parent) {
diff --git a/src/builtin.cmod b/src/builtin.cmod
index fd6fc59ace..eb9bfdd12c 100644
--- a/src/builtin.cmod
+++ b/src/builtin.cmod
@@ -4581,6 +4581,19 @@ PIKECLASS Null
   }
 }
 
+/*! @endclass
+ */
+
+/*! @class DestructImmediate
+ *! An empty class that can be intherited to get the PROGRAM_DESTRUCT_IMMEDIATE
+ *! flag set.
+ */
+
+PIKECLASS DestructImmediate
+  program_flags PROGRAM_DESTRUCT_IMMEDIATE;
+{
+}
+
 /*! @endclass
  */
 
diff --git a/src/program.c b/src/program.c
index 56b84b704f..470d57bb92 100644
--- a/src/program.c
+++ b/src/program.c
@@ -4820,10 +4820,10 @@ void lower_inherit(struct program *p,
     return;
   }
 
-  /* Propagate the HAS_C_METHODS and CLEAR_STORAGE flags. */
-  if (p->flags & (PROGRAM_HAS_C_METHODS|PROGRAM_CLEAR_STORAGE)) {
+  /* Propagate the HAS_C_METHODS, CLEAR_STORAGE and DESTRUCT_IMMEDIATE flags. */
+  if (p->flags & (PROGRAM_HAS_C_METHODS|PROGRAM_CLEAR_STORAGE|PROGRAM_DESTRUCT_IMMEDIATE)) {
     Pike_compiler->new_program->flags |=
-      (p->flags & (PROGRAM_HAS_C_METHODS|PROGRAM_CLEAR_STORAGE));
+      (p->flags & (PROGRAM_HAS_C_METHODS|PROGRAM_CLEAR_STORAGE|PROGRAM_DESTRUCT_IMMEDIATE));
   }
 
  /* parent offset was increased by 42 for above test.. */
-- 
GitLab