Description of problem: when calling an application with luit for the first time, it works without any problems. when calling the app the second time, it just hangs: [tscherf@tiffy ~]$ LANG=de_DE luit slrn Here is the strace output: [tscherf@tiffy ~]$ strace luit slrn execve("/usr/bin/luit", ["luit", "slrn"], [/* 40 vars */]) = 0 brk(0) = 0x88a1000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fb1000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=95054, ...}) = 0 mmap2(NULL, 95054, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f99000 close(3) = 0 open("/usr/lib/libX11.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\374"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1037192, ...}) = 0 mmap2(0x8ab000, 1035876, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x8ab000 mmap2(0x9a4000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf9) = 0x9a4000 close(3) = 0 open("/usr/lib/libfontenc.so.1", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\16\266"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=23432, ...}) = 0 mmap2(0xb60000, 26112, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb60000 mmap2(0xb65000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4) = 0xb65000 close(3) = 0 open("/usr/lib/libz.so.1", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\'\211"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=75632, ...}) = 0 mmap2(0x891000, 77008, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x891000 mmap2(0x8a3000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x11) = 0x8a3000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0JHt\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1532536, ...}) = 0 mmap2(0x72f000, 1254780, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x72f000 mmap2(0x85c000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12d) = 0x85c000 mmap2(0x85f000, 9596, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x85f000 close(3) = 0 open("/usr/lib/libXau.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 k\212\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=9776, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f98000 mmap2(0x8a6000, 11252, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x8a6000 mmap2(0x8a8000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0x8a8000 close(3) = 0 open("/usr/lib/libXdmcp.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220\257"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=20312, ...}) = 0 mmap2(0x9aa000, 21780, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x9aa000 mmap2(0x9af000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4) = 0x9af000 close(3) = 0 open("/lib/libdl.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\274\210"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=16352, ...}) = 0 mmap2(0x88b000, 12412, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x88b000 mmap2(0x88d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0x88d000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f97000 set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f978d0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 mprotect(0x85c000, 8192, PROT_READ) = 0 mprotect(0x88d000, 4096, PROT_READ) = 0 mprotect(0x72b000, 4096, PROT_READ) = 0 munmap(0xb7f99000, 95054) = 0 brk(0) = 0x88a1000 brk(0x88c2000) = 0x88c2000 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=54313024, ...}) = 0 mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7d97000 close(3) = 0 open("/usr/share/X11/locale/locale.alias", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=75106, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fb0000 read(3, "#\t$XdotOrg: xc/nls/locale.alias,"..., 4096) = 4096 read(3, "4\t\t\t\tbr_FR.ISO8859-14\nbr_FR.ISO-"..., 4096) = 4096 read(3, "en.ISO-8859-1\t\t\t\t\ten_US.ISO8859-"..., 4096) = 4096 read(3, "\t\t\tes_ES.ISO8859-15\nes_ES.ISO-88"..., 4096) = 4096 read(3, "A.ISO-8859-15\t\t\t\tfr_CA.ISO8859-1"..., 4096) = 4096 read(3, ".iso88591\t\t\t\t\tit_IT.ISO8859-1\nit"..., 4096) = 4096 read(3, "SO8859-15\nnl_BE@euro\t\t\t\t\tnl_BE.I"..., 4096) = 4096 read(3, "\t\t\t\t\t\tsk_SK.ISO8859-2\nsk_SK\t\t\t\t\t"..., 4096) = 4096 read(3, "SO8859-1\nwa_BE\t\t\t\t\t\twa_BE.ISO885"..., 4096) = 4096 read(3, "mes\nISO8859-1\t\t\t\t\ten_US.ISO8859-"..., 4096) = 4096 read(3, "\t\t\tbg_BG.KOI8-R\nbe_BG.utf8:\t\t\t\t\t"..., 4096) = 4096 read(3, "8859:\t\t\t\t\tde_DE.ISO8859-1\nGER_DE"..., 4096) = 4096 read(3, "R.UTF-8\nes_DO:\t\t\t\t\t\tes_DO.ISO885"..., 4096) = 4096 read(3, "859-1\nfr_BE.88591:\t\t\t\t\tfr_BE.ISO"..., 4096) = 4096 read(3, "d ISO code for Indonesian (now i"..., 4096) = 4096 read(3, "8:\t\t\t\t\tmk_MK.UTF-8\nmr_IN:\t\t\t\t\t\tm"..., 4096) = 4096 read(3, "\t\t\tro_RO.UTF-8\nru:\t\t\t\t\t\tru_RU.IS"..., 4096) = 4096 read(3, "\t\tts_ZA.UTF-8\ntt:\t\t\t\t\t\ttt_RU.TAT"..., 4096) = 4096 read(3, "\thr_HR.ISO8859-2\nhungarian:\t\t\t\t\t"..., 4096) = 1378 read(3, "", 4096) = 0 close(3) = 0 munmap(0xb7fb0000, 4096) = 0 open("/dev/ptmx", O_RDWR) = 3 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(3, TIOCGPTN, [6]) = 0 stat64("/dev/pts/6", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 6), ...}) = 0 statfs("/dev/pts/6", {f_type="DEVPTS_SUPER_MAGIC", f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0 ioctl(3, TIOCSPTLCK, [0]) = 0 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(3, TIOCGPTN, [6]) = 0 stat64("/dev/pts/6", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 6), ...}) = 0 getuid32() = 500 getgid32() = 500 stat64("/dev/pts/6", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 6), ...}) = 0 getgid32() = 500 getuid32() = 500 chown32("/dev/pts/6", 500, 500) = 0 getuid32() = 500 geteuid32() = 500 getgid32() = 500 getegid32() = 500 setuid32(500) = 0 setgid32(500) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7f97918) = 14345 rt_sigaction(SIGWINCH, {0x804b1b0, [], 0}, NULL, 8) = 0 rt_sigaction(SIGCHLD, {0x804b1c0, [], 0}, NULL, 8) = 0 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF Version-Release number of selected component (if applicable): xorg-x11-apps-1.0.1-2 How reproducible: always Steps to Reproduce: 1.call any iso-8859-1 application with luit several times 2. 3. Actual results: it hangs Expected results: working application Additional info:
This is apparently a race condition, where if slrn gets to run before the parent in luit's fork sets the terminal, tcsetattr() will hang. I have put in a patch to make the child wait on the parent, and filed an upstream bug here: https://bugs.freedesktop.org/show_bug.cgi?id=8490 The fix will appear in xorg-x11-apps-7.1-4.fc6.