diff --git a/src/system/kernel/device_manager/IOScheduler.cpp b/src/system/kernel/device_manager/IOScheduler.cpp index 394c6757e8..4be05a4605 100644 --- a/src/system/kernel/device_manager/IOScheduler.cpp +++ b/src/system/kernel/device_manager/IOScheduler.cpp @@ -910,9 +910,13 @@ void IOSchedulerRoster::Notify(uint32 eventCode, const IOScheduler* scheduler, IORequest* request, IOOperation* operation) { - char eventBuffer[128]; + AutoLocker locker(fNotificationService); + + if (!fNotificationService.HasListeners()) + return; + KMessage event; - event.SetTo(eventBuffer, sizeof(eventBuffer), IO_SCHEDULER_MONITOR); + event.SetTo(fEventBuffer, sizeof(fEventBuffer), IO_SCHEDULER_MONITOR); event.AddInt32("event", eventCode); event.AddPointer("scheduler", scheduler); if (request != NULL) { @@ -921,7 +925,7 @@ IOSchedulerRoster::Notify(uint32 eventCode, const IOScheduler* scheduler, event.AddPointer("operation", operation); } - fNotificationService.Notify(event, eventCode); + fNotificationService.NotifyLocked(event, eventCode); } diff --git a/src/system/kernel/device_manager/IOScheduler.h b/src/system/kernel/device_manager/IOScheduler.h index 54552651e5..baa7b8afdb 100644 --- a/src/system/kernel/device_manager/IOScheduler.h +++ b/src/system/kernel/device_manager/IOScheduler.h @@ -182,6 +182,7 @@ private: int32 fNextID; IOSchedulerList fSchedulers; DefaultNotificationService fNotificationService; + char fEventBuffer[256]; static IOSchedulerRoster sDefaultInstance; };