Bug #2517
openInvalid lock sequence (Deadlocks)
Added by nanohcv over 7 years ago. Updated about 7 years ago.
0%
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
invalid_lock_sequence_report_1.txt (1.79 KB) invalid_lock_sequence_report_1.txt | nanohcv, 08/12/2017 11:54 AM | ||
invalid_lock_sequence_report_2.txt (1.89 KB) invalid_lock_sequence_report_2.txt | nanohcv, 08/12/2017 12:12 PM | ||
skinflatplus_locking.patch (3.21 KB) skinflatplus_locking.patch | nanohcv, 08/12/2017 12:18 PM | ||
invalid_lock_sequence_report_3.txt.txt (1.91 KB) invalid_lock_sequence_report_3.txt.txt | nanohcv, 08/24/2017 06:40 PM | ||
skinflatplus_locking2.patch (938 Bytes) skinflatplus_locking2.patch | nanohcv, 08/24/2017 06:41 PM | ||
skinflatplus_locking3.patch (4.33 KB) skinflatplus_locking3.patch | nanohcv, 08/30/2017 05:34 PM |
Updated by Delekhan over 7 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 7 years ago
- File invalid_lock_sequence_report_3.txt.txt invalid_lock_sequence_report_3.txt.txt added
- File skinflatplus_locking2.patch skinflatplus_locking2.patch added
Stimmt, da gibt es auch noch ein Problem.
Report und Patch hab ich angehangen.
Updated by Martin1234 about 7 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.
Updated by Delekhan about 7 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?
Updated by nanohcv about 7 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
Updated by Delekhan about 7 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
Updated by nanohcv about 7 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.
Updated by nanohcv about 7 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).
Updated by Martin1234 about 7 years ago
Der Patch sieht gut aus, werde das am Wochenende übernehmen und dann testen.
Danke für eure Zuarbeit!
Updated by Delekhan about 7 years ago
Der Patch funktioniert seit gestern Abend problemlos bei mir. Vielen Dank für den Fix!