about summary refs log tree commit homepage
path: root/ext/mwrap/mwrap_core.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mwrap/mwrap_core.h')
-rw-r--r--ext/mwrap/mwrap_core.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/ext/mwrap/mwrap_core.h b/ext/mwrap/mwrap_core.h
index 48669d5..827ee7b 100644
--- a/ext/mwrap/mwrap_core.h
+++ b/ext/mwrap/mwrap_core.h
@@ -85,6 +85,7 @@ static size_t *root_locating; /* determines if PL_curcop is our thread */
 #if MWRAP_RUBY
 static void mw_ruby_set_generation(size_t *, size_t);
 #        define SET_GENERATION(gen, size) mw_ruby_set_generation(gen, size)
+static size_t last_gc_count; /* for httpd which runs in a non-GVL thread */
 #endif /* MWRAP_RUBY */
 
 #ifndef SET_GENERATION /* C-only builds w/o Perl|Ruby */
@@ -1074,8 +1075,10 @@ static void mw_ruby_set_generation(size_t *gen, size_t size)
 {
         if (rb_gc_count) {
                 uatomic_add_return(&total_bytes_inc, size);
-                if (has_ec_p())
+                if (has_ec_p()) {
                         *gen = rb_gc_count();
+                        uatomic_set(&last_gc_count, *gen);
+                }
         } else {
                 *gen = uatomic_add_return(&total_bytes_inc, size);
         }