diff --git a/fortuna.cpp b/fortuna.cpp index c5cb13d..e1f35b7 100644 --- a/fortuna.cpp +++ b/fortuna.cpp @@ -145,7 +145,9 @@ auto Fortuna::seed_file_manager_service() -> void { p_ul.unlock(); auto right_now{fortuna::Util::current_time()}; std::unique_lock mtx_l(mtx); + std::unique_lock a_ul(accu_mtx); SeedFileManager sfm(this->accumulator); + a_ul.unlock(); mtx_l.unlock(); while (true) { diff --git a/fortuna.h b/fortuna.h index f61dfb9..e273c8f 100644 --- a/fortuna.h +++ b/fortuna.h @@ -19,6 +19,7 @@ public: static constexpr const unsigned int reseed_interval{10000}; static constexpr const char num_of_pools{32}; std::mutex mtx; + std::mutex accu_mtx; std::mutex print_mtx; std::thread th_gen; std::thread th_accu; @@ -48,22 +49,22 @@ public: // p. 153 set_reseed_ctr_to_null(); std::unique_lock p_ul(print_mtx); + std::unique_lock a_ul(accu_mtx); try { - std::unique_lock ul(mtx); R.initialize_pools(); - ul.unlock(); + a_ul.unlock(); fmt::print("[i] fortuna: pools initialized\n"); p_ul.unlock(); - ul.lock(); + a_ul.lock(); accumulator.set_gen(R.Gen); - ul.unlock(); + a_ul.unlock(); // FIXME: bogus first reseed here, P_0 definitely hasn't collected // enough entropy by now incr_reseed_ctr(); p_ul.lock(); fmt::print("first reseed\n"); p_ul.unlock(); - ul.lock(); + std::unique_lock ul(mtx); R.Gen.reseed("fortuna"); ul.unlock(); }