From e4d1d82ea767142c09b571201ce108370bb8c17c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 15 Aug 2021 15:24:23 +0200 Subject: [PATCH] Fix rt-safe PRNG (seed once, not every call) --- libs/ardour/ardour/triggerbox.h | 3 +++ libs/ardour/triggerbox.cc | 8 +++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libs/ardour/ardour/triggerbox.h b/libs/ardour/ardour/triggerbox.h index ddf56345e0..c804d41e49 100644 --- a/libs/ardour/ardour/triggerbox.h +++ b/libs/ardour/ardour/triggerbox.h @@ -27,6 +27,7 @@ #include +#include "pbd/pcg_rand.h" #include "pbd/stateful.h" #include "pbd/ringbuffer.h" @@ -245,6 +246,8 @@ class LIBARDOUR_API TriggerBox : public Processor Glib::Threads::RWLock trigger_lock; /* protects all_triggers */ Triggers all_triggers; + PBD::PCGRand _pcg; + /* These three are accessed (read/write) only from process() context */ void drop_triggers (); diff --git a/libs/ardour/triggerbox.cc b/libs/ardour/triggerbox.cc index ea3c728453..1a6bc20b65 100644 --- a/libs/ardour/triggerbox.cc +++ b/libs/ardour/triggerbox.cc @@ -8,7 +8,6 @@ #include "pbd/basename.h" #include "pbd/compose.h" #include "pbd/failed_constructor.h" -#include "pbd/pcg_rand.h" #include "temporal/tempo.h" @@ -990,8 +989,7 @@ TriggerBox::set_next_trigger (size_t current) } int which_follow_action; - PCGRand pcg; - int r = pcg.rand (0, 101); + int r = _pcg.rand (0, 101); if (r <= all_triggers[current]->follow_action_probability()) { which_follow_action = 0; @@ -1079,7 +1077,7 @@ TriggerBox::set_next_trigger (size_t current) case Trigger::AnyTrigger: while (true) { - n = pcg.rand (0, all_triggers.size() + 1); + n = _pcg.rand (0, all_triggers.size() + 1); if (!all_triggers[n]->region()) { continue; } @@ -1093,7 +1091,7 @@ TriggerBox::set_next_trigger (size_t current) case Trigger::OtherTrigger: while (true) { - n = pcg.rand (0, all_triggers.size() + 1); + n = _pcg.rand (0, all_triggers.size() + 1); if ((size_t) n == current) { continue; }