Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:26
erlang
3109-kernel-Fixed-handling-of-send-timeout-rest...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 3109-kernel-Fixed-handling-of-send-timeout-rest-data.patch of Package erlang
From 7d2c6718cd3176af5098de55a7a5e06b043b8735 Mon Sep 17 00:00:00 2001 From: Micael Karlberg <bmk@erlang.org> Date: Fri, 5 Apr 2024 15:47:43 +0200 Subject: [PATCH 09/11] [kernel] Fixed handling of send timeout rest data OTP-18845 --- lib/kernel/src/gen_tcp.erl | 6 +++--- lib/kernel/src/gen_tcp_socket.erl | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/kernel/src/gen_tcp.erl b/lib/kernel/src/gen_tcp.erl index a014464386..cbcc65a0bd 100644 --- a/lib/kernel/src/gen_tcp.erl +++ b/lib/kernel/src/gen_tcp.erl @@ -884,9 +884,9 @@ close(S) -> %% -spec send(Socket, Packet) -> ok | {error, Reason} when - Socket :: socket(), - Packet :: iodata(), - Reason :: closed | {timeout, RestData} | inet:posix(), + Socket :: socket(), + Packet :: iodata(), + Reason :: closed | {timeout, RestData} | inet:posix(), RestData :: binary(). send(?module_socket(GenTcpMod, _) = S, Packet) when is_atom(GenTcpMod) -> diff --git a/lib/kernel/src/gen_tcp_socket.erl b/lib/kernel/src/gen_tcp_socket.erl index b6d06d2b2e..6f208145a3 100644 --- a/lib/kernel/src/gen_tcp_socket.erl +++ b/lib/kernel/src/gen_tcp_socket.erl @@ -536,9 +536,9 @@ send_result(Server, Data, Meta, Result) -> case Result of {error, {timeout, RestData}} when is_binary(RestData) orelse is_list(RestData) -> - send_timeout(Server, RestData, Meta); + send_timeout(Server, {false, RestData}, Meta); {error, timeout} -> - send_timeout(Server, Data, Meta); + send_timeout(Server, {true, Data}, Meta); {error, {Reason, RestData}} when is_binary(RestData) orelse is_list(RestData) -> call(Server, {send_error, Reason}); @@ -548,7 +548,7 @@ send_result(Server, Data, Meta, Result) -> ok end. -send_timeout(Server, Data, Meta) -> +send_timeout(Server, {ToBin, Data}, Meta) -> case maps:get(send_timeout_close, Meta) of true -> %% To handle RestData we would have to pass @@ -559,9 +559,12 @@ send_timeout(Server, Data, Meta) -> %% close_server(Server), {error, timeout}; + false when (ToBin =:= true) -> + %% Leave the lingering data to the caller to handle + {error, {timeout, iolist_to_binary(Data)}}; false -> %% Leave the lingering data to the caller to handle - {error, {timeout, iolist_to_binary(Data)}} + {error, {timeout, Data}} end. %% ------------------------------------------------------------------------- -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor