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.synchronize do
@receiving_waiter.wait
dputs ": send_message-thread wakeup"
end
end
ensure
@sending_lock.synchronize do
@waiting_list.delete(sid)
end
end
end