# File ruby/bstream.rb, line 801
        def send_message(name,args)
          sid = nil
          @sending_lock.synchronize do
                sid = add_queue_calling_message(name,args)
                @waiting_list << sid
                @sending_waiter.broadcast
          end
          begin
                loop do
                  @receiving_lock.synchronize do
                        ret = @receiving_table[sid]
                        if ret then
                          dputs ":  received result:  #{sid}"
                          case ret.code
                          when R_OK
                                return ret.value
                          when R_APP_ERROR, R_PROTOCOL_ERROR, R_FATAL_ERROR
                                raise BSException.new(ret.err_klass,ret.err_message,ret.err_detail)
                          else
                                raise IOError.new("Unknown return code: #{ret.code}")
                          end
                        else
                          dputs ":    mada... #{sid}"
                        end
                  end # receiving_lock

                  @receiving_lock.synchronize do
                        @receiving_waiter.wait
                        dputs ":   send_message-thread wakeup"
                  end
                end # loop

          ensure
                @sending_lock.synchronize do
                  @waiting_list.delete(sid)
                end
          end
        end