diff --git a/src/system/kernel/device_manager/IOScheduler.cpp b/src/system/kernel/device_manager/IOScheduler.cpp index 4be05a4605..49e2fdc0f6 100644 --- a/src/system/kernel/device_manager/IOScheduler.cpp +++ b/src/system/kernel/device_manager/IOScheduler.cpp @@ -8,6 +8,7 @@ #include "IOScheduler.h" #include +#include #include #include @@ -103,7 +104,7 @@ IOScheduler::IOScheduler(DMAResource* resource) : fDMAResource(resource), fName(NULL), - fID(-1), + fID(IOSchedulerRoster::Default()->NextID()), fSchedulerThread(-1), fRequestNotifierThread(-1), fOperationArray(NULL), @@ -215,14 +216,20 @@ IOScheduler::Init(const char* name) // start threads char buffer[B_OS_NAME_LENGTH]; strlcpy(buffer, name, sizeof(buffer)); - strlcat(buffer, " scheduler", sizeof(buffer)); + strlcat(buffer, " scheduler ", sizeof(buffer)); + size_t nameLength = strlen(buffer); + snprintf(buffer + nameLength, sizeof(buffer) - nameLength, "%" B_PRId32, + fID); fSchedulerThread = spawn_kernel_thread(&_SchedulerThread, buffer, B_NORMAL_PRIORITY + 2, (void *)this); if (fSchedulerThread < B_OK) return fSchedulerThread; strlcpy(buffer, name, sizeof(buffer)); - strlcat(buffer, " notifier", sizeof(buffer)); + strlcat(buffer, " notifier ", sizeof(buffer)); + nameLength = strlen(buffer); + snprintf(buffer + nameLength, sizeof(buffer) - nameLength, "%" B_PRId32, + fID); fRequestNotifierThread = spawn_kernel_thread(&_RequestNotifierThread, buffer, B_NORMAL_PRIORITY + 2, (void *)this); if (fRequestNotifierThread < B_OK) @@ -887,7 +894,6 @@ void IOSchedulerRoster::AddScheduler(IOScheduler* scheduler) { AutoLocker locker(this); - scheduler->SetID(fNextID++); fSchedulers.Add(scheduler); locker.Unlock(); @@ -929,6 +935,14 @@ IOSchedulerRoster::Notify(uint32 eventCode, const IOScheduler* scheduler, } +int32 +IOSchedulerRoster::NextID() +{ + AutoLocker locker(this); + return fNextID++; +} + + IOSchedulerRoster::IOSchedulerRoster() : fNextID(1), diff --git a/src/system/kernel/device_manager/IOScheduler.h b/src/system/kernel/device_manager/IOScheduler.h index baa7b8afdb..42197c3aa1 100644 --- a/src/system/kernel/device_manager/IOScheduler.h +++ b/src/system/kernel/device_manager/IOScheduler.h @@ -81,7 +81,6 @@ public: const char* Name() const { return fName; } int32 ID() const { return fID; } - void SetID(int32 id) { fID = id; } void Dump() const; @@ -173,6 +172,8 @@ public: IORequest* request = NULL, IOOperation* operation = NULL); + int32 NextID(); + private: IOSchedulerRoster(); ~IOSchedulerRoster();