Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

threadWaitQuit returns with the mutex locked, then threadFree destroys it

Chiusa Adatta ai principianti
#85 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
c, cpp
Ambito
cli

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

bug C/C++ code

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

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di webarkit/WebARKitLib

Tutte le issue di webarkit/WebARKitLib

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.