Project

General

Profile

Actions

Bug #2517

open

Invalid lock sequence (Deadlocks)

Added by nanohcv over 6 years ago. Updated over 6 years ago.

Status:
Feedback
Priority:
Normal
Assignee:
Start date:
08/12/2017
Due date:
% Done:

0%

Estimated time:

Description

Wie hier und hier für ein anderes Skin Plugin beschrieben, lockt auch skinflatplus die Timerliste nach einem (noch aktiven) Channel Lock vom VDR.
Siehe dazu das Log invalid_lock_sequence_report_1.txt aus dem Anhang.

Die Timerliste muss hier wohl in einem separaten Thread abgerufen werden (scheint die einzige Möglichkeit zu sein)


Eine weiteres Locking-Problem besteht in der cFlatDisplayMenu::DrawMainMenuWidgetActiveTimers, wo die Schedules-Liste vor der Timers-Liste gelockt wird.
Siehe dazu das Log invalid_lock_sequence_report_2.txt aus dem Anhang.

Um solche Locking-Probleme zu vermeiden, muss die Lock-Reihenfolge eingehalten werden.

Der angehängte Patch skinflatplus_locking.patch behebt die beiden Probleme, ist aber vermutlich nicht die beste Lösung.


Files

Actions #1

Updated by Delekhan over 6 years ago

Ich habe an meinem Rechnern mit diesem Patch eine signifikant erhöhte CPU Last (100%) nach dem abspielen einer Aufnahme. Irgendwo scheint das Locking schief zu laufen und der VDR verschluckt sich. Wäre schön wenn jemand dieses Problem reproduzieren könnte um auszuschließen, dass es nicht an meinem Setup liegt

Updated by nanohcv over 6 years ago

Stimmt, da gibt es auch noch ein Problem.
Report und Patch hab ich angehangen.

Actions #3

Updated by Martin1234 over 6 years ago

  • Status changed from New to Feedback

Danke für die patche. Habe diese übernommen. Wäre schön wenn Ihr noch weiter testen könntet und mir Rückmeldung gebt.
Ich lasse das Ticket noch offen.

Actions #4

Updated by Delekhan over 6 years ago

Ich habe die Patch noch einmal genauer testet und der Patch "skinflatplus_locking.patch" führt in Verbindung mit dem OpenGL-Branch des softhddevices zu 100% CPU Last beim aufrufen von z.B dem Aufzeichnungsmenü. Deaktiviert man den OpenGL Pfad funktioniert alles anstandslos. Handelt es sich nun um ein Problem von softhddevice oder dem Skin?

Actions #5

Updated by nanohcv over 6 years ago

Hast du mal die aktuelle Variante aus dem Git getestet, die alle Patches enthält (also auch den skinflatplus_locking2.patch, mit dem du es anscheinend nicht getestet hast)

Was sagt den das VDR Log

Actions #6

Updated by Delekhan over 6 years ago

Das VDR Log schweigt sich auch mit der aktuellen Version zu dem ganzen bis auf einen Lockingfehler aus. Sobald etwas durch die Menüs navigiert wird geht nach ein paar Sekunden die CPU Last auf 100% hoch.
Im angehängten Log habe ich nur direkt mit der "Aufzeichnungen" Taste das entsprechende Menü aufgerufen.

Aug 29 19:22:54 VDR vdr[954]: [954] [softhddev]CreateOsd: left 24, top 21, level 0, using OpenGL OSD support
Aug 29 19:22:54 VDR vdr[954]: [954] [softhddev]cOglOsd osdLeft 24 osdTop 21 screenWidth 1920 screenHeight 1080
Aug 29 19:22:54 VDR vdr[954]: [954] skinflatplus: create osd SUCCESS left: 24 top: 21 width: 1870 height: 1038
Aug 29 19:22:54 VDR vdr[954]: [954] --- begin invalid lock sequence report
Aug 29 19:22:54 VDR vdr[954]: [954] 960 - - - - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 960 - W - - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 960 - U - - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - - - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - R - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - U - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - R - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - * - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - * - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - U - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - R - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - * - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - * - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - U - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - R - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - * - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - * - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - U - - - - - - - U
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - - R - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 - R * - - - - - - - L
Aug 29 19:22:54 VDR vdr[954]: [954] 954 invalid lock sequence: 2 Channels
Aug 29 19:22:54 VDR vdr[954]: [954] full backtrace:
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/bin/vdr cStateLock::Lock(cStateKey&, bool, int) calling ?? at ??:0
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/bin/vdr cChannels::GetChannelsRead(cStateKey&, int) calling ?? at ??:0
Aug 29 19:22:54 VDR vdr[954]: invalid lock sequence at Di. 29.08. 19:22
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/lib/vdr/plugins/libvdr-skinflatplus.so.2.3.8 cFlatDisplayMenu::DrawItemExtraRecording(cRecording const*, cString) at ??:?
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/lib/vdr/plugins/libvdr-skinflatplus.so.2.3.8 cFlatDisplayMenu::SetItemRecording(cRecording const*, int, bool, bool, int, int, int) at ??:?
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/bin/vdr cMenuRecordingItem::SetMenuItem(cSkinDisplayMenu*, int, bool, bool) calling ?? at ??:0
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/bin/vdr at ??:?
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/bin/vdr cMenuRecordings::cMenuRecordings(char const*, int, bool, cRecordingFilter const*) calling ?? at ??:0
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/bin/vdr cMenuMain::cMenuMain(eOSState, bool) calling ?? at ??:0
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/bin/vdr main calling ?? at ??:0
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/lib/libc.so.6 __libc_start_main at ??:?
Aug 29 19:22:54 VDR vdr[954]: [954] /usr/bin/vdr _start calling ?? at ??:0
Aug 29 19:22:54 VDR vdr[954]: [954] --- end invalid lock sequence report
Aug 29 19:22:54 VDR vdr[954]: [954] --- THERE WILL BE NO FURTHER REPORTS UNTIL VDR IS RESTARTED!
Aug 29 19:23:00 VDR vdr[954]: video: max used PES packet size: 196543
Aug 29 19:23:00 VDR vdr[954]: video: max used PES packet size: 240721

Skinflatplus Konfiguration

skinflatplus.ButtonsShowEmpty = 0
skinflatplus.ChannelDvbapiInfoShow = 0
skinflatplus.ChannelFormatShow = 1
skinflatplus.ChannelIconsShow = 1
skinflatplus.ChannelResolutionAspectShow = 1
skinflatplus.ChannelShowStartTime = 1
skinflatplus.ChannelSimpleAspectFormat = 1
skinflatplus.ChannelTimeLeft = 2
skinflatplus.ChannelWeatherShow = 0
skinflatplus.decorBorderButtonByTheme = 1
skinflatplus.decorBorderButtonSizeUser = 0
skinflatplus.decorBorderButtonTypeUser = 0
skinflatplus.decorBorderChannelByTheme = 1
skinflatplus.decorBorderChannelEPGByTheme = 1
skinflatplus.decorBorderChannelEPGSizeUser = 0
skinflatplus.decorBorderChannelEPGTypeUser = 0
skinflatplus.decorBorderChannelSizeUser = 0
skinflatplus.decorBorderChannelTypeUser = 0
skinflatplus.decorBorderMenuContentByTheme = 1
skinflatplus.decorBorderMenuContentHeadByTheme = 1
skinflatplus.decorBorderMenuContentHeadSizeUser = 0
skinflatplus.decorBorderMenuContentHeadTypeUser = 0
skinflatplus.decorBorderMenuContentSizeUser = 0
skinflatplus.decorBorderMenuContentTypeUser = 0
skinflatplus.decorBorderMenuItemByTheme = 1
skinflatplus.decorBorderMenuItemSizeUser = 0
skinflatplus.decorBorderMenuItemTypeUser = 0
skinflatplus.decorBorderMessageByTheme = 1
skinflatplus.decorBorderMessageSizeUser = 0
skinflatplus.decorBorderMessageTypeUser = 0
skinflatplus.decorBorderReplayByTheme = 1
skinflatplus.decorBorderReplaySizeUser = 0
skinflatplus.decorBorderReplayTypeUser = 0
skinflatplus.decorBorderTopBarByTheme = 1
skinflatplus.decorBorderTopBarSizeUser = 0
skinflatplus.decorBorderTopBarTypeUser = 0
skinflatplus.decorBorderTrackByTheme = 1
skinflatplus.decorBorderTrackSizeUser = 0
skinflatplus.decorBorderTrackTypeUser = 0
skinflatplus.decorBorderVolumeByTheme = 1
skinflatplus.decorBorderVolumeSizeUser = 0
skinflatplus.decorBorderVolumeTypeUser = 0
skinflatplus.DecorIndex = 4
skinflatplus.decorProgressChannelByTheme = 1
skinflatplus.decorProgressChannelSizeUser = 20
skinflatplus.decorProgressChannelTypeUser = 0
skinflatplus.decorProgressMenuItemByTheme = 1
skinflatplus.decorProgressMenuItemSizeUser = 20
skinflatplus.decorProgressMenuItemTypeUser = 0
skinflatplus.decorProgressReplayByTheme = 1
skinflatplus.decorProgressReplaySizeUser = 40
skinflatplus.decorProgressReplayTypeUser = 0
skinflatplus.decorProgressSignalByTheme = 1
skinflatplus.decorProgressSignalSizeUser = 20
skinflatplus.decorProgressSignalTypeUser = 0
skinflatplus.decorProgressVolumeByTheme = 1
skinflatplus.decorProgressVolumeSizeUser = 20
skinflatplus.decorProgressVolumeTypeUser = 0
skinflatplus.decorScrollBarByTheme = 0
skinflatplus.decorScrollBarSizeUser = 12
skinflatplus.decorScrollBarTypeUser = 7
skinflatplus.DiskUsageFree = 1
skinflatplus.DiskUsageShort = 0
skinflatplus.DiskUsageShow = 2
skinflatplus.EpgAdditionalInfoShow = 1
skinflatplus.EpgRerunsShow = 1
skinflatplus.MainMenuItemScale = 0.600000
skinflatplus.MainMenuWidgetActiveTimerHideEmpty = 0
skinflatplus.MainMenuWidgetActiveTimerMaxCount = 3
skinflatplus.MainMenuWidgetActiveTimerPosition = 4
skinflatplus.MainMenuWidgetActiveTimerShow = 0
skinflatplus.MainMenuWidgetActiveTimerShowActive = 1
skinflatplus.MainMenuWidgetActiveTimerShowRecording = 1
skinflatplus.MainMenuWidgetActiveTimerShowRemoteActive = 0
skinflatplus.MainMenuWidgetActiveTimerShowRemoteRecording = 0
skinflatplus.MainMenuWidgetActiveTimerShowRemoteRefreshTime = 1800
skinflatplus.MainMenuWidgetCommandPosition = 8
skinflatplus.MainMenuWidgetCommandShow = 0
skinflatplus.MainMenuWidgetDVBDevicesDiscardNotUsed = 0
skinflatplus.MainMenuWidgetDVBDevicesDiscardUnknown = 0
skinflatplus.MainMenuWidgetDVBDevicesPosition = 2
skinflatplus.MainMenuWidgetDVBDevicesShow = 1
skinflatplus.MainMenuWidgetLastRecMaxCount = 3
skinflatplus.MainMenuWidgetLastRecPosition = 3
skinflatplus.MainMenuWidgetLastRecShow = 0
skinflatplus.MainMenuWidgetsEnable = 1
skinflatplus.MainMenuWidgetSystemInfoPosition = 5
skinflatplus.MainMenuWidgetSystemInfoShow = 0
skinflatplus.MainMenuWidgetSystemUpdatesHideIfZero = 0
skinflatplus.MainMenuWidgetSystemUpdatesPosition = 6
skinflatplus.MainMenuWidgetSystemUpdatesShow = 0
skinflatplus.MainMenuWidgetTemperaturesPosition = 7
skinflatplus.MainMenuWidgetTemperaturesShow = 0
skinflatplus.MainMenuWidgetTimerConflictsHideEmpty = 0
skinflatplus.MainMenuWidgetTimerConflictsPosition = 4
skinflatplus.MainMenuWidgetTimerConflictsShow = 1
skinflatplus.MainMenuWidgetWeatherDays = 5
skinflatplus.MainMenuWidgetWeatherPosition = 1
skinflatplus.MainMenuWidgetWeatherShow = 1
skinflatplus.MainMenuWidgetWeatherType = 1
skinflatplus.marginOsdHor = 5
skinflatplus.marginOsdVer = 10
skinflatplus.MenuChannelShowCount = 1
skinflatplus.MenuChannelView = 2
skinflatplus.MenuContentFullSize = 1
skinflatplus.MenuEventView = 3
skinflatplus.MenuEventViewAllwaysWithDate = 1
skinflatplus.MenuFullOsd = 0
skinflatplus.MenuItemIconsShow = 1
skinflatplus.MenuItemPadding = 2
skinflatplus.MenuItemParseTilde = 1
skinflatplus.MenuItemRecordingClearPercent = 1
skinflatplus.MenuItemRecordingDefaultOldDays = -1
skinflatplus.MenuItemRecordingSeenTreshold = 0.009500
skinflatplus.MenuItemRecordingShowFolderDate = 1
skinflatplus.MenuRecordingShowCount = 1
skinflatplus.MenuRecordingView = 3
skinflatplus.MenuTimerShowCount = 1
skinflatplus.MenuTimerView = 1
skinflatplus.MessageColorPosition = 1
skinflatplus.MessageOffset = 0
skinflatplus.PlaybackWeatherShow = 0
skinflatplus.RecordingAdditionalInfoShow = 1
skinflatplus.RecordingDimmOnPause = 0
skinflatplus.RecordingDimmOnPauseDelay = 20
skinflatplus.RecordingDimmOnPauseOpaque = 240
skinflatplus.RecordingFormatShow = 1
skinflatplus.RecordingResolutionAspectShow = 1
skinflatplus.RecordingSimpleAspectFormat = 1
skinflatplus.ScrollerDelay = 40
skinflatplus.ScrollerEnable = 1
skinflatplus.ScrollerStep = 2
skinflatplus.ScrollerType = 0
skinflatplus.ShortRecordingCount = 0
skinflatplus.SignalQualityShow = 0
skinflatplus.SignalQualityUseColors = 0
skinflatplus.TimeSecsScale = 0.010000
skinflatplus.TopBarFontClockScale = 0.010000
skinflatplus.TopBarFontSize = 0.037000
skinflatplus.TopBarHideClockText = 1
skinflatplus.TopBarMenuIconShow = 1
skinflatplus.TopBarRecConflictsHigh = 2
skinflatplus.TopBarRecConflictsShow = 1
skinflatplus.TopBarRecordingShow = 1
skinflatplus.TVScraperChanInfoPosterSize = 0.010000
skinflatplus.TVScraperChanInfoShowPoster = 1
skinflatplus.TVScraperEPGInfoShowActors = 1
skinflatplus.TVScraperEPGInfoShowPoster = 1
skinflatplus.TVScraperRecInfoShowActors = 1
skinflatplus.TVScraperRecInfoShowPoster = 1
skinflatplus.TVScraperReplayInfoPosterSize = 0.010000
skinflatplus.TVScraperReplayInfoShowPoster = 1
skinflatplus.WeatherFontSize = 0.050000

Actions #7

Updated by nanohcv over 6 years ago

Neben deinen genannten Problem hab ich noch ein weiteres Locking-Problem gefunden. Die sind aber etwas aufwendiger zu beheben.
Werde ich mir am WE mal ansehen, wenn Martin nicht schneller ist.

Actions #8

Updated by nanohcv over 6 years ago

Dank c++11 ließ sich das doch etwas einfacher lösen.
Bitte nochmal mit dem angehängten skinflatplus_locking3.patch Patch probieren (auf die aktuelle Version aus dem GIT anwenden).

Actions #9

Updated by Martin1234 over 6 years ago

Der Patch sieht gut aus, werde das am Wochenende übernehmen und dann testen.
Danke für eure Zuarbeit!

Actions #10

Updated by Delekhan over 6 years ago

Der Patch funktioniert seit gestern Abend problemlos bei mir. Vielen Dank für den Fix!

Actions #11

Updated by Martin1234 over 6 years ago

Patch ist im git. Danke nochmals.

Actions

Also available in: Atom PDF