Poco AsyncChannel non esce dall’uscita del processo biforcuta

Problema:

Chiama / Inizializza il codice Poco dall’interno di una libreria C, usando loader (programma C di terze parti, il nostro codice è in c ++).

  1. Il programma carica la nostra libreria, la nostra libreria inizializza Poco :: Logger e utilizza AsyncChannel + FileChannel nel registratore.
  2. Forcella da questo processo.
  3. Esegui alcuni thread nel processo figlio.
  4. prova ad uscire dal processo figlio, unendo i thread.
  5. I blocchi del distruttore di AsyncChannel su close (), essenzialmente interrogano la coda e dormono.
  6. _Queue ha 1 elemento sempre quando viene chiamato il distruttore per AsyncChannel, e presumo che ciò sia dovuto al modo in cui il processo genitore è in esecuzione e si biforca.

Ora la domanda: è un problema con gcc che il fork di un processo non chiama i costruttori e duplica semplicemente la memoria? Ho provato a chiamare _queue.clear () all’interno di AsyncChannel :: AsyncChannel () ma nessun risultato …

Qualcuno ha già visto questo problema prima? qualsiasi soluzione proposta?

Risposta qui:

http://pocoproject.org/forum/viewtopic.php?f=10&t=6378

Riepilogo: crea discussioni dopo la fork e non prima. Lo stesso problema con Poco :: Util :: Timer e altre classi anche.