<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>Memory Issue 2:  valgrind reports an enormous number of errors.<o:p></o:p></b></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>At Bob Tenty’s suggestion, I tried running JNOS 2.0k under valgrind to see if there were any memory leaks.  The command used was:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>    valgrind  --test=memcheck  --leak-check=yes  --log-file=valgrind.log  ./jnos.exe -d /opt/jnos<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Valgrind stops reporting after 1000 (default cutoff) errors.  The resulting log file is 13,312 lines long.  I included some sample entries below to show the types of conditions it reported.  Skip to the end to read the summary.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Note that the compiler also gives some warnings about uninitialized values.  <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I don’t know how valuable or accurate this tool is.   But I did try it.  So I’m reporting the results.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Michael<o:p></o:p></p><p class=MsoNormal>N6MEF<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Valgrind.log:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>==6792== Memcheck, a memory error detector<o:p></o:p></p><p class=MsoNormal>==6792== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.<o:p></o:p></p><p class=MsoNormal>==6792== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info<o:p></o:p></p><p class=MsoNormal>==6792== Command: ./jnos.exe -d /opt/jnos<o:p></o:p></p><p class=MsoNormal>==6792== Parent PID: 6779<o:p></o:p></p><p class=MsoNormal>==6792== <o:p></o:p></p><p class=MsoNormal>==6792== Syscall param rt_sigaction(act->sa_mask) points to uninitialised byte(s)<o:p></o:p></p><p class=MsoNormal>==6792==    at 0x58CEDBD: __libc_sigaction (sigaction.c:64)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4803D4: init_sys (unix.c:739)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4A6A8B: ioinit (sessmgr.c:677)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4040B8: main (main.c:553)<o:p></o:p></p><p class=MsoNormal>==6792==  Address 0xfff0002d8 is on thread 1's stack<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>[clipped]<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>==6792== Invalid read of size 8<o:p></o:p></p><p class=MsoNormal>==6792==    at 0x58DF4DA: swapcontext (swapcontext.S:108)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x45613A: stkutil (ksubr.c:127)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x58E17FF: ??? (in /lib/x86_64-linux-gnu/libc-2.19.so)<o:p></o:p></p><p class=MsoNormal>==6792==  Address 0x5e98d18 is 168 bytes inside a block of size 1,104 alloc'd<o:p></o:p></p><p class=MsoNormal>==6792==    at 0x4C2AC3D: malloc (vg_replace_malloc.c:299)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x47F9B4: mallocw (unix.c:255)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x47F9F0: callocw (unix.c:269)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4555DC: newproc (kernel.c:79)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x40422C: main (main.c:620)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>[clipped]<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>==6792== Conditional jump or move depends on uninitialised value(s)<o:p></o:p></p><p class=MsoNormal>==6792==    at 0x453E05: pullup (mbuf.c:408)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4541EB: pullchar (mbuf.c:589)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x44CA85: rrecvchar (sockuser.c:648)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4A72E3: rflush (sessmgr.c:936)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x47FF6A: ding (unix.c:626)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x48047B: giveup (unix.c:773)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x455AA1: pwait (kernel.c:325)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x452310: timerproc (timer.c:37)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x456164: _kicker (ksubr.c:142)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x58E17FF: ??? (in /lib/x86_64-linux-gnu/libc-2.19.so)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>[clipped]<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>==6792== Use of uninitialised value of size 8<o:p></o:p></p><p class=MsoNormal>==6792==    at 0x455D14: delproc (kernel.c:469)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4559DF: alert (kernel.c:268)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x452726: t_alarm (timer.c:223)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4523A0: timerproc (timer.c:59)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x456164: _kicker (ksubr.c:142)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x58E17FF: ??? (in /lib/x86_64-linux-gnu/libc-2.19.so)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>[clipped]<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>==6792== Syscall param rt_sigprocmask(set) points to uninitialised byte(s)<o:p></o:p></p><p class=MsoNormal>==6792==    at 0x58DF48A: swapcontext (swapcontext.S:79)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x455B05: pwait (kernel.c:348)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4523CC: timerproc (timer.c:61)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x456164: _kicker (ksubr.c:142)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x58E17FF: ??? (in /lib/x86_64-linux-gnu/libc-2.19.so)<o:p></o:p></p><p class=MsoNormal>==6792==  Address 0x5e9e2c8 is 312 bytes inside a block of size 1,104 alloc'd<o:p></o:p></p><p class=MsoNormal>==6792==    at 0x4C2AC3D: malloc (vg_replace_malloc.c:299)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x47F9B4: mallocw (unix.c:255)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x47F9F0: callocw (unix.c:269)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x4555DC: newproc (kernel.c:79)<o:p></o:p></p><p class=MsoNormal>==6792==    by 0x40422C: main (main.c:620)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>[clipped]<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>==6792== LEAK SUMMARY:<o:p></o:p></p><p class=MsoNormal>==6792==    definitely lost: 213,313 bytes in 107 blocks<o:p></o:p></p><p class=MsoNormal>==6792==    indirectly lost: 19,543 bytes in 3 blocks<o:p></o:p></p><p class=MsoNormal>==6792==      possibly lost: 1,104 bytes in 1 blocks<o:p></o:p></p><p class=MsoNormal>==6792==    still reachable: 176,149 bytes in 407 blocks<o:p></o:p></p><p class=MsoNormal>==6792==         suppressed: 0 bytes in 0 blocks<o:p></o:p></p><p class=MsoNormal>==6792== Reachable blocks (those to which a pointer was found) are not shown.<o:p></o:p></p><p class=MsoNormal>==6792== To see them, rerun with: --leak-check=full --show-leak-kinds=all<o:p></o:p></p><p class=MsoNormal>==6792== <o:p></o:p></p><p class=MsoNormal>==6792== For counts of detected and suppressed errors, rerun with: -v<o:p></o:p></p><p class=MsoNormal>==6792== Use --track-origins=yes to see where uninitialised values come from<o:p></o:p></p><p class=MsoNormal>==6792== ERROR SUMMARY: 85387 errors from 1052 contexts (suppressed: 0 from 0)<o:p></o:p></p></div></body></html>