Erro ao executar “make check” para glib-2.32.4

1

Recebo o seguinte erro ao instalar o glib .

ERROR:thread.c:147:test_thread4: assertion failed: (thread == NULL).

Qual é o problema e como posso corrigi-lo?

    
por Praveen 26.09.2012 / 08:58

1 resposta

2

Lembre-se que make check em glib vem em último. make check depende do desktop-file-utils-0.20, que por sua vez depende de um glib instalado, portanto, deve-se assegurar que os utilitários desktop-file estejam instalados, funcionando e em uma versão correta antes de executar make check . A maneira canônica seria instalar primeiro o novo glibc, depois o desktop-file-utils e, no final, fazer make check .

Em geral, um erro durante a verificação é um motivo para se preocupar, pelo menos em um ambiente profissional. A falha de um teste pode significar que alguma condição em particular pode colocar o sistema de joelhos, mesmo que o sistema funcione bem 99,99% do tempo.

Neste caso particular, você pode olhar diretamente para o código-fonte do glib para entender o que está acontecendo. Aqui está a função relevante:

/* test that thread creation fails as expected,
 * by setting RLIMIT_NPROC ridiculously low
 */
static void
test_thread4 (void)
{
#ifdef HAVE_PRLIMIT
  struct rlimit ol, nl;
  GThread *thread;
  GError *error;
  gint ret;

  getrlimit (RLIMIT_NPROC, &nl);
  nl.rlim_cur = 1;

  if ((ret = prlimit (getpid(), RLIMIT_NPROC, &nl, &ol)) != 0)
    g_error ("prlimit failed: %s\n", g_strerror (ret));

  error = NULL;
  thread = g_thread_try_new ("a", thread1_func, NULL, &error);
  g_assert (thread == NULL);
  g_assert_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN);
  g_error_free (error);

  if ((ret = prlimit (getpid (), RLIMIT_NPROC, &ol, NULL)) != 0)
    g_error ("resetting RLIMIT_NPROC failed: %s\n", g_strerror (ret));
#endif
}

O erro ocorre na linha

g_assert( thread == NULL ) ;

A função de teste altera o RLIMIT_PROC para um valor de 1 ( nl.rlim_cur=1 , o que limita o número de threads que o processo atual pode ter). Com essa configuração, a criação de um novo thread ( g_thread_try_new() call) deve falhar e retornar NULL . Por alguma razão, isso não acontece.

Existe um bug na suíte de testes, ou um problema com a glibc, ou houve um problema ao construir corretamente a glibc. Em qualquer caso, os valores de retorno incorretos das chamadas da biblioteca de gerenciamento de threads me deixariam muito nervoso.

    
por January 26.09.2012 / 10:05