From c7338a07311102940a0ddfaf3103ae93b9b26828 Mon Sep 17 00:00:00 2001 From: Bernhard Amann Date: Mon, 25 Jun 2012 14:54:15 -0700 Subject: [PATCH] for bug-searching: set frontend type before starting the thread. This means that the thread type will be output correctly in the error message. return errno string of pthread functions called in thread start --- src/input/Manager.cc | 2 +- src/logging/Manager.cc | 2 +- src/threading/BasicThread.cc | 19 ++++++++++++------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/input/Manager.cc b/src/input/Manager.cc index 63fa59d0bc..9d2333ac9c 100644 --- a/src/input/Manager.cc +++ b/src/input/Manager.cc @@ -255,10 +255,10 @@ ReaderBackend* Manager::CreateBackend(ReaderFrontend* frontend, bro_int_t type) assert(ir->factory); + frontend->ty_name = ir->name; ReaderBackend* backend = (*ir->factory)(frontend); assert(backend); - frontend->ty_name = ir->name; return backend; } diff --git a/src/logging/Manager.cc b/src/logging/Manager.cc index f0b5cc1748..e916922edc 100644 --- a/src/logging/Manager.cc +++ b/src/logging/Manager.cc @@ -191,10 +191,10 @@ WriterBackend* Manager::CreateBackend(WriterFrontend* frontend, bro_int_t type) assert(ld->factory); + frontend->ty_name = ld->name; WriterBackend* backend = (*ld->factory)(frontend); assert(backend); - frontend->ty_name = ld->name; return backend; } diff --git a/src/threading/BasicThread.cc b/src/threading/BasicThread.cc index e590b13434..96d0d5efd2 100644 --- a/src/threading/BasicThread.cc +++ b/src/threading/BasicThread.cc @@ -80,18 +80,23 @@ const char* BasicThread::Fmt(const char* format, ...) void BasicThread::Start() { + int err; + if ( started ) return; - if ( pthread_mutex_init(&terminate, 0) != 0 ) - reporter->FatalError("Cannot create terminate mutex for thread %s", name.c_str()); + err = pthread_mutex_init(&terminate, 0); + if ( err != 0 ) + reporter->FatalError("Cannot create terminate mutex for thread %s:%s", name.c_str(), strerror(err)); // We use this like a binary semaphore and acquire it immediately. - if ( pthread_mutex_lock(&terminate) != 0 ) - reporter->FatalError("Cannot aquire terminate mutex for thread %s", name.c_str()); - - if ( pthread_create(&pthread, 0, BasicThread::launcher, this) != 0 ) - reporter->FatalError("Cannot create thread %s", name.c_str()); + err = pthread_mutex_lock(&terminate); + if ( err != 0 ) + reporter->FatalError("Cannot aquire terminate mutex for thread %s:%s", name.c_str(), strerror(err)); + + err = pthread_create(&pthread, 0, BasicThread::launcher, this); + if ( err != 0 ) + reporter->FatalError("Cannot create thread %s:%s", name.c_str(), strerror(err)); DBG_LOG(DBG_THREADING, "Started thread %s", name.c_str());