Un pthread separado causa pérdidas de memoria

Hay unpérdida de memoria conocida, al terminar un proceso ejecutando pthreads sin unir. Sin embargo, separar el hilo no parece ser una solución. Considere el siguiente ejemplo mínimo:

#include <pthread.h>
#include <stdio.h>

static void* thread(void* _) {
  for(;;); return NULL;
}

int main(void) {
  pthread_attr_t attr; 
  pthread_attr_init(&attr);
  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
  pthread_t tid; pthread_create(&tid, &attr, thread, NULL);
  pthread_attr_destroy(&attr);
  return 0;
}

Se crea un subproceso separado con un bucle infinito y el proceso se termina de inmediato. De acuerdo apthread_detach(3), los recursos del subproceso se deben devolver automáticamente al sistema una vez que se termina todo el proceso. Eso, sin embargo, claramente no es lo que está sucediendo:

gcc -pthread c.c
valgrind --leak-check=full a.out

==9341== Command: a.out
==9341==
==9341==
==9341== HEAP SUMMARY:
==9341==     in use at exit: 272 bytes in 1 blocks
==9341==   total heap usage: 1 allocs, 0 frees, 272 bytes allocated
==9341==
==9341== 272 bytes in 1 blocks are possibly lost in loss record 1 of 1
==9341==    at 0x4C2ABB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9341==    by 0x4012598: _dl_allocate_tls (dl-tls.c:296)
==9341==    by 0x4E3C7B5: pthread_create@@GLIBC_2.2.5 (allocatestack.c:579)
==9341==    by 0x400825: main (in /home/witiko/a.out)
==9341==
==9341== LEAK SUMMARY:
==9341==    definitely lost: 0 bytes in 0 blocks
==9341==    indirectly lost: 0 bytes in 0 blocks
==9341==      possibly lost: 272 bytes in 1 blocks
==9341==    still reachable: 0 bytes in 0 blocks
==9341==         suppressed: 0 bytes in 0 blocks

¿Debería Preocuparme? En el programa real tengo varios hilos de bloqueo, así que, al igual que en el ejemplo mínimo, realmente no puedopthread_join() con ellos. Debería estar llamandopthread_cancel() en lugar deexit()directamente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta