прекращение вызова после броска экземпляра __gnu_cxx :: recursive_init - PullRequest
0 голосов
/ 17 февраля 2010

Я погуглил на ошибку выше; бесполезно.

Эта ошибка возникает из следующей строки кода:

void Thread::join(void** status) {
  pthread_join(thread, status);
}

Кто-нибудь знает, что это значит?

(Google выдвигает другие жалобы на ошибки, но без объяснения причин).

1 Ответ

2 голосов
/ 17 февраля 2010

Ссылка http://www.opensource.apple.com/source/libstdcxx/libstdcxx-5.1/libstdcxx/libstdc++-v3/libsupc++/guard.cc:

namespace __gnu_cxx
{
  // 6.7[stmt.dcl]/4: If control re-enters the declaration (recursively)
  // while the object is being initialized, the behavior is undefined.

  // Since we already have a library function to handle locking, we might
  // as well check for this situation and throw an exception.
  // We use the second byte of the guard variable to remember that we're
  // in the middle of an initialization.
  class recursive_init: public std::exception

....

  static int
  acquire_1 (__guard *g)
  {
    if (_GLIBCXX_GUARD_TEST (g))
      return 0;

    if (recursion_push (g))
      {
#ifdef __EXCEPTIONS
    throw __gnu_cxx::recursive_init();
  ...

Пожалуйста, проверьте, есть ли какие-то статические переменные, которые сами должны быть инициализированы первыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...