From 6fdcb401a0de580fba38eec63a92b45ee73c8b64 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson Date: Mon, 9 Jul 2018 18:23:35 +0200 Subject: erts: Fix spec and docs for process_info 'monitored_by' to include ports and NIF resources. Added new opaque type 'nif_resource'. --- erts/doc/src/erl_nif.xml | 2 +- erts/doc/src/erlang.xml | 15 ++++++++++++--- erts/preloaded/src/erlang.erl | 8 ++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml index a8eff43623..0fff8f7cad 100644 --- a/erts/doc/src/erl_nif.xml +++ b/erts/doc/src/erl_nif.xml @@ -194,7 +194,7 @@ ok

Binaries are sequences of whole bytes. Bitstrings with an arbitrary bit length have no support yet.

- Resource objects + Resource objects

The use of resource objects is a safe way to return pointers to native data structures from a NIF. A resource object is diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml index 73800687b7..8e014c3010 100644 --- a/erts/doc/src/erlang.xml +++ b/erts/doc/src/erlang.xml @@ -197,6 +197,15 @@ + + + +

An opaque handle identifing a + NIF resource object + .

+ + + @@ -5288,10 +5297,10 @@ RealSystem = system + MissedSystem

MinBinVHeapSize is the minimum binary virtual heap size for the process.

- {monitored_by, Pids} + {monitored_by, MonitoredBy} -

A list of process identifiers monitoring the process (with - monitor/2).

+

A list of identifiers for all the processes, ports and NIF + resources, that are monitoring the process.

{monitors, Monitors} diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index 75f6901258..1ed6b6b284 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -86,15 +86,15 @@ | 'nano_seconds'. -opaque prepared_code() :: reference(). - -export_type([prepared_code/0]). --opaque dist_handle() :: atom(). +-opaque nif_resource() :: reference(). +-export_type([nif_resource/0]). +-opaque dist_handle() :: atom(). -export_type([dist_handle/0]). -type iovec() :: [binary()]. - -export_type([iovec/0]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -2316,7 +2316,7 @@ process_flag(_Flag, _Value) -> {min_heap_size, MinHeapSize :: non_neg_integer()} | {min_bin_vheap_size, MinBinVHeapSize :: non_neg_integer()} | {max_heap_size, MaxHeapSize :: max_heap_size()} | - {monitored_by, Pids :: [pid()]} | + {monitored_by, MonitoredBy :: [pid() | port() | nif_resource()]} | {monitors, Monitors :: [{process | port, Pid :: pid() | port() | {RegName :: atom(), Node :: node()}}]} | -- cgit v1.2.3 From 0c63aea9fe16372d827c93fc553148a7c92b9329 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson Date: Mon, 9 Jul 2018 18:28:45 +0200 Subject: os_mon: Fix volatile test cpu_sup_SUITE:util_api Don't match floats. --- lib/os_mon/test/cpu_sup_SUITE.erl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/os_mon/test/cpu_sup_SUITE.erl b/lib/os_mon/test/cpu_sup_SUITE.erl index 7122d23503..ba28f31f26 100644 --- a/lib/os_mon/test/cpu_sup_SUITE.erl +++ b/lib/os_mon/test/cpu_sup_SUITE.erl @@ -122,19 +122,19 @@ util_api(Config) when is_list(Config) -> %% util([]) {all, Busy1, NonBusy1, []} = cpu_sup:util([]), - 100.00 = Busy1 + NonBusy1, + true = tiny_diff(100.00, Busy1 + NonBusy1), %% util([detailed]) {Cpus2, Busy2, NonBusy2, []} = cpu_sup:util([detailed]), true = lists:all(fun(X) -> is_integer(X) end, Cpus2), true = lists:all(BusyP, Busy2), true = lists:all(NonBusyP, NonBusy2), - 100.00 = lists:foldl(Sum,0,Busy2)+lists:foldl(Sum,0,NonBusy2), + true = tiny_diff(100.00, lists:foldl(Sum,0,Busy2)+lists:foldl(Sum,0,NonBusy2)), %% util([per_cpu]) [{Cpu3, Busy3, NonBusy3, []}|_] = cpu_sup:util([per_cpu]), true = is_integer(Cpu3), - 100.00 = Busy3 + NonBusy3, + true = tiny_diff(100.00, Busy3 + NonBusy3), %% util([detailed, per_cpu]) [{Cpu4, Busy4, NonBusy4, []}|_] = @@ -142,7 +142,7 @@ util_api(Config) when is_list(Config) -> true = is_integer(Cpu4), true = lists:all(BusyP, Busy2), true = lists:all(NonBusyP, NonBusy2), - 100.00 = lists:foldl(Sum,0,Busy4)+lists:foldl(Sum,0,NonBusy4), + true = tiny_diff(100.00, lists:foldl(Sum,0,Busy4)+lists:foldl(Sum,0,NonBusy4)), %% bad util/1 calls {'EXIT',{badarg,_}} = (catch cpu_sup:util(detailed)), @@ -150,6 +150,9 @@ util_api(Config) when is_list(Config) -> ok. +tiny_diff(A, B) -> + (abs(A - B) < 1.0e-11). + -define(SPIN_TIME, 1000). %% Test utilization values -- cgit v1.2.3