Stiamo eseguendo il porting di un'app da 10.6 a 10.8. Sto guardando dylib che carichiamo in app. Sto affrontando un crash molto insolito nella coda di lavoro della raccolta di dati obsoleti con il seguente messaggio.Coda di lavoro Crash of Garbage Coda di lavoro se dylib è caricato
malloc: Thread::suspend(): unable to suspend a thread: err = 268435459, Thread 0x111000000: _pthread = 0x108129000, _thread = 0x8b07, _stack_base = 0x108129000, enlivening on, 0 local blocks
Per l'applicazione GCC_ENABLE_OBJC_GC = required
è impostato. Se ho GCC_ENABLE_OBJC_GC = required
in dylib, si bloccherà ancora. Non riesco a disattivare Garbage Collector nell'applicazione. Devo gestirlo in modo anomalo dal mio dylib.
La causa del crash risulta essere che il garbage collector non è in grado di sospendere il thread. (come dice nel registro). Questo thread è stato creato utilizzando thread_create(). Se metto un ciclo indefinito while (con sleep) nel costruttore di dylib, non mi faccio crash. Ottengo crash quando il costruttore ha terminato la sua esecuzione.
È un modo per dire a Garbage Collector di non provare a sospendere il thread? O per aumentare il conteggio dei riferimenti del thread? o tutto ciò che posso fare per impedire a Garbage Collector di interferire con il mio codice dylib.
Può chiarire: cosa si intende per il progetto di utilizzare GC? o no? La mia prima ipotesi è che il dylib che si sta caricando sia stato creato per usare GC, ma la tua applicazione principale no. – ipmcc
Sto semplicemente scrivendo dylib e caricando il dylib causa crash. L'applicazione è stata creata per utilizzare GC (GCC_ENABLE_OBJC_CC = richiesto). Se abilito o disballo il flag su dylib, non importa. Crolla ancora. – MacGeek
quale compilatore usi per i due? versione gcc? Inoltre: quali sono gli obiettivi di distribuzione, gli sdks di base? –