From: ptkwt@...1.aracnet.com (Phil Tomson) Date: 2001-02-22T19:56:45+09:00 Subject: [ruby-talk:11304] dRuby problem with Threads This is a strange one - then again It's about 11:20PM so everything is looking strange. I'm finding that method calls on a dRuby object (running on a Windows machine - calling from a Linux machine in this case) will work just fine unless they're inside a new thread. Here's the server code (running on the WindowsNT box): ######server code ############# require 'drb' class TestServer def warpver "warp 8.8.8" end def osver `uname -r` end def pwd Dir.pwd end def runit(command) eval(command) end def eval_it(command) puts "in TestServer::eval_it(#{command})" end end puts "starting server" aServerObj = TestServer.new DRb.start_service('druby://localhost:9000', aServerObj) DRb.thread.join ####end of server code ##################### Here's the client code (running on a Linux box): #########client################# require 'drb' machine = "calvinnt" command = "this is the command" DRb.start_service() drbObj = DRbObject.new(nil, "druby://#{machine}:9000") #thread = Thread.start do drbObj.eval_it(command) #end #thread ###########end of client code ############ All pretty simple (I've cut out all the extra stuff ). It works fine unless I uncomment the Thread code in the client, like: require 'drb' machine = "calvinnt" command = "this is the command" DRb.start_service() drbObj = DRbObject.new(nil, "druby://#{machine}:9000") thread = Thread.start do drbObj.eval_it(command) end #thread If I run the threaded client, and this is what seems really strange, druby reports a bunch of exceptions on the SERVER side - something about bad headers. Why would the server side even 'care' that the call came from a different thread on the client? The other data point here is that it seems to work OK if both client and server are running on Linux boxes. Note: I've installed Ruby 1.6.2 on both my Linux boxen and my Windows boxen in the last two days - they seem to all have the same drb version (if they didn't it would complain even if I left the threading stuff out - drb versions have to match and I believe they are all at 1.3 now. Strange question (and please remember it's late): is it possible that if you run the method call in a seperate thread on the client side that drb trys to start another thread on the server side (no, that's too bizarre, please tell me that's too bizarre) Phil