threadWaitQuit returns with the mutex locked, then threadFree destroys it
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 1/5
- Tempo stimato
- Meno di un'ora
- Idoneità per principianti
- 78/100
Direzione di ricerca
Il bug si trova in threadWaitQuit in lib/SRC/ARUtil/thread_sub.c (righe 246-255), che ritorna mantenendo ancora flag->mut; la chiamata a destroy è in threadFree alla riga 198. Leggi entrambe le funzioni per confermare che il lock non viene mai rilasciato sul percorso di ritorno, poi aggiungi pthread_mutex_unlock prima di return 0. È completato quando la funzione esegue l'unlock prima di ritornare e l'esecuzione di ThreadSanitizer non segnala più destroy of a locked mutex a thread_sub.c:198.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
threadWaitQuit() in lib/SRC/ARUtil/thread_sub.c (lines 246-255) locks flag->mut, waits on cond2 until endF == 2, and returns without unlocking. Callers then call threadFree() (line 196+), whose first step is pthread_mutex_destroy(&(*flag)->mut) (line 198): destroying a locked mutex is undefined behaviour in POSIX.
int threadWaitQuit( THREAD_HANDLE_T *flag )
{
pthread_mutex_lock(&(flag->mut));
flag->startF = 2;
pthread_cond_signal(&(flag->cond1));
while (flag->endF != 2) {
pthread_cond_wait(&(flag->cond2), &(flag->mut));
}
return 0; // mut is still locked here
}
Evidence
A ThreadSanitizer run of the NFT core tests (webarkit/jsartoolkitNFT#683, webarkit_nft_core_test, filters ThreadedKpmDetectorTest.*:CoreLifecycleTest.*:CoreTrackingTest.Threaded*) passed 16/16 but reported 61 destroy of a locked mutex warnings, all at threadFree (thread_sub.c:198), reached through trackingInitQuit (KPM worker shutdown) and ar2DeleteHandle (threaded AR2 workers).
Pre-existing: every ARToolKit5 consumer of threadWaitQuit + threadFree has it; glibc tolerates it in practice, which is why it never showed up.
Fix
Add pthread_mutex_unlock(&(flag->mut)); before return 0; in threadWaitQuit. Then a sanitizer CI job could run without suppressions for this file.
- Lingua principale
- C++
- Stelle
- 21
- Fork
- 8
- Merge medio
- 7h 20m
- PR unite (30g)
- 26
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di webarkit/WebARKitLib
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
webarkit/WebARKitLib#114 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 93/100
webarkit/WebARKitLib#107 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
webarkit/WebARKitLib#113 ·
I maintainer di solito rispondono entro 1 giorno
-
configure(): an explicit logLevel equal to arLogLevel does not sync a divergent webarkitLogLevelAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 38/100
webarkit/WebARKitLib#111 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
webarkit/WebARKitLib#110 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di webarkit/WebARKitLib
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
sistemicorp/scripts#62 ·
-
Vim/NeoVim pluginAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
extended_stabilizer: `std::pow(2, p/2.)` in `scalar_t::to_complex()` takes ~40% of runtime on LinuxForse già presa @mehmetniyazikayi l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
Qiskit/qiskit-aer#2502 ·
I maintainer di solito rispondono entro 1 giorno
-
Test failure on FreeBSD: #26 unexpected system_clock sourceForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertalow priority rt_lib tests
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
RobLoach/raylib-cpp#440 · 2 commenti ·