pthread_mutex_trylock crashes because _get_curthread() returns null
Date: Sun, 12 Jan 2025 03:35:51 UTC
I am trying to understand this crash:
614│ int
615│ __Tthr_mutex_trylock(pthread_mutex_t *mutex)
616│ {
617│ struct pthread *curthread;
618│ struct pthread_mutex *m;
619│ uint32_t id;
620│ int ret, robust;
621│
622│ ret = check_and_init_mutex(mutex, &m);
623│ if (ret != 0)
624│ return (ret);
625│ curthread = _get_curthread();
626│ id = TID(curthread);
627│ if (m->m_flags & PMUTEX_FLAG_PRIVATE)
628├───────────────> THR_CRITICAL_ENTER(curthread);
Program received signal SIGSEGV, Segmentation fault.
Address not mapped to object.
__Tthr_mutex_trylock (mutex=<optimized out>) at
/disk-samsung/freebsd-src/lib/libthr/thread/thr_mutex.c:628
628 THR_CRITICAL_ENTER(curthread);
The crash occurs at the program startup within the
pthread_mutex_trylock() function.
The immediate cause is that _get_curthread() returned null in curthread.
Testcase: the port databases/qdrant at rev.
e7cee8d22daf5b6360238cad603ca9f96ecd87fd (at version 1.12.5).
How can it be that _get_curthread() returns null?
Shouldn't current thread be always defined?
14.2-STABLE
Thanks,
Yuri