{"push_id":998220030,"size":48,"distinct_size":48,"ref":"refs/heads/master","head":"133d31d5885f16dcedb439d4759cc0b109f4213a","before":"2b11f6bb0b2a94cb940c6dac31e58da10d6c2cb0","commits":[{"sha":"2725581a083ab699d54a8628aacbb5696197da98","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"Makefile.in, bootstrap.mk: use @srcdir@\n\nAnother out-of-tree build fix.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/2725581a083ab699d54a8628aacbb5696197da98"},{"sha":"60e2a4860b993eb4e990d22c3d41521d30703f5f","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"pvr/CGUIWindowPVRGuide: #include cleanup\n\nReduce header dependencies.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/60e2a4860b993eb4e990d22c3d41521d30703f5f"},{"sha":"cfa12b4f840877cb0acd9c10744df85ff69684a5","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"epg/GUIEPGGridContainer: don't copy pointers in copy constructor\n\nThe copy constructor initializes m_item, m_lastItem, m_lastChannel\nwith pointers to the original instance.  This will crash quickly.\nFortunately, nobody ever called the copy constructor.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/cfa12b4f840877cb0acd9c10744df85ff69684a5"},{"sha":"2fb4d8a5c162f27e8d54ec436acb8cfaf3dbe7fe","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"epg/GUIEPGGridContainer: add missing CSingleLock in GetChannel(int)\n\nFixes random crashes when UpdateItems() runs while another thread\ninvokes CGUIWindowPVRGuide::UpdateSelectedItemPath() (via\nCGUIWindowPVRBase::Notify() called by CEpgContainer::Notify()).\nUpdateItems() invalidates m_channelItems and its items, while\nGetChannel() dereferences one channel item.\n\nThis is how the crash looks like with gcc's AddressSanitizer:\n\nERROR: AddressSanitizer: heap-use-after-free on address 0x603001b025c8 at pc 0x000000e04b2a bp 0x7f8f8997abf0 sp 0x7f8f8997abe8\nWRITE of size 4 at 0x603001b025c8 thread T19 (EPGUpdater)\n    #0 0xe04b29 in __atomic_add /usr/include/c++/5/ext/atomicity.h:53\n    #1 0xe04b29 in __atomic_add_dispatch /usr/include/c++/5/ext/atomicity.h:96\n    #2 0xe04b29 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy() /usr/include/c++/5/bits/shared_ptr_base.h:134\n    #3 0xe04b29 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(std::__shared_count<(__gnu_cxx::_Lock_policy)2> const&) /usr/include/c++/5/bits/shared_ptr_base.h:666\n    #4 0xe04b29 in std::__shared_ptr<CFileItem, (__gnu_cxx::_Lock_policy)2>::__shared_ptr(std::__shared_ptr<CFileItem, (__gnu_cxx::_Lock_policy)2> const&) /usr/include/c++/5/bits/shared_ptr_base.h:923\n    #5 0xe04b29 in std::shared_ptr<CFileItem>::shared_ptr(std::shared_ptr<CFileItem> const&) /usr/include/c++/5/bits/shared_ptr.h:107\n    #6 0xe04b29 in EPG::CGUIEPGGridContainer::GetChannel(int) /home/max/git/kodi/xbmc/epg/GUIEPGGridContainer.cpp:1411\n    #7 0x17d84c2 in PVR::CGUIWindowPVRGuide::UpdateSelectedItemPath() /home/max/git/kodi/xbmc/pvr/windows/GUIWindowPVRGuide.cpp:140\n    #8 0x17c8f7d in PVR::CGUIWindowPVRBase::Notify(Observable const&, ObservableMessage) /home/max/git/kodi/xbmc/pvr/windows/GUIWindowPVRBase.cpp:90\n    #9 0x16b3566 in Observable::SendMessage(Observable const&, ObservableMessage) /home/max/git/kodi/xbmc/utils/Observer.cpp:149\n    #10 0x16b385e in Observable::NotifyObservers(ObservableMessage) /home/max/git/kodi/xbmc/utils/Observer.cpp:129\n    #11 0xdf16d2 in EPG::CEpgContainer::Notify(Observable const&, ObservableMessage) /home/max/git/kodi/xbmc/epg/EpgContainer.cpp:212\n    #12 0x16b3566 in Observable::SendMessage(Observable const&, ObservableMessage) /home/max/git/kodi/xbmc/utils/Observer.cpp:149\n    #13 0x16b385e in Observable::NotifyObservers(ObservableMessage) /home/max/git/kodi/xbmc/utils/Observer.cpp:129\n    #14 0xde370d in EPG::CEpg::UpdateEntries(EPG::CEpg const&, bool) /home/max/git/kodi/xbmc/epg/Epg.cpp:397\n    #15 0xde38e5 in EPG::CEpg::LoadFromClients(long, long) /home/max/git/kodi/xbmc/epg/Epg.cpp:751\n    #16 0xde4132 in EPG::CEpg::Update(long, long, int, bool) /home/max/git/kodi/xbmc/epg/Epg.cpp:464\n    #17 0xdec052 in EPG::CEpgContainer::UpdateEPG(bool) /home/max/git/kodi/xbmc/epg/EpgContainer.cpp:665\n    #18 0xdf05e5 in EPG::CEpgContainer::Process() /home/max/git/kodi/xbmc/epg/EpgContainer.cpp:364\n    #19 0x1a7d05e in CThread::Action() /home/max/git/kodi/xbmc/threads/Thread.cpp:221\n    #20 0x1a7d565 in CThread::staticThread(void*) /home/max/git/kodi/xbmc/threads/Thread.cpp:131\n    #21 0x7f8fb2582283 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x7283)\n    #22 0x7f8faa78174c in clone (/lib/x86_64-linux-gnu/libc.so.6+0xe874c)","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/2fb4d8a5c162f27e8d54ec436acb8cfaf3dbe7fe"},{"sha":"01788b21a885c747c3673ab7748ef1e4d3535497","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"epg/GUIEPGGridContainer: don't copy CFileItemPtr in GetChannel(int)\n\nUnnecessary overhead.  Work with reference instead.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/01788b21a885c747c3673ab7748ef1e4d3535497"},{"sha":"af86c6bb227abc78d38c99262513dcd1e3250364","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"epg/GUIEPGGridContainer: pass channel number by value\n\nReduce overhead.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/af86c6bb227abc78d38c99262513dcd1e3250364"},{"sha":"4f2ec63048b5f393e3805f6af69ce1a3a7e932da","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"epg/GUIEPGGridContainer: remove unused macro MAXCHANNELS","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/4f2ec63048b5f393e3805f6af69ce1a3a7e932da"},{"sha":"4394f748f7c7e0231afbd8f9a5086a0e1d2ddfe9","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"epg/GUIEPGGridContainer: convert MAXBLOCKS to constexpr\n\nReduce namespace pollution and use C++ instead of CPP.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/4394f748f7c7e0231afbd8f9a5086a0e1d2ddfe9"},{"sha":"76f8b86eef46e1f7335d81f7c71a9bcfadd78012","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"epg/GUIEPGGridContainer: use range-based \"for\"","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/76f8b86eef46e1f7335d81f7c71a9bcfadd78012"},{"sha":"126a8e52f8b620c61603e4faff506c6adfc1540a","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"guilib/GUIBaseContainer: use !empty() instead of size()\n\nCheaper.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/126a8e52f8b620c61603e4faff506c6adfc1540a"},{"sha":"d34115939d1207089753f792e85f313135d5c83a","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"guilib/GUIBaseContainer: use vector::front() instead of vector[0]","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/d34115939d1207089753f792e85f313135d5c83a"},{"sha":"693253b548507c57edf75f9c03b7b57b874832ee","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"guilib/GUIBaseContainer: use range-based \"for\"","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/693253b548507c57edf75f9c03b7b57b874832ee"},{"sha":"5c67c258ac681ecb374608ddb1234900389db549","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"guilib/GUIBaseContainer: use std::list for CGUIListItemLayout\n\nThis reduces the overhead, because resizing the std::vector will\ncreate lots of temporary CGUIListItemLayout copies.  A std::list never\nneeds to move its items.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/5c67c258ac681ecb374608ddb1234900389db549"},{"sha":"b05432427a814885a02a9ae5e4018f2223ad7b85","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"guilib/GUIBaseContainer: emplace CGUIListItemLayout into the std::list\n\nEliminate a temporary copy.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/b05432427a814885a02a9ae5e4018f2223ad7b85"},{"sha":"1999adb671f017260ca54bf6e928b97f354536e0","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"guilib/GUIControlGroup: use range-based \"for\"","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/1999adb671f017260ca54bf6e928b97f354536e0"},{"sha":"1060265641e397393343bdc38165c8855e5c6fc6","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"FileItem: use move operator","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/1060265641e397393343bdc38165c8855e5c6fc6"},{"sha":"ae3e9fa0f6620185734f27cdefd01a21e12ac63d","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"BackgroundInfoLoader: use CFileItemList::IsEmpty() instead of Size()==0","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/ae3e9fa0f6620185734f27cdefd01a21e12ac63d"},{"sha":"d0a8b53ce387a36f5b79794a95a1debc68579ba4","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"addons/Skin: use vector::emplace_back() instead of push_back()","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/d0a8b53ce387a36f5b79794a95a1debc68579ba4"},{"sha":"dd0681484ffa24c939c6f184b9455b430315950b","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"addons/Skin: pass \"const char *\" to CStartupWindow\n\nEliminate a temporary std::string during construction.","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/dd0681484ffa24c939c6f184b9455b430315950b"},{"sha":"d73ab44dc31cf3adec45a0eb2a0a8762e3426200","author":{"email":"0706025b2bbcec1ed8d64822f4eccd96314938d0@duempel.org","name":"Max Kellermann"},"message":"view/GUIViewControl: use vector::emplace_back() instead of push_back()","distinct":true,"url":"https://api.github.com/repos/MaxKellermann/xbmc/commits/d73ab44dc31cf3adec45a0eb2a0a8762e3426200"}]}