<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 14 (filtered medium)">
<style><!--
/* Font Definitions */
@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:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        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="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">(Thanks for the tip that helped lead to the dlclose() solution.)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Now, I'm running into an issue where the exec plugin's child process hangs in a call to getpwname_r() from inside exec_child().  The hang happens reliably if I use upstart to start collectdmon, which starts collectd.  If I manually start
 collectdmon, everything works the way it is supposed to.  (This hang happened even before I added the dlclose() patch, and it happens earlier in exec_child() than anything done by the dlclose() patch.)  This is with collectd 5.2.0 on Ubuntu 12.04LTS.  The
 'top' command reports 32 logical cpus.  I have only one item that the exec plugin should be calling.  If I gather correctly, my getpwnam_r() comes from Glibc, not from the ifdef'ed function in common.c.  It appears this issue may be related to the following
 issues:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="http://mailman.verplant.org/pipermail/collectd/2010-March/003650.html">http://mailman.verplant.org/pipermail/collectd/2010-March/003650.html</a><o:p></o:p></p>
<p class="MsoNormal"><a href="https://github.com/collectd/collectd/issues/229">https://github.com/collectd/collectd/issues/229</a><o:p></o:p></p>
<p class="MsoNormal"><a href="https://gist.github.com/jessereynolds/2878994">https://gist.github.com/jessereynolds/2878994</a><o:p></o:p></p>
<p class="MsoNormal"><a href="http://www.mail-archive.com/collectd@verplant.org/msg00524.html">http://www.mail-archive.com/collectd@verplant.org/msg00524.html</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">and possibly<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="http://monkey.org/freebsd/archive/freebsd-threads/200307/msg00110.html">http://monkey.org/freebsd/archive/freebsd-threads/200307/msg00110.html</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here's the output of strace on a hung child process:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Process 2435 attached - interrupt to quit<o:p></o:p></p>
<p class="MsoNormal">futex(0x7fd431c3cdb0, FUTEX_WAIT_PRIVATE, 2, NULL<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here's the output of the gdb 'where' command on a hung child process:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">(gdb) where<o:p></o:p></p>
<p class="MsoNormal">#0  0x00007fcf120d09bb in ?? () from /lib/x86_64-linux-gnu/libc.so.6<o:p></o:p></p>
<p class="MsoNormal">#1  0x00007fcf120d591c in ?? () from /lib/x86_64-linux-gnu/libc.so.6<o:p></o:p></p>
<p class="MsoNormal">#2  0x00007fcf120d4f2b in __nss_database_lookup ()<o:p></o:p></p>
<p class="MsoNormal">   from /lib/x86_64-linux-gnu/libc.so.6<o:p></o:p></p>
<p class="MsoNormal">#3  0x00007fcf120d630c in __nss_passwd_lookup2 ()<o:p></o:p></p>
<p class="MsoNormal">   from /lib/x86_64-linux-gnu/libc.so.6<o:p></o:p></p>
<p class="MsoNormal">#4  0x00007fcf1208dac8 in getpwnam_r () from /lib/x86_64-linux-gnu/libc.so.6<o:p></o:p></p>
<p class="MsoNormal">#5  0x00007fcf0c6e38ed in exec_child (pl=0x18e5e90) at exec.c:303<o:p></o:p></p>
<p class="MsoNormal">#6  fork_child (pl=0x18e5e90, fd_in=<optimized out>, fd_out=<optimized out>,
<o:p></o:p></p>
<p class="MsoNormal">    fd_err=0x7fcf09aca5e8) at exec.c:509<o:p></o:p></p>
<p class="MsoNormal">#7  0x00007fcf0c6e3f5e in exec_read_one (arg=0x18e5e90) at exec.c:560<o:p></o:p></p>
<p class="MsoNormal">#8  0x00007fcf12599e9a in start_thread ()<o:p></o:p></p>
<p class="MsoNormal">   from /lib/x86_64-linux-gnu/libpthread.so.0<o:p></o:p></p>
<p class="MsoNormal">#9  0x00007fcf120c2cbd in clone () from /lib/x86_64-linux-gnu/libc.so.6<o:p></o:p></p>
<p class="MsoNormal">#10 0x0000000000000000 in ?? ()<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">(I could compile with --enable-debug, but that's a significant effort and it doesn't appear it would add much info at this point.)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here's /proc/$pid/status for a hung child process:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Name:   collectd<o:p></o:p></p>
<p class="MsoNormal">State:  S (sleeping)<o:p></o:p></p>
<p class="MsoNormal">Tgid:   128026<o:p></o:p></p>
<p class="MsoNormal">Pid:    128026<o:p></o:p></p>
<p class="MsoNormal">PPid:   128018<o:p></o:p></p>
<p class="MsoNormal">TracerPid:      0<o:p></o:p></p>
<p class="MsoNormal">Uid:    0       0       0       0<o:p></o:p></p>
<p class="MsoNormal">Gid:    0       0       0       0<o:p></o:p></p>
<p class="MsoNormal">FDSize: 64<o:p></o:p></p>
<p class="MsoNormal">Groups:<o:p></o:p></p>
<p class="MsoNormal">VmPeak:   624472 kB<o:p></o:p></p>
<p class="MsoNormal">VmSize:   624472 kB<o:p></o:p></p>
<p class="MsoNormal">VmLck:         0 kB<o:p></o:p></p>
<p class="MsoNormal">VmPin:         0 kB<o:p></o:p></p>
<p class="MsoNormal">VmHWM:      1484 kB<o:p></o:p></p>
<p class="MsoNormal">VmRSS:      1484 kB<o:p></o:p></p>
<p class="MsoNormal">VmData:   516584 kB<o:p></o:p></p>
<p class="MsoNormal">VmStk:       136 kB<o:p></o:p></p>
<p class="MsoNormal">VmExe:       164 kB<o:p></o:p></p>
<p class="MsoNormal">VmLib:     10916 kB<o:p></o:p></p>
<p class="MsoNormal">VmPTE:       268 kB<o:p></o:p></p>
<p class="MsoNormal">VmSwap:        0 kB<o:p></o:p></p>
<p class="MsoNormal">Threads:        1<o:p></o:p></p>
<p class="MsoNormal">SigQ:   5/256851<o:p></o:p></p>
<p class="MsoNormal">SigPnd: 0000000000000000<o:p></o:p></p>
<p class="MsoNormal">ShdPnd: 0000000000000000<o:p></o:p></p>
<p class="MsoNormal">SigBlk: 0000000000000000<o:p></o:p></p>
<p class="MsoNormal">SigIgn: 0000000000001000<o:p></o:p></p>
<p class="MsoNormal">SigCgt: 0000000180014202<o:p></o:p></p>
<p class="MsoNormal">CapInh: 0000000000000000<o:p></o:p></p>
<p class="MsoNormal">CapPrm: ffffffffffffffff<o:p></o:p></p>
<p class="MsoNormal">CapEff: ffffffffffffffff<o:p></o:p></p>
<p class="MsoNormal">CapBnd: ffffffffffffffff<o:p></o:p></p>
<p class="MsoNormal">Cpus_allowed:   ffffffff,ffffffff,ffffffff,ffffffff<o:p></o:p></p>
<p class="MsoNormal">Cpus_allowed_list:      0-127<o:p></o:p></p>
<p class="MsoNormal">Mems_allowed:   00000000,00000003<o:p></o:p></p>
<p class="MsoNormal">Mems_allowed_list:      0-1<o:p></o:p></p>
<p class="MsoNormal">voluntary_ctxt_switches:        9<o:p></o:p></p>
<p class="MsoNormal">nonvoluntary_ctxt_switches:     0<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Some documents on the web said getpwnam_r() could hang if using NIS or LDAP.  Here's my /etc/nsswitch.conf:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># /etc/nsswitch.conf<o:p></o:p></p>
<p class="MsoNormal">#<o:p></o:p></p>
<p class="MsoNormal"># Example configuration of GNU Name Service Switch functionality.<o:p></o:p></p>
<p class="MsoNormal"># If you have the `glibc-doc-reference' and `info' packages installed, try:<o:p></o:p></p>
<p class="MsoNormal"># `info libc "Name Service Switch"' for information about this file.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">passwd:         compat<o:p></o:p></p>
<p class="MsoNormal">group:          compat<o:p></o:p></p>
<p class="MsoNormal">shadow:         compat<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">hosts:          files dns<o:p></o:p></p>
<p class="MsoNormal">networks:       files<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">protocols:      db files<o:p></o:p></p>
<p class="MsoNormal">services:       db files<o:p></o:p></p>
<p class="MsoNormal">ethers:         db files<o:p></o:p></p>
<p class="MsoNormal">rpc:            db files<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">netgroup:       nis<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If I gather correctly, 'compat' for the passwd, group, and shadow entries should be equivalent to 'files' if there are no exception items.  The 'netgroup: nis' entry is apparently from the stock Ubuntu installation.  As far as I am aware,
 there is no NIS active for this machine.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Is anyone here acquainted with reasons getpwnam_r() might hang and/or a better solution than adding a 'sleep(1)' mentioned in a reference URL?  (It's likely a sleep wouldn't help my case, because I only have one thing called by the exec
 plugin.)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Robert Riches<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>