# HG changeset patch # User jbe # Date 1426993733 -3600 # Node ID a9ad9186a922e6b0136b42faf70ae186377a0dfa # Parent fc2aba7d5db916bbede72e1d79fd368c3c52a158 Adjusted env/trace/__init.lua to deal with forking diff -r fc2aba7d5db9 -r a9ad9186a922 framework/env/trace/__init.lua --- a/framework/env/trace/__init.lua Sun Mar 22 02:10:57 2015 +0100 +++ b/framework/env/trace/__init.lua Sun Mar 22 04:08:53 2015 +0100 @@ -1,3 +1,28 @@ -trace._disabled = false -trace._tree = { type = "root", start_hires_time = extos.monotonic_hires_time() } -trace._stack = { trace._tree } +local seq = 0 +local saved_tree + +request.for_each(function() + if seq == 0 then + -- prepare for configuration/initialization phase + trace._disabled = false + trace._tree = { type = "root", start_hires_time = extos.monotonic_hires_time() } + trace._stack = { trace._tree } + seq = 1 + elseif seq == 1 then + -- save current state before processing first request + if not (trace._stack[1] == trace._tree and trace._stack[2] == nil) then + error("Trace stack unbalanced after initialization") + end + if not trace._disabled then + saved_tree = table.new(trace._tree) + end + seq = 2 + elseif saved_tree then + -- restore state before processing next request + if saved_tree then + trace._disabled = false + trace._tree = table.new(saved_tree) + trace._stack = { trace._tree } + end + end +end)