1
- open Eio.Std
2
-
3
1
(* Ocsigen
4
2
* http://www.ocsigen.org
5
3
* Copyright (C) 2010 Vincent Balat
@@ -29,16 +27,16 @@ module Ocsipersist = struct
29
27
include Eliom_common.Ocsipersist. Polymorphic
30
28
end
31
29
32
- let pers_ref_store = Ocsipersist. open_store " eliom__persistent_refs"
30
+ let pers_ref_store = lazy ( Ocsipersist. open_store " eliom__persistent_refs" )
33
31
34
32
type 'a eref_kind =
35
33
| Req of 'a Polytables .key
36
34
| Sit of 'a Polytables .key
37
35
| Ref of 'a lazy_t ref (* Ocaml reference *)
38
36
| Vol of 'a volatile_table Lazy .t (* Vol. table (group, session, process) *)
39
- | Ocsiper of 'a option Ocsipersist .t Promise .t (* Global persist. table *)
40
- | Ocsiper_sit of 'a Ocsipersist .table Promise .t (* Persist. table for site *)
41
- | Per of 'a persistent_table Promise .t
37
+ | Ocsiper of 'a option Ocsipersist .t Lazy .t (* Global persist. table *)
38
+ | Ocsiper_sit of 'a Ocsipersist .table Lazy .t (* Persist. table for site *)
39
+ | Per of 'a persistent_table Lazy .t
42
40
(* Persist. table for group session or process *)
43
41
44
42
type volatile = [`Volatile ]
@@ -175,18 +173,20 @@ let eref_from_fun_ ~ext ~scope ?secure ?persistent f : 'a eref =
175
173
( f
176
174
, ext
177
175
, Ocsiper
178
- (let store = pers_ref_store in
179
- Ocsipersist. make_persistent ~store ~name ~default: None ) ))
176
+ (lazy
177
+ (let (lazy store) = pers_ref_store in
178
+ Ocsipersist. make_persistent ~store ~name ~default: None )) ))
180
179
| `Site -> (
181
180
match persistent with
182
181
| None -> (Volatile. eref_from_fun_ ~ext ~scope ?secure f :> _ eref)
183
182
| Some name ->
184
183
(* VVV!!! ??? CHECK! *)
185
- f, ext, Ocsiper_sit (Ocsipersist. open_table name))
184
+ f, ext, Ocsiper_sit (lazy ( Ocsipersist. open_table name) ))
186
185
| #Eliom_common. user_scope as scope -> (
187
186
match persistent with
188
187
| None -> (Volatile. eref_from_fun_ ~ext ~scope ?secure f :> _ eref)
189
- | Some name -> f, ext, Per (create_persistent_table ~scope ?secure name))
188
+ | Some name ->
189
+ f, ext, Per (lazy (create_persistent_table ~scope ?secure name)))
190
190
191
191
let eref_from_fun ~scope ?secure ?persistent f : 'a eref =
192
192
eref_from_fun_ ~ext: false ~scope ?secure ?persistent f
@@ -202,23 +202,23 @@ let get_site_id () =
202
202
let get ((f , _ , table ) as eref ) =
203
203
match table with
204
204
| Per t -> (
205
- let t = t in
205
+ let ( lazy t) = t in
206
206
match get_persistent_data ~table: t () with
207
207
| Data d -> d
208
208
| _ ->
209
209
let value = f () in
210
210
set_persistent_data ~table: t value;
211
211
value)
212
212
| Ocsiper r -> (
213
- let r = r in
213
+ let ( lazy r) = r in
214
214
match Ocsipersist. get r with
215
215
| Some v -> v
216
216
| None ->
217
217
let value = f () in
218
218
Ocsipersist. set r (Some value);
219
219
value)
220
220
| Ocsiper_sit t -> (
221
- let t = t in
221
+ let ( lazy t) = t in
222
222
let site_id = get_site_id () in
223
223
try Ocsipersist. find t site_id
224
224
with Not_found ->
@@ -230,13 +230,13 @@ let get ((f, _, table) as eref) =
230
230
let set ((_ , _ , table ) as eref ) value =
231
231
match table with
232
232
| Per t ->
233
- let t = t in
233
+ let ( lazy t) = t in
234
234
set_persistent_data ~table: t value
235
235
| Ocsiper r ->
236
- let r = r in
236
+ let ( lazy r) = r in
237
237
Ocsipersist. set r (Some value)
238
238
| Ocsiper_sit t ->
239
- let t = t in
239
+ let ( lazy t) = t in
240
240
Ocsipersist. add t (get_site_id () ) value
241
241
| _ -> Volatile. set eref value
242
242
@@ -247,13 +247,13 @@ let modify eref f =
247
247
let unset ((_ , _ , table ) as eref ) =
248
248
match table with
249
249
| Per t ->
250
- let t = t in
250
+ let ( lazy t) = t in
251
251
remove_persistent_data ~table: t ()
252
252
| Ocsiper r ->
253
- let r = r in
253
+ let ( lazy r) = r in
254
254
Ocsipersist. set r None
255
255
| Ocsiper_sit t ->
256
- let t = t in
256
+ let ( lazy t) = t in
257
257
Ocsipersist. remove t (get_site_id () )
258
258
| _ -> Volatile. unset eref
259
259
@@ -263,7 +263,7 @@ module Ext = struct
263
263
match table with
264
264
| Vol _ -> Volatile.Ext. get state r
265
265
| Per t -> (
266
- let t = t in
266
+ let ( lazy t) = t in
267
267
try Eliom_state.Ext.Low_level. get_persistent_data ~state ~table: t with
268
268
| Not_found ->
269
269
if ext (* We can run the function from another state *)
@@ -281,7 +281,7 @@ module Ext = struct
281
281
match table with
282
282
| Vol _ -> Volatile.Ext. set state r value
283
283
| Per t ->
284
- let t = t in
284
+ let ( lazy t) = t in
285
285
Eliom_state.Ext.Low_level. set_persistent_data ~state ~table: t value
286
286
| _ -> raise (Failure " wrong eref for this function" )
287
287
@@ -294,7 +294,7 @@ module Ext = struct
294
294
match table with
295
295
| Vol _ -> Volatile.Ext. unset state r
296
296
| Per t ->
297
- let t = t in
297
+ let ( lazy t) = t in
298
298
Eliom_state.Ext.Low_level. remove_persistent_data ~state ~table: t
299
299
| _ -> failwith " wrong eref for this function"
300
300
end
0 commit comments