IOSchedulerRoster:
* Lock the notification service and check HasListeners(), so we don't prepare an event message needlessly. * The on-stack buffer for the event message was too small for I/O operation related events. Now a larger buffer belonging to the roster object is used. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34737 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -910,9 +910,13 @@ void
|
|||||||
IOSchedulerRoster::Notify(uint32 eventCode, const IOScheduler* scheduler,
|
IOSchedulerRoster::Notify(uint32 eventCode, const IOScheduler* scheduler,
|
||||||
IORequest* request, IOOperation* operation)
|
IORequest* request, IOOperation* operation)
|
||||||
{
|
{
|
||||||
char eventBuffer[128];
|
AutoLocker<DefaultNotificationService> locker(fNotificationService);
|
||||||
|
|
||||||
|
if (!fNotificationService.HasListeners())
|
||||||
|
return;
|
||||||
|
|
||||||
KMessage event;
|
KMessage event;
|
||||||
event.SetTo(eventBuffer, sizeof(eventBuffer), IO_SCHEDULER_MONITOR);
|
event.SetTo(fEventBuffer, sizeof(fEventBuffer), IO_SCHEDULER_MONITOR);
|
||||||
event.AddInt32("event", eventCode);
|
event.AddInt32("event", eventCode);
|
||||||
event.AddPointer("scheduler", scheduler);
|
event.AddPointer("scheduler", scheduler);
|
||||||
if (request != NULL) {
|
if (request != NULL) {
|
||||||
@@ -921,7 +925,7 @@ IOSchedulerRoster::Notify(uint32 eventCode, const IOScheduler* scheduler,
|
|||||||
event.AddPointer("operation", operation);
|
event.AddPointer("operation", operation);
|
||||||
}
|
}
|
||||||
|
|
||||||
fNotificationService.Notify(event, eventCode);
|
fNotificationService.NotifyLocked(event, eventCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ private:
|
|||||||
int32 fNextID;
|
int32 fNextID;
|
||||||
IOSchedulerList fSchedulers;
|
IOSchedulerList fSchedulers;
|
||||||
DefaultNotificationService fNotificationService;
|
DefaultNotificationService fNotificationService;
|
||||||
|
char fEventBuffer[256];
|
||||||
|
|
||||||
static IOSchedulerRoster sDefaultInstance;
|
static IOSchedulerRoster sDefaultInstance;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user