File tree Expand file tree Collapse file tree 1 file changed +10
-39
lines changed
Expand file tree Collapse file tree 1 file changed +10
-39
lines changed Original file line number Diff line number Diff line change 44# Copyright, 2020-2025, by Samuel Williams.
55
66require "memory"
7- require "socket"
8- require "fileutils"
97
108class MyThing
119end
@@ -42,50 +40,23 @@ class MyThing
4240 end
4341
4442 it "safely captures locked string objects" do
45- socket_path = "/tmp/test_supervisor.ipc"
46- FileUtils . rm_f ( socket_path )
47-
48- memory = Memory ::Sampler . new
49- memory . start
50-
51- # Create server thread
52- Thread . new do
53- server = UNIXServer . new ( socket_path )
54- client = server . accept
55-
56- 2 . times do
57- buffer = String . new ( capacity : 2 )
58- length_data = client . read ( 2 , buffer ) # buffer gets locked while reading
59- break unless length_data && length_data . bytesize == 2
60-
61- length = length_data . unpack1 ( "n" )
62- client . read ( length )
43+ fiber = Fiber . new do |string |
44+ IO ::Buffer . for ( string ) do
45+ # string is now locked for the duration of this block.
46+ sleep ( 0.1 )
47+ Fiber . yield
6348 end
64- ensure
65- client &.close
66- server . close
6749 end
6850
69- # Create a client thread
70- Thread . new do
71- socket = UNIXSocket . new ( socket_path )
72-
73- 2 . times do
74- message = Time . now . to_s
75- socket . write ( [ message . bytesize ] . pack ( "n" ) + message )
76- puts "hello #{ message } "
77- sleep ( 1 )
78- end
79- ensure
80- socket &.close
81- end
51+ memory = Memory ::Sampler . new
52+ memory . start
8253
83- sleep ( 0.1 )
54+ # Lock the string
55+ key = String . new ( "foo" )
56+ fiber . resume ( key )
8457
8558 memory . stop
8659 memory . report # buffer string is locked while reading ObjectSpace#each_object
87- ensure
88- FileUtils . rm_f ( socket_path )
8960 end
9061
9162 with "#as_json" do
You can’t perform that action at this time.
0 commit comments