Browse Source

new implementation of cancel

Yuriy Zhloba 9 years ago
parent
commit
806e332977
2 changed files with 6 additions and 1 deletions
  1. 2 1
      src/epgsql_pool.erl
  2. 4 0
      src/epgsql_pool_worker.erl

+ 2 - 1
src/epgsql_pool.erl

@@ -76,12 +76,13 @@ query(Worker, Stmt, Params, Options) when is_pid(Worker) ->
                   undefined -> epgsql_pool_settings:get(query_timeout);
                   V -> V
               end,
+    Sock = gen_server:call(Worker, get_sock),
     try
         gen_server:call(Worker, {equery, Stmt, Params}, Timeout)
     catch
         exit:{timeout, _} ->
             error_logger:error_msg("query timeout ~p ~p", [Stmt, Params]),
-            gen_server:call(Worker, cancel, infinity),
+            epgsql_sock:cancel(Sock),
             {error, timeout}
     end;
 

+ 4 - 0
src/epgsql_pool_worker.erl

@@ -56,6 +56,10 @@ handle_call(_, _From, #state{connection = undefined} = State) ->
 handle_call(_, _From, #state{connection = #epgsql_connection{sock = undefined}} = State) ->
     {reply, {error, reconnecting}, State};
 
+handle_call(get_sock, _From,
+            #state{connection = #epgsql_connection{sock = Sock}} = State) ->
+    {reply, Sock, State};
+
 handle_call({equery, Stmt, Params}, _From,
             #state{connection = #epgsql_connection{sock = Sock}} = State) ->
     Reply = case process_info(Sock, status) of