If a task is still in the scheduler priority queue and its
priority is changed, it won't be moved into the correct queue.
We have to track the priority of the scheduled task, so we can
warn the developer to fix the code and actually handle re-start
correctly.
Since we don't want to traverse the whole Scheduler queues on
priority change (which sometimes get very long) to remove the
wrong data item, we'll just invalidate it, if a priority change
is detected.
This also reverts commit d24b264c4a
("vcl opengl: avoid task
priority warning on cursor blink"), which tried to avoid the
warning, which was just half right and independent of the broken
priority change handling.
LO doesn't change priorities of scheduled tasks normally, so
that bug didn't turn out to have much impact, I guess.
Change-Id: I6e46b518a7c3532047c619c013bd8597f73ed7a6
Reviewed-on: https://gerrit.libreoffice.org/69249
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
|
|
#ifndef INCLUDED_VCL_INC_SCHEDULERIMPL_HXX
|
|
#define INCLUDED_VCL_INC_SCHEDULERIMPL_HXX
|
|
|
|
#include "salwtype.hxx"
|
|
#include <osl/mutex.hxx>
|
|
#include <vcl/scheduler.hxx>
|
|
|
|
class Task;
|
|
|
|
// Internal scheduler record holding intrusive linked list pieces
|
|
struct ImplSchedulerData final
|
|
{
|
|
ImplSchedulerData* mpNext; ///< Pointer to the next element in list
|
|
Task* mpTask; ///< Pointer to VCL Task instance
|
|
bool mbInScheduler; ///< Task currently processed?
|
|
sal_uInt64 mnUpdateTime; ///< Last Update Time
|
|
TaskPriority mePriority; ///< Task priority
|
|
|
|
const char *GetDebugName() const;
|
|
};
|
|
|
|
class SchedulerMutex final
|
|
{
|
|
sal_uInt32 mnLockDepth;
|
|
osl::Mutex maMutex;
|
|
|
|
public:
|
|
SchedulerMutex() : mnLockDepth( 0 ) {}
|
|
|
|
void acquire( sal_uInt32 nLockCount = 1 );
|
|
sal_uInt32 release( bool bUnlockAll = false );
|
|
sal_uInt32 lockDepth() const { return mnLockDepth; }
|
|
};
|
|
|
|
class SchedulerGuard final
|
|
{
|
|
public:
|
|
SchedulerGuard()
|
|
{
|
|
Scheduler::Lock();
|
|
}
|
|
|
|
~SchedulerGuard()
|
|
{
|
|
Scheduler::Unlock();
|
|
}
|
|
};
|
|
|
|
#endif // INCLUDED_VCL_INC_SCHEDULERIMPL_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|