From 691d84e63d06c37f5919e266d9f40707b64530f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Sun, 16 Feb 2020 14:43:26 +0100 Subject: [PATCH] [server] states gc on signal --- src/plugins/server/states.ml | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/plugins/server/states.ml b/src/plugins/server/states.ml index dcc2e97ec4d..cea501c3f14 100644 --- a/src/plugins/server/states.ml +++ b/src/plugins/server/states.ml @@ -109,9 +109,14 @@ let synchronize model = Hashtbl.remove model.projects (Project.get_unique_name p) in Project.register_before_remove_hook cleanup ; Project.register_todo_before_clear cleanup ; + Request.on_signal model.signal + (fun _ -> + model.current <- None ; + Hashtbl.clear model.projects ; + ); end -let current model = +let content model = match model.current with | Some w -> w | None -> @@ -127,16 +132,26 @@ let current model = in model.current <- Some content ; content let reload model = - let m = current model in - m.cleared <- true ; m.updates <- Kmap.empty + let m = content model in + m.cleared <- true ; + m.updates <- Kmap.empty ; + Request.emit model.signal let update model k = - let m = current model in - if not m.cleared then m.updates <- Kmap.add (model.key k) (Add k) m.updates + let m = content model in + if not m.cleared then + begin + m.updates <- Kmap.add (model.key k) (Add k) m.updates ; + Request.emit model.signal ; + end let remove model k = - let m = current model in - if not m.cleared then m.updates <- Kmap.add (model.key k) Remove m.updates + let m = content model in + if not m.cleared then + begin + m.updates <- Kmap.add (model.key k) Remove m.updates ; + Request.emit model.signal ; + end (* -------------------------------------------------------------------------- *) (* --- Fetch Model Updates --- *) @@ -167,7 +182,7 @@ let update_entry buffer cols key = function | Add v -> add_entry buffer cols key v let fetch model n = - let m = current model in + let m = content model in let reload = m.cleared in let buffer = { reload ; -- GitLab