Already assigned the IOScheduler's ID in the constructor and use it in the
names of its threads. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34770 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
#include "IOScheduler.h"
|
#include "IOScheduler.h"
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
@@ -103,7 +104,7 @@ IOScheduler::IOScheduler(DMAResource* resource)
|
|||||||
:
|
:
|
||||||
fDMAResource(resource),
|
fDMAResource(resource),
|
||||||
fName(NULL),
|
fName(NULL),
|
||||||
fID(-1),
|
fID(IOSchedulerRoster::Default()->NextID()),
|
||||||
fSchedulerThread(-1),
|
fSchedulerThread(-1),
|
||||||
fRequestNotifierThread(-1),
|
fRequestNotifierThread(-1),
|
||||||
fOperationArray(NULL),
|
fOperationArray(NULL),
|
||||||
@@ -215,14 +216,20 @@ IOScheduler::Init(const char* name)
|
|||||||
// start threads
|
// start threads
|
||||||
char buffer[B_OS_NAME_LENGTH];
|
char buffer[B_OS_NAME_LENGTH];
|
||||||
strlcpy(buffer, name, sizeof(buffer));
|
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,
|
fSchedulerThread = spawn_kernel_thread(&_SchedulerThread, buffer,
|
||||||
B_NORMAL_PRIORITY + 2, (void *)this);
|
B_NORMAL_PRIORITY + 2, (void *)this);
|
||||||
if (fSchedulerThread < B_OK)
|
if (fSchedulerThread < B_OK)
|
||||||
return fSchedulerThread;
|
return fSchedulerThread;
|
||||||
|
|
||||||
strlcpy(buffer, name, sizeof(buffer));
|
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,
|
fRequestNotifierThread = spawn_kernel_thread(&_RequestNotifierThread,
|
||||||
buffer, B_NORMAL_PRIORITY + 2, (void *)this);
|
buffer, B_NORMAL_PRIORITY + 2, (void *)this);
|
||||||
if (fRequestNotifierThread < B_OK)
|
if (fRequestNotifierThread < B_OK)
|
||||||
@@ -887,7 +894,6 @@ void
|
|||||||
IOSchedulerRoster::AddScheduler(IOScheduler* scheduler)
|
IOSchedulerRoster::AddScheduler(IOScheduler* scheduler)
|
||||||
{
|
{
|
||||||
AutoLocker<IOSchedulerRoster> locker(this);
|
AutoLocker<IOSchedulerRoster> locker(this);
|
||||||
scheduler->SetID(fNextID++);
|
|
||||||
fSchedulers.Add(scheduler);
|
fSchedulers.Add(scheduler);
|
||||||
locker.Unlock();
|
locker.Unlock();
|
||||||
|
|
||||||
@@ -929,6 +935,14 @@ IOSchedulerRoster::Notify(uint32 eventCode, const IOScheduler* scheduler,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32
|
||||||
|
IOSchedulerRoster::NextID()
|
||||||
|
{
|
||||||
|
AutoLocker<IOSchedulerRoster> locker(this);
|
||||||
|
return fNextID++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
IOSchedulerRoster::IOSchedulerRoster()
|
IOSchedulerRoster::IOSchedulerRoster()
|
||||||
:
|
:
|
||||||
fNextID(1),
|
fNextID(1),
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ public:
|
|||||||
const char* Name() const { return fName; }
|
const char* Name() const { return fName; }
|
||||||
|
|
||||||
int32 ID() const { return fID; }
|
int32 ID() const { return fID; }
|
||||||
void SetID(int32 id) { fID = id; }
|
|
||||||
|
|
||||||
void Dump() const;
|
void Dump() const;
|
||||||
|
|
||||||
@@ -173,6 +172,8 @@ public:
|
|||||||
IORequest* request = NULL,
|
IORequest* request = NULL,
|
||||||
IOOperation* operation = NULL);
|
IOOperation* operation = NULL);
|
||||||
|
|
||||||
|
int32 NextID();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IOSchedulerRoster();
|
IOSchedulerRoster();
|
||||||
~IOSchedulerRoster();
|
~IOSchedulerRoster();
|
||||||
|
|||||||
Reference in New Issue
Block a user