Bug 197165

Summary: luit stops working after initial call
Product: [Fedora] Fedora Reporter: Thorsten Scherf <tscherf>
Component: xorg-x11-appsAssignee: Søren Sandmann Pedersen <sandmann>
Status: CLOSED RAWHIDE QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: 5CC: kem
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2006-10-02 19:45:20 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 150223    

Description Thorsten Scherf 2006-06-28 22:57:03 UTC
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:

Comment 1 Søren Sandmann Pedersen 2006-10-02 19:45:20 UTC
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.