[flan_merged_park] drained the agent's ring on one of the two flags that wake it. [program_poll] — which an expression sets, by way of [Program.wake] — polled and went back to sleep; [program_asked] broke out of the loop and re-entered [flan_program_main] with the queue untouched. A plain redefinition sets neither, so a body delivered to a parked program was still in the ring when the run it was delivered for started, and installed at that run's first frame boundary instead: everything main did before its first (agent/poll) ran the body the person had already replaced, and the change showed up one run late. A redefined main is the whole of a run, so it would have had to be asked for twice. Both flags drain now, and the exit drains before it leaves. The re-run is still tested first and cannot be starved: the flag is latched at the top of the round and nothing in the round can clear it. The transcript row in test_dev.ml asserted the old ordering by name — two lines out of the second run, the first of them the stale body — so it is a line shorter now, and the absence of that line is the claim. The park-note fixture grew a print of the redefinable body before its first poll, which is what makes the new row able to see which body the re-run started with. This is what the note the delivery is answered with has been promising: a module queued against a park installs no later than the program's next run. It now installs before that run's first frame rather than during it.
26 lines
1.1 KiB
Plaintext
26 lines
1.1 KiB
Plaintext
;;;; A program that parks the moment it is up: an agent, a line of output and
|
|
;;;; a return from main.
|
|
;;;;
|
|
;;;; Every other fixture here has to be driven to its park through the run it
|
|
;;;; was written for. What the note test needs is the park itself, repeatedly
|
|
;;;; and cheaply — a redefinition sent to a parked program is answered with an
|
|
;;;; explanation of what "queued" means for one, and the claim under test is
|
|
;;;; that the explanation is given once per park rather than once per
|
|
;;;; keystroke. So the run is as short as a run can be, and [rerun] gets it
|
|
;;;; back to a fresh park in one op.
|
|
(import agent "vendor:agent")
|
|
|
|
(defvar runs i64)
|
|
|
|
(defn step [] i64 7)
|
|
|
|
;;; Called by main before the run reaches any (agent/poll), which is what
|
|
;;; makes it the probe for *when* a parked delivery installs: a body queued
|
|
;;; while the program was parked either got into the ring before main was
|
|
;;; re-entered or it did not, and this is the print that says which.
|
|
(defn main [] i32
|
|
(agent/start "/tmp/flan-dev-parknote-fallback.sock")
|
|
(set runs (+ runs 1))
|
|
(print (step)) (println "")
|
|
0)
|