From 83868e649d258eef01571fe71f388acfb24c4f00 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Thu, 4 Dec 2008 00:28:03 +0000 Subject: [PATCH] Defer actually spawning the thread to the call to Run(). The way the thread manager is currently written as a whole won't correctly enforce the thread limit (looking into that, though I think a different approach entirely is merited here anyways), but this at least prevents large numbers of threads from being spawned and sitting in the suspended state in the registrar forever. Fixes ticket #3172. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28774 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/registrar/mime/RegistrarThread.cpp | 18 +++++++++--------- src/servers/registrar/mime/RegistrarThread.h | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/servers/registrar/mime/RegistrarThread.cpp b/src/servers/registrar/mime/RegistrarThread.cpp index 4a0ada91cb..b50faec77e 100644 --- a/src/servers/registrar/mime/RegistrarThread.cpp +++ b/src/servers/registrar/mime/RegistrarThread.cpp @@ -35,17 +35,12 @@ RegistrarThread::RegistrarThread(const char *name, int32 priority, BMessenger ma , fIsFinished(false) , fStatus(B_NO_INIT) , fId(-1) + , fPriority(priority) { fName[0] = 0; status_t err = name && fManagerMessenger.IsValid() ? B_OK : B_BAD_VALUE; - if (!err) { - fId = spawn_thread(&RegistrarThread::EntryFunction, name, - priority, (void*)this); - err = fId >= 0 ? B_OK : fId; - } - if (!err) { + if (err == B_OK) strcpy(fName, name); - } fStatus = err; } @@ -72,8 +67,13 @@ status_t RegistrarThread::Run() { status_t err = InitCheck(); - if (!err) - err = resume_thread(fId); + if (err == B_OK) { + fId = spawn_thread(&RegistrarThread::EntryFunction, fName, + fPriority, (void*)this); + err = fId >= 0 ? B_OK : fId; + if (err == B_OK) + err = resume_thread(fId); + } return err; } diff --git a/src/servers/registrar/mime/RegistrarThread.h b/src/servers/registrar/mime/RegistrarThread.h index 479399551e..48d9edc37b 100644 --- a/src/servers/registrar/mime/RegistrarThread.h +++ b/src/servers/registrar/mime/RegistrarThread.h @@ -40,6 +40,7 @@ private: status_t fStatus; thread_id fId; char fName[B_OS_NAME_LENGTH]; + int32 fPriority; }; #endif // REGISTRAR_THREAD_H