https://github.com/glycerine/goq is my application, whose master branch now contains the leak fix. There's also a branch of goq there called nanomsg-instrumented that has a vendored copy of nanomsg with all calls to eventfd, socket, pipe, etc logged so that I could bisect down in my code to where the leaking eventfd call was coming from in my code. > On Jan 25, 2015, at 4:42 AM, Amit Das <amit.das@xxxxxxxxxxxxx> wrote: > > Hi > Can you post the code for benefit of all? > >> On 25 Jan 2015 01:35, "Jason E. Aten" <j.e.aten@xxxxxxxxx> wrote: >> I found the leak. It was in my application code, not in the nanomsg library. >> >>> On Sat, Jan 24, 2015 at 7:44 AM, George Lambert <marchon@xxxxxxxxx> wrote: >>> The software library should be cleaning them up on disconnect or abort. >>> >>> I suggest we add track down in the code if and where they are actually >>> released, and make sure that the code is being called properly. >>> >>> G. >>> >>> >>>> On Fri, Jan 23, 2015 at 8:41 PM, Bent Cardan <bent@xxxxxxxxxxxxxxxxxxxx> >>>> wrote: >>>> sockets are files, everything is a file, whatever just use the rm command >>>> >>>>> On Fri, Jan 23, 2015 at 7:24 PM, Jason E. Aten <j.e.aten@xxxxxxxxx> wrote: >>>>> On linux, looking in /proc/PID/fd, it looks the leaked fd are eventfd. >>>>> >>>>> from /proc >>>>> lr-x------ 1 vagrant vagrant 64 Jan 24 00:13 0 -> /dev/null >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 1 -> /dev/pts/5 >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 10 -> socket:[170235] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 11 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 12 -> socket:[173591] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 13 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 14 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 15 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 16 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 17 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 18 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 19 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 2 -> /dev/pts/5 >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 20 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 21 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 22 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 23 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 3 -> /dev/tty >>>>> lr-x------ 1 vagrant vagrant 64 Jan 24 00:13 4 -> /dev/urandom >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 5 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 6 -> anon_inode:[eventpoll] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 7 -> anon_inode:[eventfd] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 8 -> socket:[173551] >>>>> lrwx------ 1 vagrant vagrant 64 Jan 24 00:13 9 -> anon_inode:[eventpoll] >>>>> vagrant@precise64:/proc/15001/fd$ >>>>> >>>>> >>>>>> On Fri, Jan 23, 2015 at 3:20 PM, Jason E. Aten <j.e.aten@xxxxxxxxx> >>>>>> wrote: >>>>>> Does anyone have tips or tricks for tracking down leaking file >>>>>> descriptors? According to lsof, they appear to be pipes (OSX) and >>>>>> "anonymous inodes" (Linux). Any suggestions? I'm at a loss. >>>>>> >>>>>> Details: I'm using push/pull nanomsg (updated yesterday; most recent >>>>>> from github) sockets between a client and a server. It looks like every >>>>>> client connection to the server results in the server leaking more file >>>>>> descriptors. On OSX, I see pipes left open. condensed "lsof -p 34334 >>>>>> -Fnt" output shows these are leaked (OSX): >>>>>> >>>>>> tPIPE:n->0x95df5be7a4700aff >>>>>> >>>>>> tPIPE:n->0x95df5be7a46fee1f >>>>>> >>>>>> tPIPE:n->0x95df5be79ddeb75f >>>>>> >>>>>> tPIPE:n->0x95df5be7a16570df >>>>>> >>>>>> tPIPE:n->0x95df5be7a165702f >>>>>> >>>>>> tPIPE:n->0x95df5be79ddeae6f >>>>>> >>>>>> tPIPE:n->0x95df5be7a47006df >>>>>> >>>>>> tPIPE:n->0x95df5be7ada5a0ff >>>>>> >>>>>> tPIPE:n->0x95df5be7a165912f >>>>>> >>>>>> tPIPE:n->0x95df5be7a46ff0df >>>>>> >>>>>> tPIPE:n->0x95df5be7ac4c2ecf >>>>>> >>>>>> tPIPE:n->0x95df5be7ac4c499f >>>>>> >>>>>> tPIPE:n->0x95df5be7a470041f >>>>>> >>>>>> tPIPE:n->0x95df5be7ac4c554f >>>>>> >>>>>> tPIPE:n->0x95df5be7a46ffbdf >>>>>> >>>>>> tPIPE:n->0x95df5be7a46ff39f >>>>>> >>>>>> tPIPE:n->0x95df5be7a46fe94f >>>>>> >>>>>> tPIPE:n->0x95df5be7a165a1af >>>>>> >>>>>> tPIPE:n->0x95df5be7a470057f >>>>>> >>>>>> tPIPE:n->0x95df5be7a46fe68f >>>>>> >>>>>> On Linux it is anonymous inodes that are leaking. Output from "lsof -p >>>>>> 2332 -Fnt": >>>>>> >>>>>> >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>>> t0000:nanon_inode >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> >>>>> Best regards, >>>>> Jason >>>>> >>>>> -- >>>>> Jason E. Aten, Ph.D. >>>>> j.e.aten@xxxxxxxxx >>>>> 650-429-8602 >>>>> linkedin: https://www.linkedin.com/pub/jason-e-aten-ph-d/18/313/45a >>>> >>>> >>>> >>>> -- >>>> >>>> Bent Cardan >>>> nothingsatisfies.com | bent@xxxxxxxxxxxxxxxxxxxx >>> >>> >>> >>> -- >>> P THINK BEFORE PRINTING: is it really necessary? >>> >>> This e-mail and its attachments are confidential and solely for the >>> intended addressee(s). Do not share or use them without approval. If >>> received in error, contact the sender >>> and delete them. >> >> >> >> -- >> >> Best regards, >> Jason >> >> -- >> Jason E. Aten, Ph.D. >> j.e.aten@xxxxxxxxx >> 650-429-8602 >> linkedin: https://www.linkedin.com/pub/jason-e-aten-ph-d/18/313/45a