Fixed infinite loop

- fixed infinite loop while building slider list, when more than one
screen was created (reverted from commit 546f7a2487)
This commit is contained in:
ImJezze 2016-03-02 19:26:09 +01:00
parent 546f7a2487
commit dbdf21ee46
2 changed files with 27 additions and 2 deletions

View File

@ -274,15 +274,39 @@ void windows_osd_interface::update_slider_list()
{ {
for (win_window_info *window = win_window_list; window != nullptr; window = window->m_next) for (win_window_info *window = win_window_list; window != nullptr; window = window->m_next)
{ {
// every created window uses the same renderer
if (window->m_renderer && window->m_renderer->sliders_dirty()) if (window->m_renderer && window->m_renderer->sliders_dirty())
{ {
m_sliders = window->m_renderer->get_slider_list(); build_slider_list();
return; return;
} }
} }
} }
void windows_osd_interface::build_slider_list()
{
m_sliders = nullptr;
slider_state *curr = m_sliders;
for (win_window_info *info = win_window_list; info != nullptr; info = info->m_next)
{
slider_state *window_sliders = info->m_renderer->get_slider_list();
if (window_sliders != nullptr)
{
if (m_sliders == nullptr)
{
m_sliders = curr = window_sliders;
}
else
{
while (curr->next != nullptr)
{
curr = curr->next;
}
curr->next = window_sliders;
}
}
}
}
//============================================================ //============================================================
// winwindow_exit // winwindow_exit
// (main thread) // (main thread)

View File

@ -271,6 +271,7 @@ public:
private: private:
virtual void osd_exit() override; virtual void osd_exit() override;
void build_slider_list();
void update_slider_list(); void update_slider_list();
windows_options & m_options; windows_options & m_options;