File tree Expand file tree Collapse file tree 2 files changed +7
-2
lines changed Expand file tree Collapse file tree 2 files changed +7
-2
lines changed Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import io
5
5
// Futures
6
6
// -------
7
7
8
+ /// Must be filled exactly once and waited exactly once
8
9
extern type Future[T]
9
10
10
11
namespace future {
Original file line number Diff line number Diff line change @@ -342,6 +342,7 @@ void c_future_fill(struct Pos future, struct Pos value) {
342
342
case EMPTY : {
343
343
f -> state = FILLED ;
344
344
f -> payload .value = value ;
345
+ erasePositive (future );
345
346
break ;
346
347
}
347
348
case FILLED : {
@@ -354,7 +355,8 @@ void c_future_fill(struct Pos future, struct Pos value) {
354
355
}
355
356
case WAITED : {
356
357
Stack stack = f -> payload .stack ;
357
- free (f );
358
+ f -> state = EMPTY ;
359
+ erasePositive (future );
358
360
resume_Pos (stack , value );
359
361
break ;
360
362
}
@@ -367,11 +369,13 @@ void c_future_wait(struct Pos future, Stack stack) {
367
369
case EMPTY : {
368
370
f -> state = WAITED ;
369
371
f -> payload .stack = stack ;
372
+ erasePositive (future );
370
373
break ;
371
374
}
372
375
case FILLED : {
373
376
struct Pos value = f -> payload .value ;
374
- free (f );
377
+ f -> state = EMPTY ;
378
+ erasePositive (future );
375
379
resume_Pos (stack , value );
376
380
break ;
377
381
}
You can’t perform that action at this time.
0 commit comments