[Bug 236815] devel/glib20: loops over all possible file descriptors
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Tue Mar 26 22:39:21 UTC 2019
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236815
Bug ID: 236815
Summary: devel/glib20: loops over all possible file descriptors
Product: Ports & Packages
Version: Latest
Hardware: Any
OS: Any
Status: New
Severity: Affects Some People
Priority: ---
Component: Individual Port(s)
Assignee: gnome at FreeBSD.org
Reporter: eugen at freebsd.org
Flags: maintainer-feedback?(gnome at FreeBSD.org)
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 (fcntl)
are performed for such a machine. This is quite slow and takes several seconds
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 killed
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.so.0
#4 0x00000008013962e8 in g_spawn_async_with_pipes () from
/usr/local/lib/libglib-2.0.so.0
#5 0x000000000046e47e in mc_popen (command=0x803842520 "/bin/sh
/tmp/mc-root/mcextZNX6YZ",
error=0x7fffffffdd58) at utilunix.c:525
#6 0x00000000004f05be in mcview_load_command_output (view=0x8038ac180,
command=0x803842520 "/bin/sh /tmp/mc-root/mcextZNX6YZ") at datasource.c:391
#7 0x000000000048ac39 in mcview_load (view=0x8038ac180,
command=0x803842520 "/bin/sh /tmp/mc-root/mcextZNX6YZ",
file=0x80381b9c0 "/usr/ports/security/ipsec-tools/natt.diff", start_line=0,
search_start=0,
search_end=0) at mcviewer.c:312
#8 0x000000000048a9ac in mcview_viewer (command=0x803842520 "/bin/sh
/tmp/mc-root/mcextZNX6YZ",
file_vpath=0x8038c16e0, start_line=0, search_start=0, search_end=0) at
mcviewer.c:251
#9 0x0000000000423ff1 in exec_extension_view (target=0x0,
cmd=0x803842520 "/bin/sh /tmp/mc-root/mcextZNX6YZ",
filename_vpath=0x8038c16e0, start_line=0)
at ext.c:376
#10 0x00000000004234cb in exec_extension (target=0x0,
filename_vpath=0x8038c16e0,
lc_data=0x8038946a0 "%view{ascii} /usr/local/libexec/mc/ext.d/misc.sh view
cat\n\n# ar library\
#11 0x0000000000422c5e in regex_command_for (target=0x0,
filename_vpath=0x8038c16e0,
action=0x7fffffffe530 "View", script_vpath=0x0) at ext.c:1025
#12 0x00000000004d0664 in regex_command (filename_vpath=0x8038c16e0,
action=0x7fffffffe530 "View")
at ext.h:30
#13 0x00000000004d053a in view_file_at_line (filename_vpath=0x8038c16e0,
plain_view=0,
#14 0x00000000004d06a1 in view_file (filename_vpath=0x8038c16e0, plain_view=0,
internal=1)
at cmd.c:600
#15 0x00000000004d0869 in do_view_cmd (normal=0) at cmd.c:157
#16 0x00000000004d06bb in view_cmd () at cmd.c:610
#17 0x000000000044478c in midnight_execute_cmd (sender=0x8038431c0,
command=101)
at midnight.c:1380
#18 0x0000000000443dc0 in midnight_callback (w=0x80385d600, sender=0x8038431c0,
msg=MSG_ACTION,
parm=101, data=0x0) at midnight.c:1580
#19 0x000000000041ad1a in send_message (w=0x80385d600, sender=0x8038431c0,
msg=MSG_ACTION,
parm=101, data=0x0) at widget-common.h:210
#20 0x000000000041aabf in buttonbar_call (bb=0x8038431c0, i=2) at
buttonbar.c:155
#21 0x000000000041a5e7 in buttonbar_callback (w=0x8038431c0, sender=0x0,
msg=MSG_HOTKEY,
parm=1003, data=0x0) at buttonbar.c:172
#22 0x000000000042003a in send_message (w=0x8038431c0, sender=0x0,
msg=MSG_HOTKEY, parm=1003,
data=0x0) at widget-common.h:210
#23 0x0000000000421c9a in dlg_try_hotkey (h=0x80385d600, d_key=1003) at
dialog.c:435
#24 0x00000000004212d1 in dlg_key_event (h=0x80385d600, d_key=1003) at
dialog.c:480
#25 0x0000000000420da7 in dlg_process_event (h=0x80385d600, key=1003,
event=0x7fffffffe960)
at dialog.c:1162
#26 0x0000000000421678 in frontend_dlg_run (h=0x80385d600) at dialog.c:542
#27 0x00000000004214ae in dlg_run (h=0x80385d600) at dialog.c:1193
#28 0x00000000004436bd in do_nc () at midnight.c:1791
#29 0x000000000041054b in main (argc=1, argv=0x7fffffffeb38) at main.c:409
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-gnome
mailing list