[Bug 277065] [libthr] reachable memory
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 277065] [libthr] reachable memory"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 277065] [libthr] reachable memory"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 277065] [libthr] reachable memory"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 15 Feb 2024 12:31:35 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=277065
Bug ID: 277065
Summary: [libthr] reachable memory
Product: Base System
Version: 14.0-RELEASE
Hardware: Any
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: threads
Assignee: threads@FreeBSD.org
Reporter: pjfloyd@wanadoo.fr
This is a follow on from
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276818
Using the same testcase
I see two reachable allocations in Valgrind
==3215== 64 bytes in 1 blocks are still reachable in loss record 2 of 3
==3215== at 0x48518C5: calloc (vg_replace_malloc.c:1601)
==3215== by 0x4C7C772: ??? (in /lib/libthr.so.3)
==3215== by 0x4C75385: ??? (in /lib/libthr.so.3)
==3215== by 0x4C743AE: ??? (in /lib/libthr.so.3)
==3215== by 0x400ABFC: ??? (in /libexec/ld-elf.so.1)
==3215== by 0x40098C8: ??? (in /libexec/ld-elf.so.1)
==3215== by 0x4006B88: ??? (in /libexec/ld-elf.so.1)
==3215==
==3215== 1,664 bytes in 1 blocks are still reachable in loss record 3 of 3
==3215== at 0x48518C5: calloc (vg_replace_malloc.c:1601)
==3215== by 0x4C75374: ??? (in /lib/libthr.so.3)
==3215== by 0x4C743AE: ??? (in /lib/libthr.so.3)
==3215== by 0x400ABFC: ??? (in /libexec/ld-elf.so.1)
==3215== by 0x40098C8: ??? (in /libexec/ld-elf.so.1)
==3215== by 0x4006B88: ??? (in /libexec/ld-elf.so.1)
First problem (for me) is that Valgrind isn't reading debuginfo so I'm not
seeing file and line number.
In gdb if I put breakpoints on those addresses I see that they are
4 breakpoint keep y 0x0000000004c75374 in _thr_alloc at
/usr/src/lib/libthr/thread/thr_list.c:154
5 breakpoint keep y 0x0000000004c7c772 in _sleepq_alloc at
/usr/src/lib/libthr/thread/thr_sleepq.c:66
For some reason gdb doesn't stop on the breakpoints. And if gdb can get file
and line number then so should Valgrind.
The allocations are
if (thread == NULL) {
if (total_threads > MAX_THREADS)
return (NULL);
atomic_fetchadd_int(&total_threads, 1);
thread = calloc(1, sizeof(struct pthread));
if (thread == NULL) {
atomic_fetchadd_int(&total_threads, -1);
return (NULL);
}
if ((thread->sleepqueue = _sleepq_alloc()) == NULL ||
(thread->wake_addr = _thr_alloc_wake_addr()) == NULL) {
thr_destroy(curthread, thread);
atomic_fetchadd_int(&total_threads, -1);
return (NULL);
}
and
struct sleepqueue *
_sleepq_alloc(void)
{
struct sleepqueue *sq;
sq = calloc(1, sizeof(struct sleepqueue));
TAILQ_INIT(&sq->sq_blocked);
SLIST_INIT(&sq->sq_freeq);
return (sq);
}
--
You are receiving this mail because:
You are the assignee for the bug.