Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 915827

Summary: app-misc/utimer-0.4-r1 with glibc 2.38-r5: deadlock at exit in countdown mode
Product: Gentoo Linux Reporter: Maciej S. Szmigiero <mail>
Component: Current packagesAssignee: No maintainer - Look at https://wiki.gentoo.org/wiki/Project:Proxy_Maintainers if you want to take care of it <maintainer-needed>
Status: RESOLVED FIXED    
Severity: normal CC: ceamac, jstein, treecleaner
Priority: Normal Keywords: PATCH, PMASKED
Version: unspecified   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Bug Depends on:    
Bug Blocks: 911592    
Attachments: Workaround fix

Description Maciej S. Szmigiero 2023-10-15 16:58:02 UTC
app-misc/utimer-0.4-r1 with (at least) sys-libs/glibc-2.38-r5 deadlocks at exit in the countdown mode.

How to reproduce:
utimer -c 1s

Expected result:
Program counts down to zero, then exits

Actual result:
Program counts down to zero, then locks up (sometimes pressing ENTER a few times lets it exit).

Analysis:
(gdb) thread 1
(gdb) bt
#0  0x00007ffff7c64f16 in __lll_lock_wait_private () at /lib64/libc.so.6
#1  0x00007ffff7c625b5 in _IO_flush_all () at /lib64/libc.so.6
#2  0x00007ffff7c629a6 in _IO_cleanup () at /lib64/libc.so.6
#3  0x00007ffff7c1c270 in __run_exit_handlers () at /lib64/libc.so.6
#4  0x00007ffff7c1c2ac in  () at /lib64/libc.so.6
#5  0x00007ffff7c03e13 in __libc_start_call_main () at /lib64/libc.so.6
#6  0x00007ffff7c03ec5 in __libc_start_main () at /lib64/libc.so.6
#7  0x0000555555556b6a in _start ()
(gdb) thread 2
(gdb) bt
#0  0x00007ffff7cddf8d in read () at /lib64/libc.so.6
#1  0x00007ffff7c5f6f2 in _IO_file_underflow () at /lib64/libc.so.6
#2  0x00007ffff7c61afb in _IO_default_uflow () at /lib64/libc.so.6
#3  0x00007ffff7c5c008 in getc () at /lib64/libc.so.6
#4  0x0000555555557c2c in check_exit_from_user ()
#5  0x00007ffff7e575bd in g_thread_proxy () at /usr/lib64/libglib-2.0.so.0
#6  0x00007ffff7c681ea in start_thread () at /lib64/libc.so.6
#7  0x00007ffff7ceb4a8 in clone3 () at /lib64/libc.so.6

There seems to be no code in utimer to terminate at utimer exit that second thread - which is reading stdio via fgetc().
This causes its fgetc() call to deadlock with glibc atexit handlers run from main thread when it is trying to exit.

A simple patch of switching to fgetc_unlocked() in that second thread seems to let it exit cleanly for me (patch attached).
This might not be THE right solution - cleanly terminating the second thread would be required for that.
Comment 1 Maciej S. Szmigiero 2023-10-15 16:58:40 UTC
Created attachment 872938 [details, diff]
Workaround fix
Comment 2 Larry the Git Cow gentoo-dev 2023-12-31 17:21:58 UTC
The bug has been referenced in the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ebee5f9ed8c1f7393becbf0de2c15948887eadb8

commit ebee5f9ed8c1f7393becbf0de2c15948887eadb8
Author:     Michał Górny <mgorny@gentoo.org>
AuthorDate: 2023-12-31 16:00:03 +0000
Commit:     Michał Górny <mgorny@gentoo.org>
CommitDate: 2023-12-31 17:21:48 +0000

    package.mask: Last rite app-misc/utimer
    
    Bug: https://bugs.gentoo.org/915827
    Signed-off-by: Michał Górny <mgorny@gentoo.org>

 profiles/package.mask | 6 ++++++
 1 file changed, 6 insertions(+)
Comment 3 Larry the Git Cow gentoo-dev 2024-02-02 16:44:54 UTC
The bug has been closed via the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9e57c0fda087323a434a3bfc389873c530594697

commit 9e57c0fda087323a434a3bfc389873c530594697
Author:     Michał Górny <mgorny@gentoo.org>
AuthorDate: 2024-02-02 16:41:40 +0000
Commit:     Michał Górny <mgorny@gentoo.org>
CommitDate: 2024-02-02 16:41:40 +0000

    app-misc/utimer: Remove last-rited pkg
    
    Closes: https://bugs.gentoo.org/915827
    Signed-off-by: Michał Górny <mgorny@gentoo.org>

 app-misc/utimer/Manifest                          |  1 -
 app-misc/utimer/files/utimer-0.4-fno-common.patch | 29 ----------------------
 app-misc/utimer/files/utimer-0.4-locale.patch     | 10 --------
 app-misc/utimer/metadata.xml                      |  5 ----
 app-misc/utimer/utimer-0.4-r1.ebuild              | 30 -----------------------
 profiles/package.mask                             |  6 -----
 6 files changed, 81 deletions(-)