aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/beam/erl_time_sup.c2
-rw-r--r--erts/emulator/beam/external.c52
-rw-r--r--erts/emulator/beam/time.c2
-rw-r--r--erts/emulator/sys/unix/sys_time.c11
-rw-r--r--erts/emulator/sys/win32/sys_time.c2
-rw-r--r--erts/preloaded/ebin/erl_prim_loader.beambin56328 -> 56328 bytes
-rw-r--r--erts/preloaded/ebin/erlang.beambin106112 -> 106120 bytes
-rw-r--r--erts/preloaded/ebin/erts_internal.beambin12772 -> 12808 bytes
-rw-r--r--erts/preloaded/ebin/init.beambin49752 -> 49756 bytes
-rw-r--r--erts/preloaded/ebin/otp_ring0.beambin1460 -> 1468 bytes
-rw-r--r--erts/preloaded/ebin/prim_eval.beambin1340 -> 1340 bytes
-rw-r--r--erts/preloaded/ebin/prim_file.beambin44892 -> 44904 bytes
-rw-r--r--erts/preloaded/ebin/prim_inet.beambin73128 -> 73092 bytes
-rw-r--r--erts/preloaded/ebin/prim_zip.beambin23424 -> 23416 bytes
-rw-r--r--erts/preloaded/ebin/zlib.beambin14160 -> 14176 bytes
-rw-r--r--erts/preloaded/src/erlang.erl2
-rw-r--r--erts/preloaded/src/erts_internal.erl12
17 files changed, 52 insertions, 31 deletions
diff --git a/erts/emulator/beam/erl_time_sup.c b/erts/emulator/beam/erl_time_sup.c
index 8203436c85..bbdedcc128 100644
--- a/erts/emulator/beam/erl_time_sup.c
+++ b/erts/emulator/beam/erl_time_sup.c
@@ -1693,7 +1693,7 @@ static void
send_time_offset_changed_notifications(void *new_offsetp)
{
ErtsMonotonicTime new_offset;
- ErtsTimeOffsetMonitorInfo *to_mon_info;
+ ErtsTimeOffsetMonitorInfo *to_mon_info = NULL; /* Shut up faulty warning */
Uint no_monitors;
char *tmp = NULL;
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index 2a9189b51e..2117dbec62 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -4104,8 +4104,9 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
}
for (i = 1; i <= arity; ++i) {
if (is_list(ptr[i])) {
- if ((m = is_string(obj)) && (m < MAX_STRING_LEN)) {
+ if ((m = is_string(ptr[i])) && (m < MAX_STRING_LEN)) {
result += m + 2 + 1;
+ continue;
} else {
result += 5;
}
@@ -4126,31 +4127,29 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
/* push values first */
ptr = flatmap_get_values(mp);
- i = size;
- while(i--) {
+ for (i = size; i; i--, ptr++) {
if (is_list(*ptr)) {
if ((m = is_string(*ptr)) && (m < MAX_STRING_LEN)) {
result += m + 2 + 1;
+ continue;
} else {
result += 5;
}
}
ESTACK_PUSH(s,*ptr);
- ++ptr;
}
ptr = flatmap_get_keys(mp);
- i = size;
- while(i--) {
+ for (i = size; i; i--, ptr++) {
if (is_list(*ptr)) {
if ((m = is_string(*ptr)) && (m < MAX_STRING_LEN)) {
result += m + 2 + 1;
+ continue;
} else {
result += 5;
}
}
ESTACK_PUSH(s,*ptr);
- ++ptr;
}
goto outer_loop;
} else {
@@ -4164,8 +4163,12 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
case HAMT_SUBTAG_HEAD_ARRAY:
ptr++;
node_sz = 16;
+ result += 1 + 4; /* tag + 4 bytes size */
break;
- case HAMT_SUBTAG_HEAD_BITMAP: ptr++;
+ case HAMT_SUBTAG_HEAD_BITMAP:
+ ptr++;
+ result += 1 + 4; /* tag + 4 bytes size */
+ /*fall through*/
case HAMT_SUBTAG_NODE_BITMAP:
node_sz = hashmap_bitcount(MAP_HEADER_VAL(hdr));
ASSERT(node_sz < 17);
@@ -4175,11 +4178,38 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
}
ptr++;
- ESTACK_RESERVE(s, node_sz);
+ ESTACK_RESERVE(s, node_sz*2);
while(node_sz--) {
- ESTACK_FAST_PUSH(s, *ptr++);
+ if (is_list(*ptr)) {
+ Eterm* leaf = list_val(*ptr);
+ if (is_not_list(CAR(leaf))) {
+ ESTACK_FAST_PUSH(s, CAR(leaf));
+ }
+ else {
+ if ((m = is_string(CAR(leaf))) && (m < MAX_STRING_LEN)) {
+ result += m + 2 + 1;
+ } else {
+ result += 5;
+ ESTACK_FAST_PUSH(s, CAR(leaf));
+ }
+ }
+ if (is_not_list(CDR(leaf))) {
+ ESTACK_FAST_PUSH(s, CDR(leaf));
+ }
+ else {
+ if ((m = is_string(CDR(leaf))) && (m < MAX_STRING_LEN)) {
+ result += m + 2 + 1;
+ } else {
+ result += 5;
+ ESTACK_FAST_PUSH(s, CDR(leaf));
+ }
+ }
+ }
+ else {
+ ESTACK_FAST_PUSH(s, *ptr);
+ }
+ ptr++;
}
- result += 1 + 4; /* tag + 4 bytes size */
}
break;
case FLOAT_DEF:
diff --git a/erts/emulator/beam/time.c b/erts/emulator/beam/time.c
index 3dfd3f79d4..2bdda6c8af 100644
--- a/erts/emulator/beam/time.c
+++ b/erts/emulator/beam/time.c
@@ -576,7 +576,7 @@ erts_cancel_timer(ErlTimer *p)
{
ErtsTimerWheel *tiw;
ErlCancelProc cancel;
- void *arg;
+ void *arg = NULL; /* Shut up faulty warning... */
tiw = get_timer_wheel(p);
if (!tiw)
diff --git a/erts/emulator/sys/unix/sys_time.c b/erts/emulator/sys/unix/sys_time.c
index ea021a27cf..d535457977 100644
--- a/erts/emulator/sys/unix/sys_time.c
+++ b/erts/emulator/sys/unix/sys_time.c
@@ -410,11 +410,7 @@ erts_os_system_time(void)
stime = (ErtsSystemTime) posix_clock_gettime(WALL_CLOCK_ID,
WALL_CLOCK_ID_STR);
-#if defined(OS_MONOTONIC_TIME_USING_CLOCK_GETTIME)
- return stime;
-#else
return adj_stime_time_unit(stime, (Uint32) 1000*1000*1000);
-#endif
}
#endif /* defined(OS_SYSTEM_TIME_USING_CLOCK_GETTIME) */
@@ -516,8 +512,7 @@ ErtsMonotonicTime erts_os_monotonic_time(void)
#if defined(OS_SYSTEM_TIME_USING_CLOCK_GETTIME)
-static void erts_os_times(ErtsMonotonicTime *mtimep,
- ErtsSystemTime *stimep)
+void erts_os_times(ErtsMonotonicTime *mtimep, ErtsSystemTime *stimep)
{
posix_clock_gettime_times(mtimep, stimep);
}
@@ -627,11 +622,7 @@ erts_os_system_time(void)
ErtsSystemTime stime;
stime = (ErtsSystemTime) mach_clock_gettime(WALL_CLOCK_ID,
WALL_CLOCK_ID_STR);
-#if defined(OS_MONOTONIC_TIME_USING_MACH_CLOCK_GET_TIME)
- return stime;
-#else
return adj_stime_time_unit(stime, (Uint32) 1000*1000*1000);
-#endif
}
#endif /* defined(OS_SYSTEM_TIME_USING_MACH_CLOCK_GET_TIME) */
diff --git a/erts/emulator/sys/win32/sys_time.c b/erts/emulator/sys/win32/sys_time.c
index 7fe61084ce..b292d9279e 100644
--- a/erts/emulator/sys/win32/sys_time.c
+++ b/erts/emulator/sys/win32/sys_time.c
@@ -302,7 +302,7 @@ sys_init_time(ErtsSysInitTimeResult *init_resp)
internal_state.w.f.last_tick_count = 0;
init_resp->os_monotonic_time_info.func = "GetTickCount";
- init_resp->os_monotonic_time_info.locked_use = 1;
+ init_resp->os_monotonic_time_info.locked_use = 0;
/* 10-16 ms resolution according to MicroSoft documentation */
init_resp->os_monotonic_time_info.resolution = 100; /* 10 ms */
time_unit = (ErtsMonotonicTime) 1000;
diff --git a/erts/preloaded/ebin/erl_prim_loader.beam b/erts/preloaded/ebin/erl_prim_loader.beam
index c8ec111e57..df768f9ed6 100644
--- a/erts/preloaded/ebin/erl_prim_loader.beam
+++ b/erts/preloaded/ebin/erl_prim_loader.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam
index 7e7ac99b1c..3478a80dd4 100644
--- a/erts/preloaded/ebin/erlang.beam
+++ b/erts/preloaded/ebin/erlang.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_internal.beam b/erts/preloaded/ebin/erts_internal.beam
index ad43962b8b..9ed45b34bf 100644
--- a/erts/preloaded/ebin/erts_internal.beam
+++ b/erts/preloaded/ebin/erts_internal.beam
Binary files differ
diff --git a/erts/preloaded/ebin/init.beam b/erts/preloaded/ebin/init.beam
index f196952ef2..7361139cde 100644
--- a/erts/preloaded/ebin/init.beam
+++ b/erts/preloaded/ebin/init.beam
Binary files differ
diff --git a/erts/preloaded/ebin/otp_ring0.beam b/erts/preloaded/ebin/otp_ring0.beam
index 4d22d8bace..4af9d233b5 100644
--- a/erts/preloaded/ebin/otp_ring0.beam
+++ b/erts/preloaded/ebin/otp_ring0.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_eval.beam b/erts/preloaded/ebin/prim_eval.beam
index efc8347b6e..7c0b49235e 100644
--- a/erts/preloaded/ebin/prim_eval.beam
+++ b/erts/preloaded/ebin/prim_eval.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_file.beam b/erts/preloaded/ebin/prim_file.beam
index 6c49b5185e..00babefbb4 100644
--- a/erts/preloaded/ebin/prim_file.beam
+++ b/erts/preloaded/ebin/prim_file.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_inet.beam b/erts/preloaded/ebin/prim_inet.beam
index f58ee4b4d5..6640a29c62 100644
--- a/erts/preloaded/ebin/prim_inet.beam
+++ b/erts/preloaded/ebin/prim_inet.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_zip.beam b/erts/preloaded/ebin/prim_zip.beam
index 73be297bbb..3d6f1548d0 100644
--- a/erts/preloaded/ebin/prim_zip.beam
+++ b/erts/preloaded/ebin/prim_zip.beam
Binary files differ
diff --git a/erts/preloaded/ebin/zlib.beam b/erts/preloaded/ebin/zlib.beam
index 9eaf8b9e59..3224546179 100644
--- a/erts/preloaded/ebin/zlib.beam
+++ b/erts/preloaded/ebin/zlib.beam
Binary files differ
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl
index 4bbad4df99..fd11c101bc 100644
--- a/erts/preloaded/src/erlang.erl
+++ b/erts/preloaded/src/erlang.erl
@@ -1738,7 +1738,7 @@ start_timer(0, Dest, Msg) ->
orelse (erlang:is_atom(Dest)
andalso Dest /= undefined)),
TimerRef = erlang:make_ref(),
- try Dest ! {timeout, TimerRef, Msg} catch _:_ -> ok end,
+ _ = try Dest ! {timeout, TimerRef, Msg} catch _:_ -> ok end,
TimerRef
catch
_:_ ->
diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl
index e2c3d40f61..e489001532 100644
--- a/erts/preloaded/src/erts_internal.erl
+++ b/erts/preloaded/src/erts_internal.erl
@@ -249,7 +249,7 @@ create_bif_timer() ->
-spec erts_internal:access_bif_timer(Ref) -> Res when
Ref :: reference(),
- Res :: {reference(), pid(), reference()}.
+ Res :: {reference(), pid()} | 'undefined'.
access_bif_timer(_Ref) ->
erlang:nif_error(undefined).
@@ -369,7 +369,7 @@ tsrv_handle_msg({cancel_timeout, BTR, From, Reply, Req, TRef},
false ->
ok;
_ ->
- try From ! {cancel_timer, Req, false} catch _:_ -> ok end
+ _ = try From ! {cancel_timer, Req, false} catch _:_ -> ok end
end,
Nxt;
[{Time, TRef} = TKey] ->
@@ -387,7 +387,7 @@ tsrv_handle_msg({cancel_timeout, BTR, From, Reply, Req, TRef},
false ->
((1000*(Time - RcvTime)) div Unit)
end,
- try From ! {cancel_timer, Req, RT} catch _:_ -> ok end
+ _ = try From ! {cancel_timer, Req, RT} catch _:_ -> ok end
end,
case Time =:= Nxt of
false ->
@@ -406,14 +406,14 @@ tsrv_handle_msg({read_timeout, BTR, From, Req, TRef},
Nxt) ->
case ets:lookup(RTab, TRef) of
[] ->
- try From ! {read_timer, Req, false} catch _:_ -> ok end;
+ _ = try From ! {read_timer, Req, false} catch _:_ -> ok end;
[{Time, TRef}] ->
RcvTime = erlang:monotonic_time(),
RT = case Time =< RcvTime of
true -> 0;
false -> (1000*(Time - RcvTime)) div Unit
end,
- try From ! {read_timer, Req, RT} catch _:_ -> ok end
+ _ = try From ! {read_timer, Req, RT} catch _:_ -> ok end
end,
Nxt;
tsrv_handle_msg({'DOWN', TRef, process, _, _},
@@ -473,6 +473,6 @@ tsrv_handle_timeout(CallTime, #tsrv_state{rtab = RTab,
end,
ets:delete(TTab, TKey),
ets:delete(RTab, TRef),
- try Proc ! Msg catch _:_ -> ok end,
+ _ = try Proc ! Msg catch _:_ -> ok end,
tsrv_handle_timeout(CallTime, S)
end.