xmpp4rで日本語のチャットルームに入ると deadlock detected

xmppなチャットルームにrubyからメッセージを送りたいと思い、
http://d.hatena.ne.jp/gnarl/20120810/1344564294
を参考にして下記のスクリプトを書いたけど、

# -*- coding: utf-8 -*-
require "xmpp4r"
require 'xmpp4r/muc'

chat_room = "ほげ-会議室@conference.im.hoge.jp/motsat"

client = Jabber::Client.new(Jabber::JID.new("motsat@im.hoge.jp"))
client.connect
client.auth("mypassword")

# チャットルームに入る
muc = Jabber::MUC::MUCClient.new(client)
muc.join(chat_room)
message = Jabber::Message.new(chat_room, "test")
muc.send(message)
client.close

なんか

muc.join(chat_room)

の所で

.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/thread.rb:71:in `sleep': deadlock detected (fatal)

こんなエラーが出る。特に自分が書いた部分でthreadのdeadlockさせるようなことしてないしなーと思って

 Jabber::debug = true

をして詳細表示させてみたら、


REXML::ParseException
#
.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/rexml/source.rb:212:in `match'
xmppでやりとりしてるxmlのパースが失敗してたらしい・・・。エンコーディングがまずいと。
で、ググったら異国の地で同じコケかたしてる人がいた。
https://github.com/ln/xmpp4r/issues/3
ruby1.9以上はencoding部分でこける可能性があるっぽい。

   # Encoding patch
    require 'socket'
    class TCPSocket
        def external_encoding
            Encoding::BINARY
        end
    end

    require 'rexml/source'
    class REXML::IOSource
        alias_method :encoding_assign, :encoding=
        def encoding=(value)
            encoding_assign(value) if value
        end
    end

    begin
        # OpenSSL is optional and can be missing
        require 'openssl'
        class OpenSSL::SSL::SSLSocket
            def external_encoding
                Encoding::BINARY
            end
        end
    rescue
    end

このパッチをあてたらら解決。たぶん実行環境のrubyなりその他?の文字コード設定にも寄るのだと思う。
とりあえず投稿できた。