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