From: Caleb Tennis Date: 2005-02-07T23:30:57+09:00 Subject: I've got a simple class that writes to a device on a serial port and then reads back a response: class SerialPort def write(port, arry) file = File.new(port, File::RDWR | File::NOCTTY ) file.write(arry.pack("C*")) file.flush str = file.read(50).to_s.unpack("C*") file.close str end end (Usage: response = SerialPort.new.write("/dev/tts/5", [some_array_of_bytes]) ) The class works fine for my program, until I go multi-threaded, which is a requirement. As soon as I do something this: Thread.new do response = SerialPort.new.write("/dev/tts/5, [some_array_of_bytes]) end The thread hangs at the read() function. If I use the same code in the main thread it works fine. I thought at first I had resources that were conflicting, but I've written a test case which does nothing other than one call like seen above, and the only difference in working/not-working is whether the code is invoked in a new thread or not. Any thoughts on what I might be missing here? The serial port is set to raw mode, min 0 time 1, which means that it won't block on reads even if no data is present.