"Oh, Chip, you are always so close to growing bigger than your pants by the time they get a hole, there's no point," Minervie explained.
"But grandma, you are growing all the time too," Chip said.
Minervie turned her head away as she went red, "Chip go read or something."
Once again, Chip felt he was in trouble, but he wasn't sure why.
Satisfied Chip wasn't actively trying to be annoying, Minervie continued, "See the hole, the threads they, how you say, frey. The material wore through."
"No, but..." Chip paused trying to figure out how to be understood.
Minervie having pulled the project back to the table top, continued stitching, "Hmm?"
"When I get a hole in my pants, you always give me a new one," Chip reasoned.
"What are you doing grandma?" Chip stuck his nose above the edge of the table to try to see better.
"I'm patching this skirt of mine," Minervie answered, pulling thread through the material.
"Why?" Chip asked.
A slight sigh from Minervie started her saying, "It wore out." She pulled her work off the table to show him the hole and the patch, "so I'm fixing it."
"Why?" Chip asked.
A longer sigh, and she looked in his eyes.
in a way, Fray really is the Friend Inside WoL
#ffxiv #ff14 #gpose #wol #miqote #warrioroflight #fray #drk #friendinsideme
Fray: A Controlled Concurrency Testing Framework for the JVM
https://github.com/cmu-pasta/fray
#HackerNews #Fray #Controlled #Concurrency #JVM #Testing #Framework #HackerNews
Discovering a JDK Race Condition, and Debugging it in 30 Minutes with Fray I’ve been adding more integration tests for Fray recently. To ensure Fray can handle different scenarios, I wrote many creative test cases. Many of them passed as expected, while some failures led to epic fixes in Fray. Then something unexpected happened: Fray threw a deadlock exception while testing the following seemingly innocent code: 1private void test() { 2 ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); 3 // Shutdown thread. 4 new Thread(() -> { 5 executor.shutdown(); 6 }).start(); 7 try { 8 ScheduledFuture<?> future = executor.schedule(() -> { 9 Thread.yield(); 10 }, 10, TimeUnit.MILLISECONDS); 11 try { 12 future.get(); 13 Thread.yield(); 14 } catch (Throwable e) {} 15 } catch (RejectedExecutionException e) {} 16} This code creates a ScheduledThreadPoolExecutor, schedules a task, and shuts down the executor in another thread. Initially, I suspected a bug in Fray, but after investigation, I discovered that the deadlock was actually caused by a bug in the JDK itself.