<div dir="ltr">Hi all:<div><br></div><div>When I use the ejabberd, I got a core file. I use gdb to analyzw the reasons. But I did not find the reason. The following is the process of mu analysis:</div><div><br></div><div>=============</div><div><div>[/home/q/ejabberd16.09.1903]# gdb /home/q/erlang1903/lib/erlang/erts-8.3/bin/beam.smp  var/lib/ejabberd/core</div><div>GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)</div><div>Copyright (C) 2010 Free Software Foundation, Inc.</div><div>License GPLv3+: GNU GPL version 3 or later <<a href="http://gnu.org/licenses/gpl.html">http://gnu.org/licenses/gpl.html</a>></div><div>This is free software: you are free to change and redistribute it.</div><div>There is NO WARRANTY, to the extent permitted by law.  Type "show copying"</div><div>and "show warranty" for details.</div><div>This GDB was configured as "x86_64-redhat-linux-gnu".</div><div>For bug reporting instructions, please see:</div><div><<a href="http://www.gnu.org/software/gdb/bugs/">http://www.gnu.org/software/gdb/bugs/</a>>...</div><div>Reading symbols from /home/q/erlang1903/lib/erlang/erts-8.3/bin/beam.smp...done.</div><div>[New Thread 22142]</div><div>[New Thread 22144]</div><div>[New Thread 22153]</div><div>[New Thread 22143]</div><div>[New Thread 22145]</div><div>[New Thread 22130]</div><div>[New Thread 22147]</div><div>[New Thread 22134]</div><div>[New Thread 22150]</div><div>[New Thread 22128]</div><div>[New Thread 22151]</div><div>[New Thread 22131]</div><div>[New Thread 22149]</div><div>[New Thread 22148]</div><div>[New Thread 22156]</div><div>[New Thread 22160]</div><div>[New Thread 22158]</div><div>[New Thread 22136]</div><div>[New Thread 22146]</div><div>[New Thread 22126]</div><div>[New Thread 22138]</div><div>[New Thread 22141]</div><div>[New Thread 22133]</div><div>[New Thread 22135]</div><div>[New Thread 22154]</div><div>[New Thread 22152]</div><div>[New Thread 22162]</div><div>[New Thread 22132]</div><div>[New Thread 22129]</div><div>[New Thread 22140]</div><div>[New Thread 22127]</div><div>[New Thread 22161]</div><div>[New Thread 22159]</div><div>[New Thread 22163]</div><div>[New Thread 22155]</div><div>[New Thread 22137]</div><div>[New Thread 22164]</div><div>[New Thread 22157]</div><div>Missing separate debuginfo for /home/q/erlang1903/lib/erlang/lib/crypto-3.7.3/priv/lib/crypto.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/81/bfdd1fd64e3ab54a08250be06c1206e9f58451</div><div>Missing separate debuginfo for /home/q/erlang1903/lib/erlang/lib/crypto-3.7.3/priv/lib/crypto_callback.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/48/3db7c6adda8b1189f736e2d6add5c27c8519cd</div><div>Missing separate debuginfo for /home/q/ejabberd16.09.1903/lib/fast_yaml-1.0.6/priv/lib/fast_yaml.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/bd/2eda60ce2875f84049772382d146f5463a6b4f</div><div>Missing separate debuginfo for /lib64/libyaml-0.so.2</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/ae/35d9988c86d9305257e3a66c1dabf9a8d26247</div><div>Missing separate debuginfo for /home/q/ejabberd16.09.1903/lib/fast_tls-1.0.7/priv/lib/p1_sha.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/2f/2216be1af770efa084baf2ef9d12379bff0c28</div><div>Missing separate debuginfo for /home/q/ejabberd16.09.1903/lib/fast_tls-1.0.7/priv/lib/fast_tls_drv.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/19/1e48d91446e248dbff31134c9f5d1db9a5a596</div><div>Missing separate debuginfo for /home/q/ejabberd16.09.1903/lib/fast_xml-1.1.15/priv/lib/fxml.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/5b/8c6fd4eb179d16391929c1dcd30c6894c04154</div><div>Missing separate debuginfo for /home/q/ejabberd16.09.1903/lib/fast_xml-1.1.15/priv/lib/fxml_stream.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/8d/56b1d43d23899556c668377ee64129a6bc611f</div><div>Missing separate debuginfo for /home/q/ejabberd16.09.1903/lib/stringprep-1.0.6/priv/lib/stringprep.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/58/3a0dd70b94291dfdcc8072ae0a3d0c0c5d49d2</div><div>Missing separate debuginfo for /home/q/ejabberd16.09.1903/lib/ezlib-1.0.1/priv/lib/ezlib_drv.so</div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/bb/101cc9d2f28f536b249896e08eb342ed38a5c2</div><div>Missing separate debuginfo for </div><div>Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/71/a96b79419fe40ff1706d59ed06d6dbe37c8e97</div><div>Reading symbols from /lib64/libutil.so.1...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libutil.so.1</div><div>Reading symbols from /lib64/libdl.so.2...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libdl.so.2</div><div>Reading symbols from /lib64/libm.so.6...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libm.so.6</div><div>Reading symbols from /lib64/libtinfo.so.5...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libtinfo.so.5</div><div>Reading symbols from /lib64/libpthread.so.0...(no debugging symbols found)...done.</div><div>[Thread debugging using libthread_db enabled]</div><div>Loaded symbols for /lib64/libpthread.so.0</div><div>Reading symbols from /lib64/librt.so.1...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/librt.so.1</div><div>Reading symbols from /lib64/libc.so.6...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libc.so.6</div><div>Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/ld-linux-x86-64.so.2</div><div>Reading symbols from /home/q/erlang1903/lib/erlang/lib/crypto-3.7.3/priv/lib/crypto.so...done.</div><div>Loaded symbols for /home/q/erlang1903/lib/erlang/lib/crypto-3.7.3/priv/lib/crypto.so</div><div>Reading symbols from /usr/lib64/libcrypto.so.10...(no debugging symbols found)...done.</div><div>Loaded symbols for /usr/lib64/libcrypto.so.10</div><div>Reading symbols from //lib64/libz.so.1...(no debugging symbols found)...done.</div><div>Loaded symbols for //lib64/libz.so.1</div><div>Reading symbols from /home/q/erlang1903/lib/erlang/lib/crypto-3.7.3/priv/lib/crypto_callback.so...done.</div><div>Loaded symbols for /home/q/erlang1903/lib/erlang/lib/crypto-3.7.3/priv/lib/crypto_callback.so</div><div>Reading symbols from /home/q/ejabberd16.09.1903/lib/fast_yaml-1.0.6/priv/lib/fast_yaml.so...done.</div><div>Loaded symbols for /home/q/ejabberd16.09.1903/lib/fast_yaml-1.0.6/priv/lib/fast_yaml.so</div><div>Reading symbols from /lib64/libyaml-0.so.2...done.</div><div>Loaded symbols for /lib64/libyaml-0.so.2</div><div>Reading symbols from /home/q/ejabberd16.09.1903/lib/fast_tls-1.0.7/priv/lib/p1_sha.so...done.</div><div>Loaded symbols for /home/q/ejabberd16.09.1903/lib/fast_tls-1.0.7/priv/lib/p1_sha.so</div><div>Reading symbols from /usr/lib64/libssl.so.10...(no debugging symbols found)...done.</div><div>Loaded symbols for /usr/lib64/libssl.so.10</div><div>Reading symbols from /lib64/libgssapi_krb5.so.2...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libgssapi_krb5.so.2</div><div>Reading symbols from /lib64/libkrb5.so.3...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libkrb5.so.3</div><div>Reading symbols from /lib64/libcom_err.so.2...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libcom_err.so.2</div><div>Reading symbols from /lib64/libk5crypto.so.3...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libk5crypto.so.3</div><div>Reading symbols from /lib64/libkrb5support.so.0...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libkrb5support.so.0</div><div>Reading symbols from /lib64/libkeyutils.so.1...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libkeyutils.so.1</div><div>Reading symbols from /lib64/libresolv.so.2...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libresolv.so.2</div><div>Reading symbols from /lib64/libselinux.so.1...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libselinux.so.1</div><div>Reading symbols from /home/q/ejabberd16.09.1903/lib/fast_tls-1.0.7/priv/lib/fast_tls_drv.so...done.</div><div>Loaded symbols for /home/q/ejabberd16.09.1903/lib/fast_tls-1.0.7/priv/lib/fast_tls_drv.so</div><div>Reading symbols from /home/q/ejabberd16.09.1903/lib/fast_xml-1.1.15/priv/lib/fxml.so...done.</div><div>Loaded symbols for /home/q/ejabberd16.09.1903/lib/fast_xml-1.1.15/priv/lib/fxml.so</div><div>Reading symbols from /lib64/libexpat.so.1...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libexpat.so.1</div><div>Reading symbols from /home/q/ejabberd16.09.1903/lib/fast_xml-1.1.15/priv/lib/fxml_stream.so...done.</div><div>Loaded symbols for /home/q/ejabberd16.09.1903/lib/fast_xml-1.1.15/priv/lib/fxml_stream.so</div><div>Reading symbols from /home/q/ejabberd16.09.1903/lib/stringprep-1.0.6/priv/lib/stringprep.so...done.</div><div>Loaded symbols for /home/q/ejabberd16.09.1903/lib/stringprep-1.0.6/priv/lib/stringprep.so</div><div>Reading symbols from /usr/lib64/libstdc++.so.6...(no debugging symbols found)...done.</div><div>Loaded symbols for /usr/lib64/libstdc++.so.6</div><div>Reading symbols from /lib64/libgcc_s.so.1...(no debugging symbols found)...done.</div><div>Loaded symbols for /lib64/libgcc_s.so.1</div><div>Reading symbols from /home/q/ejabberd16.09.1903/lib/ezlib-1.0.1/priv/lib/ezlib_drv.so...done.</div><div>Loaded symbols for /home/q/ejabberd16.09.1903/lib/ezlib-1.0.1/priv/lib/ezlib_drv.so</div><div>Core was generated by `/home/q/erlang1903/lib/erlang/erts-8.3/bin/beam.smp -K true -P 1000000 -- -root'.</div><div>Program terminated with signal 11, Segmentation fault.</div><div>#0  0x0000003e4f2766cb in ?? () from /usr/lib64/libcrypto.so.10</div><div>Missing separate debuginfos, use: debuginfo-install expat-2.0.1-11.el6_2.x86_64 glibc-2.12-1.149.el6_6.5.x86_64 keyutils-libs-1.4-5.el6.x86_64 krb5-libs-1.10.3-33.el6.x86_64 libcom_err-1.41.12-21.el6.x86_64 libgcc-4.4.7-11.el6.x86_64 libselinux-2.0.94-5.8.el6.x86_64 libstdc++-4.4.7-11.el6.x86_64 ncurses-libs-5.7-3.20090208.el6.x86_64 openssl-1.0.1e-30.el6_6.5.x86_64 zlib-1.2.3-29.el6.x86_64</div><div>(gdb) source /home/q/lffan.liu/otp_src_19.3/erts/etc/unix/<a href="http://etp-commands.in">etp-commands.in</a></div><div>%---------------------------------------------------------------------------</div><div>% Use etp-help for a command overview and general help.</div><div>%</div><div>% To use the Erlang support module, the environment variable ROOTDIR</div><div>% must be set to the toplevel installation directory of Erlang/OTP,</div><div>% so the etp-commands file becomes:</div><div>%     $ROOTDIR/erts/etc/unix/etp-commands</div><div>% Also, erl and erlc must be in the path.</div><div>%---------------------------------------------------------------------------</div><div>etp-set-max-depth 20</div><div>etp-set-max-string-length 100</div><div>--------------- System Information ---------------</div><div>OTP release: 19</div><div>ERTS version: 8.3</div><div>Compile date: Sat Sep 30 10:12:09 2017</div><div>Arch: x86_64-unknown-linux-gnu</div><div>Endianness: Little</div><div>Word size: 64-bit</div><div>HiPE support: yes</div><div>SMP support: yes</div><div>Thread support: yes</div><div>Kernel poll: Supported and used</div><div>Debug compiled: no</div><div>Lock checking: no</div><div>Lock counting: no</div><div>Node name: 'ejabberd@l-ejab2.vc.cn5'</div><div>Number of schedulers: 24</div><div>Number of async-threads: 10</div><div>--------------------------------------------------</div><div>(gdb) bt</div><div>#0  0x0000003e4f2766cb in ?? () from /usr/lib64/libcrypto.so.10</div><div>#1  0xca62c1d6ca62c1d6 in ?? ()</div><div>#2  0xca62c1d6ca62c1d6 in ?? ()</div><div>#3  0xca62c1d6ca62c1d6 in ?? ()</div><div>#4  0xca62c1d6ca62c1d6 in ?? ()</div><div>#5  0xca62c1d6ca62c1d6 in ?? ()</div><div>#6  0xca62c1d6ca62c1d6 in ?? ()</div><div>#7  0xca62c1d6ca62c1d6 in ?? ()</div><div>#8  0xca62c1d6ca62c1d6 in ?? ()</div><div>#9  0x0000003e4f5df7fc in ?? () from /usr/lib64/libcrypto.so.10</div><div>#10 0x00007f78ab21d848 in ?? ()</div><div>#11 0x0000000000000023 in ?? ()</div><div>#12 0x0000003e4f272d67 in SHA1_Update () from /usr/lib64/libcrypto.so.10</div><div>#13 0x0000003e4f2e6374 in ?? () from /usr/lib64/libcrypto.so.10</div><div>#14 0x0000003e4f2aac7a in ?? () from /usr/lib64/libcrypto.so.10</div><div>#15 0x0000003e4f2aab18 in ?? () from /usr/lib64/libcrypto.so.10</div><div>#16 0x00007f78f6fba8ec in rand_uniform_nif (env=0x7f793b5fdd80, argc=<value optimized out>, argv=0x7f796bf48200) at crypto.c:2120</div><div>#17 0x000000000043d907 in process_main () at beam/beam_emu.c:3575</div><div>#18 0x00000000004e0cf5 in sched_thread_func (vesdp=0x7f7962c60cc0) at beam/erl_process.c:8206</div><div>#19 0x000000000062ec02 in thr_wrapper (vtwd=<value optimized out>) at pthread/ethread.c:114</div><div>#20 0x0000003e4b6079d1 in start_thread () from /lib64/libpthread.so.0</div><div>#21 0x0000003e4b2e88fd in clone () from /lib64/libc.so.6</div><div>(gdb) f 16</div><div>#16 0x00007f78f6fba8ec in rand_uniform_nif (env=0x7f793b5fdd80, argc=<value optimized out>, argv=0x7f796bf48200) at crypto.c:2120</div><div>2120<span style="white-space:pre">   </span>    BN_pseudo_rand_range(bn_rand, bn_to);   </div><div>(gdb) l</div><div>2115<span style="white-space:pre">            </span>return enif_make_badarg(env);</div><div>2116<span style="white-space:pre">     </span>    }</div><div>2117<span style="white-space:pre">   </span></div><div>2118<span style="white-space:pre">  </span>    bn_to = BN_new();</div><div>2119<span style="white-space:pre">   </span>    BN_sub(bn_to, bn_rand, bn_from);</div><div>2120<span style="white-space:pre">    </span>    BN_pseudo_rand_range(bn_rand, bn_to);      </div><div>2121<span style="white-space:pre">     </span>    BN_add(bn_rand, bn_rand, bn_from);</div><div>2122<span style="white-space:pre">  </span>    dlen = BN_num_bytes(bn_rand);</div><div>2123<span style="white-space:pre">       </span>    data = enif_make_new_binary(env, dlen+4, &ret);</div><div>2124<span style="white-space:pre"> </span>    put_int32(data, dlen);</div><div>(gdb) p *bn_from</div><div>$1 = {d = 0x7f78ab1c5698, top = 0, dmax = 1, neg = 0, flags = 1} </div><div>(gdb) p *bn_rand</div><div>$2 = {d = 0x7f78ab21d748, top = 2, dmax = 2, neg = 0, flags = 1}</div><div>(gdb) p *bn_to</div><div>$3 = {d = 0x7f78ab21d7c8, top = 2, dmax = 2, neg = 0, flags = 1}</div><div>(gdb) p *((*bn_to).d)</div><div>$4 = 0</div><div>(gdb) p *((*bn_from).d)</div><div>$5 = 0</div><div>(gdb) p *((*bn_rand).d)</div><div>$6 = 0</div><div>(gdb) ptype bn_to</div><div>type = struct bignum_st {</div><div>    long unsigned int *d;</div><div>    int top;</div><div>    int dmax;</div><div>    int neg;</div><div>    int flags;</div><div>} *</div><div><div>(gdb) f 17</div><div>#17 0x000000000043d907 in process_main () at beam/beam_emu.c:3575</div><div>3575<span style="white-space:pre">                      </span>nif_bif_result = (*fp)(&env, bif_nif_arity, reg);</div><div>(gdb) info local</div><div>fp = 0x7f78f6fba850 <rand_uniform_nif></div><div>env = {mod_nif = 0x7f796a6c2390, proc = 0x7f79383bfc70, hp = 0x7f788b7ba9b0, hp_end = 0x7f788b7bae30, heap_frag = 0x0, fpe_was_unmasked = 0, tmp_obj_list = 0x0, </div><div>  exception_thrown = 0, tracee = 0x0, exiting = 0}</div><div>vbf = 0x7f78f6fba850</div><div>live_hf_end = 0x0</div><div>nif_bif_result = <value optimized out></div><div>bif_nif_arity = 2</div><div>init_done = 1</div><div>c_p = 0x7f79383bfc70</div><div>reds_used = <value optimized out></div><div>reg = 0x7f796bf48200</div><div>HTOP = 0x0</div><div>E = 0x7f788b7bae30</div><div>I = <value optimized out></div><div>FCALLS = 1798</div><div>freg = 0x7f796bf4a280</div><div>neg_o_reds = 0</div><div>opcodes = {0x43d6bb, 0x43c050, 0x43c164, 0x43d70d, 0x43d648, 0x440afa, 0x43d7c5, 0x440a7d, 0x440f57, 0x43d926, 0x43bf32, 0x43b959, 0x44069f, 0x440865, 0x4405ac, 0x4402e0, 0x4400c0, </div><div>  0x43fed0, 0x43fe9d, 0x43fe71, 0x43ef91, 0x43bb80, 0x43d76b, 0x43d8a6, 0x4407a3, 0x43bdcf, 0x43c0cf, 0x43d987, 0x43f9ab, 0x43d635, 0x43a279, 0x439d0c, 0x43e69b, 0x43f87d, 0x43e710, </div><div>  0x43e761, 0x43d60d, 0x43d5e4, 0x43d5b3, 0x43d583, 0x43d55b, 0x43d52a, 0x43d4eb, 0x43d4ad, 0x43d46f, 0x43d432, 0x43d3f4, 0x43d3b7, 0x43d37a, 0x43d33e, 0x43f32a, 0x43f136, 0x43f0df, </div><div>  0x43efbc, 0x43f09f, 0x43f05f, 0x43ad6e, 0x440b71, 0x43fd7d, 0x440a12, 0x43f7f4, 0x43f66a, 0x43f33a, 0x43f44b, 0x43b642, 0x43bdef, 0x43b8b5, 0x4405fa, 0x43faee, 0x43fa74, 0x440eb2, </div><div>  0x43eb60, 0x43ea58, 0x440d26, 0x43ff96, 0x43ff02, 0x43fdfa, 0x44001a, 0x43e637, 0x440e87, 0x440cff, 0x43ec7d, 0x43e79a, 0x440ce4, 0x440c5c, 0x440c8c, 0x43e89c, 0x440be7, 0x440c30, </div><div>  0x44089a, 0x440c47, 0x440511, 0x440780, 0x440906, 0x440493, 0x44015c, 0x43fc1d, 0x440e60, 0x43e9e0, 0x43e967, 0x43e930, 0x43e901, 0x44019c, 0x44026d, 0x440104, 0x43ebcd, 0x440060, </div><div>  0x44027e, 0x43ba40, 0x43baf3, 0x43b82e, 0x439d84, 0x439dfa, 0x439db5, 0x439e37, 0x44099e, 0x43e30b, 0x439d4b, 0x439d25, 0x43f230, 0x43abf3, 0x43ab98, 0x43acb0, 0x43b9e3, 0x43c157, </div><div>  0x439d0c, 0x43f1dd, 0x43f28a, 0x43f18a, 0x43f2dd, 0x43e8e6, 0x43bd31, 0x43bc59, 0x43b6fd, 0x43f918, 0x440816, 0x4407c3, 0x43d2ca, 0x43d257, 0x43d1e4, 0x43d172, 0x43d113, 0x43d0b5, </div><div>  0x43d057, 0x43dceb, 0x43ae81, 0x43dbf6, 0x43ee7c, 0x43dbc4, 0x43ee56, 0x43dcb0, 0x43dc6c, 0x43dc29, 0x43f6e4, 0x43a2a2, 0x43a56c, 0x43a55f, 0x43adf3, 0x43f58b, 0x43dba6, 0x43db83, </div><div>  0x43db61, 0x43a35d, 0x43ad2d, 0x43db42, 0x43db24, 0x43ad22, 0x43acfd, 0x43afb8, 0x43afdd, 0x43b934, 0x43bf25, 0x439e7c, 0x43f498, 0x43edfa, 0x43a3c9, 0x43a383, 0x439d78, 0x439dee, </div><div>  0x439dad, 0x439e2f, 0x439d43, 0x439d1d, 0x43eea3, 0x43edaf, 0x43ef46, 0x43e593, 0x43fbd0, 0x43e49e, 0x43e544, 0x43ec31, 0x43a548, 0x43a489, 0x43a57a, 0x43db02, 0x43da76, 0x43d946, </div><div>  0x439e61, 0x43f3c7, 0x43f381...}</div><div>pt_arity = <value optimized out></div><div>start_time = 0</div><div>start_time_i = 0x0</div><div>EBS = 0x7f7962c60cf0</div></div><div>[/home/q/ejabberd16.09.1903]#   ls -l /usr/lib64/libcrypto.so.10</div><div>lrwxrwxrwx. 1 root root 19 May  8  2015 /usr/lib64/libcrypto.so.10 -> libcrypto.so.1.0.1e</div><div>[/home/q/ejabberd16.09.1903]#   ls -l /usr/lib64/libcrypto.so.1.0.1e </div><div>-rwxr-xr-x 1 root root 1965856 Jan 21  2015 /usr/lib64/libcrypto.so.1.0.1e</div><div><br></div><div><br></div><div>========</div><div>crypto.c</div><div><br></div><div>2105 static ERL_NIF_TERM rand_uniform_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])</div><div>2106 {/* (Lo,Hi) */</div><div>2107     BIGNUM *bn_from = NULL, *bn_to, *bn_rand;</div><div>2108     unsigned char* data;</div><div>2109     unsigned dlen;</div><div>2110     ERL_NIF_TERM ret;</div><div>2111 </div><div>2112     if (!get_bn_from_mpint(env, argv[0], &bn_from)</div><div>2113         || !get_bn_from_mpint(env, argv[1], &bn_rand)) {</div><div>2114         if (bn_from) BN_free(bn_from);</div><div>2115         return enif_make_badarg(env);</div><div>2116     }</div><div>2117 </div><div>2118     bn_to = BN_new();</div><div>2119     BN_sub(bn_to, bn_rand, bn_from);</div><div>2120     BN_pseudo_rand_range(bn_rand, bn_to);</div><div>2121     BN_add(bn_rand, bn_rand, bn_from);</div><div>2122     dlen = BN_num_bytes(bn_rand);</div><div>2123     data = enif_make_new_binary(env, dlen+4, &ret);</div><div>2124     put_int32(data, dlen);</div><div>2125     BN_bn2bin(bn_rand, data+4);</div><div>2126     ERL_VALGRIND_MAKE_MEM_DEFINED(data+4, dlen);</div><div>2127     BN_free(bn_rand);</div><div>2128     BN_free(bn_from);</div><div>2129     BN_free(bn_to);</div><div>2130     return ret;</div><div>2131 }</div><div>=======</div></div><div><br></div><div><br></div><div><pre style="white-space:pre-wrap;color:rgb(0,0,0)">Thank you for your time.</pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)">Monk Boy</pre></div></div>