diff options
author | Michael Klishin <klishinm@vmware.com> | 2021-12-19 09:30:53 +0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-19 09:30:53 +0500 |
commit | ba6eb2b1e77b8c61eaa0e0a214ae1c4cdcca307f (patch) | |
tree | 513c68979500c832ab08d70696239ac3bd3fcbd4 | |
parent | 2580655468aeece0ed657161c25e283a11ab49db (diff) | |
parent | 5db59019cb8be0892e6ab7e576726b021afea7ad (diff) | |
download | rabbitmq-server-git-ba6eb2b1e77b8c61eaa0e0a214ae1c4cdcca307f.tar.gz |
Merge pull request #3917 from rabbitmq/mergify/bp/v3.9.x/pr-3906
Fix win32 memory leak by using `raw` file operations (backport #3906)
-rw-r--r-- | deps/rabbit/src/rabbit_file.erl | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/deps/rabbit/src/rabbit_file.erl b/deps/rabbit/src/rabbit_file.erl index 925a5356d7..2060c354c5 100644 --- a/deps/rabbit/src/rabbit_file.erl +++ b/deps/rabbit/src/rabbit_file.erl @@ -40,7 +40,7 @@ is_file(File) -> is_dir(Dir) -> is_dir_internal(read_file_info(Dir)). -is_dir_no_handle(Dir) -> is_dir_internal(prim_file:read_file_info(Dir)). +is_dir_no_handle(Dir) -> is_dir_internal(file:read_file_info(Dir, [raw])). is_dir_internal({ok, #file_info{type=directory}}) -> true; is_dir_internal(_) -> false. @@ -83,14 +83,23 @@ wildcard(Pattern, Dir) -> list_dir(Dir) -> with_handle(fun () -> prim_file:list_dir(Dir) end). read_file_info(File) -> - with_handle(fun () -> prim_file:read_file_info(File) end). + with_handle(fun () -> file:read_file_info(File, [raw]) end). -spec read_term_file (file:filename()) -> {'ok', [any()]} | rabbit_types:error(any()). read_term_file(File) -> try - {ok, Data} = with_handle(fun () -> prim_file:read_file(File) end), + F = fun() -> + {ok, FInfo} = file:read_file_info(File, [raw]), + {ok, Fd} = file:open(File, [read, raw, binary]), + try + file:read(Fd, FInfo#file_info.size) + after + file:close(Fd) + end + end, + {ok, Data} = with_handle(F), {ok, Tokens, _} = erl_scan:string(binary_to_list(Data)), TokenGroups = group_tokens(Tokens), {ok, [begin |