From ed9cc6cc920f61cf1070394d356fc4488fcf599d Mon Sep 17 00:00:00 2001 From: Jim Carroll Date: Tue, 20 Mar 2012 06:46:18 -0400 Subject: handling deadlock around using the dialog progress from python. fixes 10303, fixes 12274, fixes 12581. --- xbmc/interfaces/python/xbmcmodule/dialog.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/xbmc/interfaces/python/xbmcmodule/dialog.cpp b/xbmc/interfaces/python/xbmcmodule/dialog.cpp index 13f94d026b..fb2aed8ba3 100644 --- a/xbmc/interfaces/python/xbmcmodule/dialog.cpp +++ b/xbmc/interfaces/python/xbmcmodule/dialog.cpp @@ -469,18 +469,28 @@ namespace PYXBMC return NULL; } - PyXBMCGUILock(); - CGUIDialogProgress* pDialog= (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); - if (PyXBMCWindowIsNull(pDialog)) return NULL; - ((DialogProgress*)self)->dlg = pDialog; + CGUIDialogProgress* pDialog; + { + CPyThreadState releaseGil; + CSingleLock glock(g_graphicsContext); - pDialog->SetHeading(utf8Line[0]); + pDialog= (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); + if (!pDialog) + { + glock.Leave(); + releaseGil.Restore(); + PyErr_SetString(PyExc_SystemError, "Error: Window is NULL, this is not possible :-)"); + return NULL; + } + ((DialogProgress*)self)->dlg = pDialog; - for (int i = 1; i < 4; i++) - pDialog->SetLine(i - 1,utf8Line[i]); + pDialog->SetHeading(utf8Line[0]); - PyXBMCGUIUnlock(); - pDialog->StartModal(); + for (int i = 1; i < 4; i++) + pDialog->SetLine(i - 1,utf8Line[i]); + + pDialog->StartModal(); + } Py_INCREF(Py_None); return Py_None; -- cgit v1.2.3