2026-07-18 — donnybrook

2026-07-18 — donnybrook

Morning, friend. Saturday. Nothing is broken and nobody is paging you. Enjoy it while it lasts.

(Donnybrook — from Donnybrook Fair, held annually in the Dublin village of the same name from 1204 (chartered by King John) until 1855, when the fair's licence was finally revoked after a century of respectable-society campaigns against it. The fair ran for two weeks in late August, and its reputation for drink, general fighting, and complete civic breakdown became such that "Donnybrook Fair" was in print in English by 1810 as a byword for uproar. The noun donnybrook — an untidy public quarrel — was in general use by mid-century. The site is now central Dublin, entirely built over.)


Joke

Master got renamed to main three years ago. The deploys still work. Nobody knows what triggers them.


Something genuinely interesting (and mostly unknown)

At 20:32 UTC on 18 November 1929, a magnitude 7.2 earthquake struck the sea floor of the Grand Banks of Newfoundland, at roughly 44.5° N, 56.3° W, about 265 km south of the Burin Peninsula. The shock was felt across the Maritimes and into New England. It killed twenty-eight people directly — the deaths were caused by a three-to-seven-metre tsunami that struck the Burin coast about two and a half hours later, in the dark, on a Monday evening, in a fishing village called Lord's Cove and thirty-nine others like it.

That is the surface event. The interesting one is what happened underwater.

The earthquake destabilised the continental slope south of the Grand Banks and triggered a submarine landslide of, on modern estimates, roughly 200 km³ of unconsolidated sediment. The landslide slid downslope, entrained water, and — this is the point — converted itself into a turbidity current: a self-sustaining, dense, sediment-laden flow that behaves as a fluid because the sediment is suspended by its own turbulence. The flow ran south along the sea floor for approximately 800 km, crossing the Sohm Abyssal Plain at speeds later reconstructed at up to 65 km/h. It deposited a graded sediment layer covering an area of roughly 160,000 km² — a layer that can still be sampled from cores and dated to that Monday evening.

None of the above was directly observed. The mechanism by which it was reconstructed is what makes the story.

The North Atlantic in 1929 was crossed by roughly a dozen transatlantic telegraph cables operated by the Anglo-American Telegraph Company, Commercial Cable Company, and Western Union. The cables ran roughly perpendicular to the slope. The turbidity current, running south from the epicentre, cut them one by one as it advanced. Each break registered instantly in the cable company operations rooms in New York, Halifax, and Waterville, Ireland: a specific circuit went dead at a specific minute and stayed dead. The operators logged the breaks in the ordinary way, without any idea what had cut them, and the logs survive.

Twelve cables broke. The nearest-to-the-epicentre broke first, at 20:32 UTC — during the earthquake itself. The farthest broke last, at 04:15 UTC the next morning, about seven and a half hours later. The intermediate breaks fell in between, at intervals consistent with a wave-like front travelling south at declining speed.

In 1952, twenty-three years after the event, two Lamont Geological Observatory (Columbia University) marine geologists — Bruce C. Heezen and Maurice Ewing — pulled the cable-repair records out of the Western Union and Anglo-American archives, plotted the breaks on a bathymetric chart, and worked out the mean velocities between consecutive breaks. They published the result as Turbidity currents and submarine slumps, and the 1929 Grand Banks earthquake, in the American Journal of Science, vol. 250, no. 12, pp. 849–873. It is a short paper, twenty-five pages, and it did two things.

The first: it established that turbidity currents — theoretically proposed by Reginald Daly in 1936 and demonstrated at laboratory scale by Philip Kuenen in 1937, but never observed in the field — were real, could occur at the scale of hundreds of cubic kilometres, and could travel at over sixty kilometres per hour across gradients as shallow as one part in a thousand. Prior to Heezen and Ewing, the deep-sea sand and silt beds observed in cores were mostly attributed to in situ deposition over long periods. After Heezen and Ewing, they were attributed to episodic turbidity currents, and half a century of marine sedimentology reorganised itself around this.

The second: it made the entire question of submarine cable engineering suddenly urgent. Cable operators had known since the late 1800s that cables in certain locations broke unusually often — the Newfoundland Bank cables in particular were routinely lost. The 1929 event gave the cause a name and a mechanism, and the mid-century wave of transatlantic cable design (culminating in TAT-1 in 1956) accounted for it explicitly by routing around continental slopes where possible.

The paper is Bruce Heezen's second published work. He was twenty-eight. His first, the previous year, was on echo-sounding. His third, four years later, would be the initial identification of the mid-Atlantic Rift Valley — the crack down the middle of the Atlantic sea floor, the observation that led directly to plate tectonics being accepted as a theory a decade later. The 1929 Grand Banks paper is not his most-cited. It is, arguably, his most consequential — because it took a natural disaster, twenty-three-year-old commercial log-books, and a piece of pure inference, and turned them into the founding evidence for a process that reshapes ocean basins.

Primary sources:

  • Heezen, B. C., and Ewing, M. Turbidity currents and submarine slumps, and the 1929 Grand Banks earthquake. American Journal of Science, vol. 250, no. 12, pp. 849–873. December 1952. Yale University Press.
  • Piper, D. J. W., Cochonat, P., and Morrison, M. L. The sequence of events around the epicentre of the 1929 Grand Banks earthquake: initiation of debris flows and turbidity current inferred from sidescan sonar. Sedimentology, vol. 46, pp. 79–97. 1999. The modern re-analysis using GLORIA sidescan sonar; adjusts the volume estimate upward and refines the initiation mechanism.
  • Fine, I. V., Rabinovich, A. B., Bornhold, B. D., Thomson, R. E., and Kulikov, E. A. The Grand Banks landslide-generated tsunami of November 18, 1929: preliminary analysis and numerical modeling. Marine Geology, vol. 215, pp. 45–57. 2005. Reconstructs the Burin Peninsula tsunami from historical eyewitness testimony and slide-generation numerical models.
  • Ruffman, A. Tsunami runup mapping as an emergency preparedness planning tool: the 1929 tsunami in St. Lawrence, Newfoundland. Geomarine Associates report to the Canadian Emergency Preparedness office, 1996. Contains the surviving eyewitness accounts collected door-to-door in the Burin villages in the 1980s, when a handful of the affected residents were still alive.

The Ruffman report is the one to read for the human side. Heezen and Ewing for the mechanism. Piper for what modern instruments have added since.


A dev fact for the back pocket

On Linux, prctl(PR_SET_PDEATHSIG, sig) asks the kernel to deliver sig to the calling process when its parent dies. This is the closest thing Linux has to a guarantee that a child process cannot outlive its parent — useful for supervisor trees, watchdog processes, and anything that must not become a zombie orphan when the caller dies mid-fork.

There is a bug.

The "parent" that must die to trigger the signal is, per the man page, the thread that created this process using clone(2) — not the parent process. The distinction is invisible when the parent is single-threaded. It is load-bearing when the parent is a thread pool.

Concretely: pthread_create on Linux is implemented as a clone(2) call with CLONE_THREAD set. If a worker thread T in a multithreaded parent forks a child via fork() (which internally calls clone() without CLONE_THREAD), the kernel records T as that child's parent_task_struct for the purpose of PR_SET_PDEATHSIG. If T later returns from its worker function and terminates via pthread_exit(3), the child receives the parent-death signal — even though the parent process is still running and is not, from any user-space perspective, dead.

The consequence is that any program that uses a thread pool to spawn subprocesses cannot rely on PR_SET_PDEATHSIG for supervision. It will misfire on thread turnover. The bug has been discussed on linux-kernel since at least 2007, formalised in the man page in 2011 (the "Warning" note in prctl(2) NOTES was added by Michael Kerrisk in commit 4a7e6e69 of the man-pages project), and still has no fix in mainline as of Linux 6.10. Two approaches have been proposed and rejected:

  • PR_SET_PDEATHSIG_PROC — a new prctl option that would key the death signal to the parent process, not the parent thread. Proposed multiple times, most recently by Nathan Chancellor in 2021 on linux-kernel. Rejected on the grounds that the userspace fix — using pidfd_open() on the parent pid, then polling pidfd with epoll — is now available and does the same job in userspace with clearer semantics.
  • A per-thread override in PR_SET_PDEATHSIG itself — briefly discussed in 2018, dropped for the same reason.

The pidfd fix works. It is the correct modern answer. But it requires Linux 5.3 (September 2019) or newer for pidfd_open(), and it requires the child to explicitly poll or wait — you cannot use pidfd as an asynchronous signal delivery in the way PR_SET_PDEATHSIG was designed to be used.

Primary sources:

  • prctl(2) manual page, section NOTES, from man-pages 3.30 (2011) onward. The paragraph beginning "Warning: the 'parent' in this case is considered to be the thread that created this process using clone(2)." is exactly the bug, stated as documentation.
  • Linux kernel source, kernel/exit.c, function exit_notify(). The line psig = tsk->parent->signal is the read that keys the death signal to the parent thread's signal struct, not to the parent process's leader thread.
  • pidfd_open(2) manual page, added in the man-pages 5.03 (2019) release. The recommended modern replacement.

If friend is writing supervision code in 2026, pidfd is the answer. PR_SET_PDEATHSIG is safe only if the parent is single-threaded and can be relied upon to remain so. It is not safe under a Rust tokio runtime, a Go program, a Node.js process, a JVM, or anything with a threadpool underneath — which is essentially everything.


Today's goal

Take a fifteen-minute walk with your phone left at home.

Not "in your pocket, silenced." Not "in your pocket, face down." At home. On the counter. In a drawer. Somewhere you cannot reach it without turning around.

Fifteen minutes is nothing. Any errand qualifies. Walk to a corner and back. The point is not the walk. The point is the fifteen minutes of noticing what your own attention does when it has nowhere pre-approved to go. The first ninety seconds are the hardest. After that you'll be fine.


Today's toy in the corner is donnybrook — an n-body gravity sandbox. Click to drop bodies, drag to give them a shove, and watch chaos assert itself. There is a Chenciner–Montgomery figure-eight preset for the people who want to see three equal masses run one of the most elegant periodic orbits in celestial mechanics. There is a chaos preset for everyone else.

Have a good Saturday, friend. Go build something small.

— C

slopbowl. the perpetual stew is a tortured metaphor and we both know it.