snmpa_mib_data_tttn.erl hangs
Alex Hudich <[email protected]> Tue, 7 Feb 2017 01:39:25 +0300
| Newsgroups | gmane.comp.lang.erlang.bugs |
|---|---|
| Message-ID | <[email protected]> |
--===============6701323766919632358==
Content-Type: multipart/alternative; boundary="Apple-Mail=_3F6DD776-3C2E-4891-A468-9BE822881A99"
--Apple-Mail=_3F6DD776-3C2E-4891-A468-9BE822881A99
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=utf-8
Hi!
I was wondering why simple erlang program hangs and consumes a lot of =
memory when it starts agent with simpliest MIB file:
JSM-MIB DEFINITIONS ::=3D BEGIN
IMPORTS
OBJECT-TYPE FROM RFC-1212
experimental FROM RFC1155-SMI
;
=20
jsm OBJECT IDENTIFIER ::=3D { experimental 17780513 =
}
jsmName OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (0..255))
ACCESS read-only
STATUS mandatory
DESCRIPTION =C2=ABDescription=C2=BB
::=3D { jsm 1 }
END
So I've found that in snmpa_mib_data_tttn.erl function integrate_indexes =
creates a huge list of undefined_nodes atoms before it could insert MIB =
data at 17780513 position!
integrate_indexes(CurIndex, [{CurIndex, Data} | T]) ->
[Data | integrate_indexes(CurIndex + 1, T)];
integrate_indexes(_Index, []) ->
[];
integrate_indexes(CurIndex, L) ->
[undefined_node | integrate_indexes(CurIndex + 1, L)].
Why not use maps for the purpose of indexing and just skip unset =
positions?
Alexander Hudich
@alttagil=20
--Apple-Mail=_3F6DD776-3C2E-4891-A468-9BE822881A99
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=utf-8
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
class=3D""><div class=3D""><div class=3D"">Hi!</div><div class=3D""><br =
class=3D""></div><div class=3D"">I was wondering why simple erlang =
program hangs and consumes a lot of memory when it starts agent with =
simpliest MIB file:</div><div class=3D""><br class=3D""></div><div =
class=3D""><br class=3D""></div><div class=3D""><i class=3D"">JSM-MIB =
DEFINITIONS ::=3D BEGIN</i></div><div class=3D""><i class=3D""> =
IMPORTS</i></div><div class=3D""><i =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;"> =
</span> OBJECT-TYPE FROM =
RFC-1212</i></div><div class=3D""><i class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;"> =
</span> experimental FROM =
RFC1155-SMI</i></div><div class=3D""><i class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;"> =
</span> ;</i></div><div class=3D""><i =
class=3D""> </i></div><div class=3D""><i class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;"> =
</span> jsm<span class=3D"Apple-tab-span" style=3D"white-space:=
pre;"> </span>OBJECT IDENTIFIER ::=3D { experimental 17780513 =
}</i></div><div class=3D""><i class=3D""><br class=3D""></i></div><div =
class=3D""><i class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;"> </span> jsmName =
OBJECT-TYPE</i></div><div class=3D""><i class=3D""> =
SYNTAX OCTET STRING (SIZE =
(0..255))</i></div><div class=3D""><i class=3D""> =
ACCESS read-only</i></div><div =
class=3D""><i class=3D""> =
STATUS mandatory</i></div><div class=3D""><i =
class=3D""> =
DESCRIPTION =C2=ABDescription=C2=BB</i></div><div class=3D""><i =
class=3D""> ::=3D { jsm =
1 }</i></div><div class=3D""><i class=3D"">END</i></div></div><div =
class=3D""><br class=3D""></div><div class=3D""><br class=3D""></div><div =
class=3D"">So I've found that in snmpa_mib_data_tttn.erl function =
integrate_indexes creates a huge list of undefined_nodes atoms before it =
could insert MIB data at 17780513 position!</div><div class=3D""><br =
class=3D""></div><div class=3D""><br class=3D""></div><div class=3D""><i =
class=3D"">integrate_indexes(CurIndex, [{CurIndex, Data} | T]) =
-></i></div><div class=3D""><i class=3D""> [Data | =
integrate_indexes(CurIndex + 1, T)];</i></div><div class=3D""><i =
class=3D"">integrate_indexes(_Index, []) -></i></div><div class=3D""><i=
class=3D""> [];</i></div><div class=3D""><i =
class=3D"">integrate_indexes(CurIndex, L) -></i></div><div =
class=3D""><i class=3D""> [undefined_node | =
integrate_indexes(CurIndex + 1, L)].</i></div><div class=3D""><br =
class=3D""></div><div class=3D""><br class=3D""></div><div class=3D"">Why =
not use maps for the purpose of indexing and just skip unset =
positions?</div><div class=3D""><br class=3D""></div><div class=3D""><br =
class=3D""></div><div class=3D"">Alexander Hudich</div><div =
class=3D"">@alttagil </div><div class=3D""><br =
class=3D""></div></body></html>=
--Apple-Mail=_3F6DD776-3C2E-4891-A468-9BE822881A99--
--===============6701323766919632358==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
erlang-bugs mailing list
[email protected]
http://erlang.org/mailman/listinfo/erlang-bugs
--===============6701323766919632358==--