feat(frontends/lean/elaborator): do not populate info_manager during thread finalization
This commit is contained in:
parent
73e5367fb6
commit
d454cc8bcd
3 changed files with 11 additions and 1 deletions
|
|
@ -6,6 +6,7 @@ Author: Leonardo de Moura
|
|||
*/
|
||||
#include <string>
|
||||
#include "util/flet.h"
|
||||
#include "util/thread.h"
|
||||
#include "kernel/find_fn.h"
|
||||
#include "kernel/for_each_fn.h"
|
||||
#include "kernel/replace_fn.h"
|
||||
|
|
@ -119,7 +120,7 @@ elaborator::elaborator(environment const & env, options const & opts, metavar_co
|
|||
|
||||
elaborator::~elaborator() {
|
||||
try {
|
||||
if (m_uses_infom && get_global_info_manager()) {
|
||||
if (m_uses_infom && get_global_info_manager() && !in_thread_finalization()) {
|
||||
m_info.instantiate_mvars(m_ctx.mctx());
|
||||
get_global_info_manager()->merge(m_info);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,9 +31,16 @@ void initialize_thread() {}
|
|||
void finalize_thread() {}
|
||||
#endif
|
||||
|
||||
LEAN_THREAD_VALUE(bool, g_finalizing, false);
|
||||
|
||||
bool in_thread_finalization() {
|
||||
return g_finalizing;
|
||||
}
|
||||
|
||||
typedef std::vector<std::pair<thread_finalizer, void*>> thread_finalizers;
|
||||
|
||||
void run_thread_finalizers_core(thread_finalizers & fns) {
|
||||
g_finalizing = true;
|
||||
unsigned i = fns.size();
|
||||
while (i > 0) {
|
||||
--i;
|
||||
|
|
|
|||
|
|
@ -223,4 +223,6 @@ void register_thread_finalizer(thread_finalizer fn, void * p);
|
|||
void run_thread_finalizers();
|
||||
void run_post_thread_finalizers();
|
||||
void delete_thread_finalizer_manager();
|
||||
|
||||
bool in_thread_finalization();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue