From bb74f3d8c400b06613c9b39a315afdb2eb8d8ccd Mon Sep 17 00:00:00 2001 From: Eishun Kondoh Date: Mon, 19 Mar 2018 23:39:55 +0900 Subject: [PATCH] secure_channel: Fix transactional_send API to accept xid from handler processes --- lib/tres/secure_channel.ex | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/tres/secure_channel.ex b/lib/tres/secure_channel.ex index 8e7ffc8..5093032 100644 --- a/lib/tres/secure_channel.ex +++ b/lib/tres/secure_channel.ex @@ -489,7 +489,7 @@ defmodule Tres.SecureChannel do {:keep_state, %{state_data | ping_timer_ref: nil, ping_xid: nil}} end - defp xactional_send_message(message, state_data) do + defp xactional_send_message(%{xid: 0} = message, state_data) do xid = State.increment_transaction_id(state_data.xid) messages = [ @@ -500,6 +500,17 @@ defmodule Tres.SecureChannel do XACT_KV.insert(state_data.xact_kv_ref, xid, message) send_message(messages, state_data) end + defp xactional_send_message(%{xid: xid} = message, state_data) do + _ = State.set_transaction_id(state_data.xid, xid) + + messages = [ + %{message | xid: xid}, + %{Openflow.Barrier.Request.new() | xid: xid} + ] + + XACT_KV.insert(state_data.xact_kv_ref, xid, message) + send_message(messages, state_data) + end defp send_message(message, %State{socket: socket, transport: transport}) do if is_list(message) do