Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Mar 2019 22:39:18 +0000
From:      bugzilla-noreply@freebsd.org
To:        gnome@FreeBSD.org
Subject:   maintainer-feedback requested: [Bug 236815] devel/glib20: loops over all possible file descriptors
Message-ID:  <bug-236815-6497-tSEvGlTPeb@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-236815-6497@https.bugs.freebsd.org/bugzilla/>
References:  <bug-236815-6497@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
Bugzilla Automation <bugzilla@FreeBSD.org> has asked freebsd-gnome mailing =
list
<gnome@FreeBSD.org> for maintainer-feedback:
Bug 236815: devel/glib20: loops over all possible file descriptors
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D236815



--- Description ---
For a server having 360GB of RAM and these defaults:

kern.maxfiles: 11520879
kern.maxfilesperproc: 10368783

g_spawn_sync() invokes fork_exec_with_pipes() then do_exec()
and finally fdwalk (set_cloexec, GINT_TO_POINTER(3))

fdwalk() function loops over all possible file descriptors no matter open or
not and does fcntl(X,F_SETFD,FD_CLOEXEC) for every possible X.

So, if I run the Midnight Commander and use F3 (view file) for a file called
"natt.diff", mc_popen() function calls g_spawn_async_with_pipes() then
g_spawn_sync() is called (see above) is over 10 million of system calls (fc=
ntl)
are performed for such a machine. This is quite slow and takes several seco=
nds
in total. "Internal view" is used (per defaults).

This part of glib2 code is not used for Linux, though as it has fdwalk() in=
 its
<stdlib.h>

Here comes full backtrace of mc binary built with debugging symbols and kil=
led
while it was looping:

#0  0x0000000801b984fa in _read () from /lib/libc.so.7
(gdb) bt
#0  0x0000000801b984fa in _read () from /lib/libc.so.7
#1  0x0000000803220c46 in pthread_suspend_all_np () from /lib/libthr.so.3
#2  0x0000000801397a6e in g_spawn_close_pid () from
/usr/local/lib/libglib-2.0.so.0
#3  0x0000000801396b37 in g_spawn_sync () from /usr/local/lib/libglib-2.0.s=
o.0
#4  0x00000008013962e8 in g_spawn_async_with_pipes () from
/usr/local/lib/libglib-2.0.so.0
#5  0x000000000046e47e in mc_popen (command=3D0x803842520 "/bin/sh
/tmp/mc-root/mcextZNX6YZ",
    error=3D0x7fffffffdd58) at utilunix.c:525
#6  0x00000000004f05be in mcview_load_command_output (view=3D0x8038ac180,
    command=3D0x803842520 "/bin/sh /tmp/mc-root/mcextZNX6YZ") at datasource=
.c:391
#7  0x000000000048ac39 in mcview_load (view=3D0x8038ac180,
    command=3D0x803842520 "/bin/sh /tmp/mc-root/mcextZNX6YZ",
    file=3D0x80381b9c0 "/usr/ports/security/ipsec-tools/natt.diff", start_l=
ine=3D0,
search_start=3D0,
    search_end=3D0) at mcviewer.c:312
#8  0x000000000048a9ac in mcview_viewer (command=3D0x803842520 "/bin/sh
/tmp/mc-root/mcextZNX6YZ",
    file_vpath=3D0x8038c16e0, start_line=3D0, search_start=3D0, search_end=
=3D0) at
mcviewer.c:251
#9  0x0000000000423ff1 in exec_extension_view (target=3D0x0,
    cmd=3D0x803842520 "/bin/sh /tmp/mc-root/mcextZNX6YZ",
filename_vpath=3D0x8038c16e0, start_line=3D0)
    at ext.c:376
#10 0x00000000004234cb in exec_extension (target=3D0x0,
filename_vpath=3D0x8038c16e0,
    lc_data=3D0x8038946a0 "%view{ascii} /usr/local/libexec/mc/ext.d/misc.sh=
 view
cat\n\n# ar library\
#11 0x0000000000422c5e in regex_command_for (target=3D0x0,
filename_vpath=3D0x8038c16e0,
    action=3D0x7fffffffe530 "View", script_vpath=3D0x0) at ext.c:1025
#12 0x00000000004d0664 in regex_command (filename_vpath=3D0x8038c16e0,
action=3D0x7fffffffe530 "View")
    at ext.h:30
#13 0x00000000004d053a in view_file_at_line (filename_vpath=3D0x8038c16e0,
plain_view=3D0,
#14 0x00000000004d06a1 in view_file (filename_vpath=3D0x8038c16e0, plain_vi=
ew=3D0,
internal=3D1)
    at cmd.c:600
#15 0x00000000004d0869 in do_view_cmd (normal=3D0) at cmd.c:157
#16 0x00000000004d06bb in view_cmd () at cmd.c:610
#17 0x000000000044478c in midnight_execute_cmd (sender=3D0x8038431c0,
command=3D101)
    at midnight.c:1380
#18 0x0000000000443dc0 in midnight_callback (w=3D0x80385d600, sender=3D0x80=
38431c0,
msg=3DMSG_ACTION,
    parm=3D101, data=3D0x0) at midnight.c:1580
#19 0x000000000041ad1a in send_message (w=3D0x80385d600, sender=3D0x8038431=
c0,
msg=3DMSG_ACTION,
    parm=3D101, data=3D0x0) at widget-common.h:210
#20 0x000000000041aabf in buttonbar_call (bb=3D0x8038431c0, i=3D2) at
buttonbar.c:155
#21 0x000000000041a5e7 in buttonbar_callback (w=3D0x8038431c0, sender=3D0x0,
msg=3DMSG_HOTKEY,
    parm=3D1003, data=3D0x0) at buttonbar.c:172
#22 0x000000000042003a in send_message (w=3D0x8038431c0, sender=3D0x0,
msg=3DMSG_HOTKEY, parm=3D1003,
    data=3D0x0) at widget-common.h:210
#23 0x0000000000421c9a in dlg_try_hotkey (h=3D0x80385d600, d_key=3D1003) at
dialog.c:435
#24 0x00000000004212d1 in dlg_key_event (h=3D0x80385d600, d_key=3D1003) at
dialog.c:480
#25 0x0000000000420da7 in dlg_process_event (h=3D0x80385d600, key=3D1003,
event=3D0x7fffffffe960)
    at dialog.c:1162
#26 0x0000000000421678 in frontend_dlg_run (h=3D0x80385d600) at dialog.c:542
#27 0x00000000004214ae in dlg_run (h=3D0x80385d600) at dialog.c:1193
#28 0x00000000004436bd in do_nc () at midnight.c:1791
#29 0x000000000041054b in main (argc=3D1, argv=3D0x7fffffffeb38) at main.c:=
409



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-236815-6497-tSEvGlTPeb>