Skip to content

Instantly share code, notes, and snippets.

@jaz303
Created November 12, 2010 15:40
Show Gist options
  • Select an option

  • Save jaz303/674233 to your computer and use it in GitHub Desktop.

Select an option

Save jaz303/674233 to your computer and use it in GitHub Desktop.
Can anyone tell me why this code deadlocks?
require 'socket'
require 'thread'
module SC
PORT = 0x55DE
def self.test
queue = Queue.new
sender = MessageSender.new(queue)
sender.start
sender.join
end
class MessageSender
def initialize(queue)
@queue = queue
@shutdown = false
@out = UDPSocket.open
end
def start
@thread = Thread.new do
loop do
envelope = @queue.pop
begin
# @out.send(envelope.message.to_packet, 0, envelope.destination, PORT)
rescue => e
# TODO: log send error
end
end
end
end
def join
@thread.join
end
end
end
SC.test
# deadlock 0x100151a70: sleep:- - message_sender.rb:24
# deadlock 0x100170358: sleep:J(0x100151a70) (main) - message_sender.rb:35
# message_sender.rb:35:in `join': Thread(0x100170358): deadlock (fatal)
# from message_sender.rb:35:in `join'
# from message_sender.rb:11:in `test'
# from message_sender.rb:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment