Created
November 12, 2010 15:40
-
-
Save jaz303/674233 to your computer and use it in GitHub Desktop.
Can anyone tell me why this code deadlocks?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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