Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
0674-Close-cpu_sup-and-memsup-port-on-terminate...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0674-Close-cpu_sup-and-memsup-port-on-terminate.patch of Package erlang
From 00cfb44f8535752ca25f32ac8d12e094adc04323 Mon Sep 17 00:00:00 2001 From: jdamanalo <jamanalo5@up.edu.ph> Date: Mon, 16 Jan 2023 22:58:57 +0800 Subject: [PATCH] Close cpu_sup and memsup port on terminate cpu_sup and memsup shutdown fixes --- lib/os_mon/c_src/memsup.c | 2 ++ lib/os_mon/c_src/memsup.h | 2 ++ lib/os_mon/include/memsup.hrl | 1 + lib/os_mon/src/cpu_sup.erl | 11 ++++++++--- lib/os_mon/src/memsup.erl | 32 ++++++++++++++++++-------------- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/lib/os_mon/c_src/memsup.c b/lib/os_mon/c_src/memsup.c index 3cc13c905b..f4e727c39e 100644 --- a/lib/os_mon/c_src/memsup.c +++ b/lib/os_mon/c_src/memsup.c @@ -609,6 +609,8 @@ message_loop(int erlin_fd) case SHOW_SYSTEM_MEM: extended_show_mem(); break; + case EXIT: + return; default: /* ignore all other messages */ break; } diff --git a/lib/os_mon/c_src/memsup.h b/lib/os_mon/c_src/memsup.h index fa65db784a..f9d0e225df 100644 --- a/lib/os_mon/c_src/memsup.h +++ b/lib/os_mon/c_src/memsup.h @@ -30,6 +30,8 @@ /* Extended memory statistics */ /*IG*/ #define SHOW_SYSTEM_MEM 2 +#define EXIT 3 + /* Tags for the extended statistics */ /*IG*/ #define SHOW_SYSTEM_MEM_END 0 /*IG*/ #define MEM_SYSTEM_TOTAL 1 diff --git a/lib/os_mon/include/memsup.hrl b/lib/os_mon/include/memsup.hrl index 2f76cfe9b3..8f93918180 100644 --- a/lib/os_mon/include/memsup.hrl +++ b/lib/os_mon/include/memsup.hrl @@ -26,6 +26,7 @@ -define( SHOW_MEM , 1 ). -define( SHOW_SYSTEM_MEM , 2 ). +-define( EXIT , 3 ). -define( SHOW_SYSTEM_MEM_END , 8#0 ). %% tags for extended statistics -define( MEM_SYSTEM_TOTAL , 1 ). diff --git a/lib/os_mon/src/cpu_sup.erl b/lib/os_mon/src/cpu_sup.erl index b4283bb436..f68a59a2a2 100644 --- a/lib/os_mon/src/cpu_sup.erl +++ b/lib/os_mon/src/cpu_sup.erl @@ -495,9 +495,6 @@ measurement_server_init() -> measurement_server_loop(State) -> receive - {_, quit} -> - State#internal.port ! {self(), ?quit}, - ok; {'DOWN',Monitor,process,_,_} -> measurement_server_loop(State#internal{ util = lists:keydelete( Monitor, @@ -528,6 +525,14 @@ measurement_server_loop(State) -> {'EXIT', OldPid, _n} when State#internal.port == OldPid -> {ok, NewPid} = port_server_start_link(), measurement_server_loop(State#internal{port = NewPid}); + {'EXIT', _, normal} -> + case State#internal.port of + not_used -> + ok; + Srv -> + Srv ! {self(), ?quit}, + ok + end; _Other -> measurement_server_loop(State) end. diff --git a/lib/os_mon/src/memsup.erl b/lib/os_mon/src/memsup.erl index e4f60b9972..dbf7609433 100644 --- a/lib/os_mon/src/memsup.erl +++ b/lib/os_mon/src/memsup.erl @@ -651,6 +651,10 @@ port_init() -> start_portprogram() -> os_mon:open_port("memsup",[{packet,1}]). +port_shutdown(Port) -> + Port ! {self(), {command, [?EXIT]}}, + port_close(Port). + %% The connected process loops are a bit awkward (several different %% functions doing almost the same thing) as %% a) strategies for receiving regular memory data and extensive @@ -674,13 +678,13 @@ port_idle(Port) -> %% Received after reply already has been delivered... port_idle(Port); close -> - port_close(Port); + port_shutdown(Port); {Port, {data, Data}} -> exit({port_error, Data}); {'EXIT', Port, Reason} -> exit({port_died, Reason}); {'EXIT', _Memsup, _Reason} -> - port_close(Port) + port_shutdown(Port) end. get_memory_usage(Port, Alloc, Memsup) -> @@ -694,11 +698,11 @@ get_memory_usage(Port, Alloc, Memsup) -> cancel -> get_memory_usage_cancelled(Port, Alloc); close -> - port_close(Port); + port_shutdown(Port); {'EXIT', Port, Reason} -> exit({port_died, Reason}); {'EXIT', _Memsup, _Reason} -> - port_close(Port) + port_shutdown(Port) end. get_memory_usage_cancelled(Port, Alloc) -> receive @@ -707,11 +711,11 @@ get_memory_usage_cancelled(Port, Alloc) -> {Port, {data, _Data}} -> port_idle(Port); close -> - port_close(Port); + port_shutdown(Port); {'EXIT', Port, Reason} -> exit({port_died, Reason}); {'EXIT', _Memsup, _Reason} -> - port_close(Port) + port_shutdown(Port) end. tag2atag(Port, Tag) -> @@ -734,11 +738,11 @@ get_ext_memory_usage(Port, Accum, Memsup) -> ext_cancel -> get_ext_memory_usage_cancelled(Port); close -> - port_close(Port); + port_shutdown(Port); {'EXIT', Port, Reason} -> exit({port_died, Reason}); {'EXIT', _Memsup, _Reason} -> - port_close(Port) + port_shutdown(Port) end. get_ext_memory_usage_cancelled(Port) -> receive @@ -748,11 +752,11 @@ get_ext_memory_usage_cancelled(Port) -> get_ext_memory_usage_cancelled(tag2atag(Port, Tag), Port); close -> - port_close(Port); + port_shutdown(Port); {'EXIT', Port, Reason} -> exit({port_died, Reason}); {'EXIT', _Memsup, _Reason} -> - port_close(Port) + port_shutdown(Port) end. get_ext_memory_usage(ATag, Port, Accum0, Memsup) -> @@ -769,22 +773,22 @@ get_ext_memory_usage(ATag, Port, Accum0, Memsup) -> cancel -> get_ext_memory_usage_cancelled(ATag, Port); close -> - port_close(Port); + port_shutdown(Port); {'EXIT', Port, Reason} -> exit({port_died, Reason}); {'EXIT', _Memsup, _Reason} -> - port_close(Port) + port_shutdown(Port) end. get_ext_memory_usage_cancelled(_ATag, Port) -> receive {Port, {data, _Data}} -> get_ext_memory_usage_cancelled(Port); close -> - port_close(Port); + port_shutdown(Port); {'EXIT', Port, Reason} -> exit({port_died, Reason}); {'EXIT', _Memsup, _Reason} -> - port_close(Port) + port_shutdown(Port) end. %%--Collect process data------------------------------------------------ -- 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