From: Eric Wong Date: 2017-09-08T23:50:14+00:00 Subject: [ruby-core:82721] Re: [Ruby trunk Bug#13851] getting "can't modify string; temporarily locked" on non-frozen instances cardoso_tiago@hotmail.com wrote: > Buffers are indeed attached per socket, but I wouldn't say > they are short-lived. Also, I don't have guarantees that the > same thread will handle the same socket after a wait, so I > can't follow your advice. But I can also say that I haven't > seen a big performance degradation because of it (although I'd > appreciate suggestions on tools that could help me inspect > this). From your original post: def read(io) io.read_nonblock(16_384, @buffer, exception: false) # do stuff... @buffer.clear end It looks like @buffer only get used for the duration of the method. For common HTTP (and other TCP-based) servers, often you can read an entire request with one read(2) syscall, do all parsing, and discard the buffer ASAP (before even performing expensive request parsing or response writing). I only need to create a longer-lived buffer when a request is big or trickled due to slowness. Unsubscribe: