mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-02-06 18:31:57 +08:00
fix a deadlock bug: https://github.com/VincentWei/minigui/issues/83
This commit is contained in:
@@ -93,7 +93,7 @@ typedef struct tagDC* PDC;
|
||||
# else /* not defined _MGSCHEMA_COMPOSITING */
|
||||
void __mg_lock_recalc_gcrinfo (PDC pdc);
|
||||
void __mg_unlock_gcrinfo (PDC pdc);
|
||||
#define LOCK_GCRINFO(pdc) __mg_lock_recalc_gcrinfo (pdc)
|
||||
#define LOCK_GCRINFO(pdc) if (dc_IsGeneralDC(pdc)) __mg_lock_recalc_gcrinfo (pdc)
|
||||
#define UNLOCK_GCRINFO(pdc) if (dc_IsGeneralDC(pdc)) __mg_unlock_gcrinfo (pdc)
|
||||
# endif /* not defined _MGSCHEMA_COMPOSITING */
|
||||
|
||||
|
||||
@@ -1403,7 +1403,7 @@ static LRESULT WindowMessageHandler(UINT message, PMAINWIN pWin, LPARAM lParam)
|
||||
else {
|
||||
from = 0;
|
||||
}
|
||||
|
||||
|
||||
lock_zi_for_read (zi);
|
||||
|
||||
from = __kernel_get_next_znode (zi, from);
|
||||
@@ -1821,7 +1821,7 @@ static void dskRefreshAllWindow (const RECT* invrc)
|
||||
info.is_empty_invrc = TRUE;
|
||||
|
||||
#ifdef _MGHAVE_MENU
|
||||
dskForceCloseMenu ();
|
||||
dskForceCloseMenu ();
|
||||
#endif
|
||||
|
||||
SendMessage (HWND_DESKTOP, MSG_ERASEDESKTOP, 0,
|
||||
|
||||
@@ -611,7 +611,11 @@ static inline void unlock_zi_for_change (const ZORDERINFO* zi)
|
||||
|
||||
static inline void lock_zi_for_read (const ZORDERINFO* zi)
|
||||
{
|
||||
pthread_rwlock_rdlock(&((ZORDERINFO*)zi)->rwlock);
|
||||
if (pthread_rwlock_rdlock(&((ZORDERINFO*)zi)->rwlock)) {
|
||||
_ERR_PRINTF("Failed pthread_rwlock_rdlock: %s (%d)\n",
|
||||
strerror(errno), errno);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
static inline void unlock_zi_for_read (const ZORDERINFO* zi)
|
||||
@@ -3641,6 +3645,9 @@ static int dskMoveWindow (int cli, int idx_znode, HDC memdc, const RECT* rcWin)
|
||||
|
||||
do_for_all_znodes (&rcOld, zi, _cb_update_znode, ZT_ALL);
|
||||
|
||||
/* unlock zi for change ... */
|
||||
unlock_zi_for_change (zi);
|
||||
|
||||
if (nodes [0].flags & ZOF_IF_REFERENCE) {
|
||||
SendMessage (HWND_DESKTOP,
|
||||
MSG_ERASEDESKTOP, 0, (LPARAM)&rcOld);
|
||||
@@ -3680,9 +3687,6 @@ static int dskMoveWindow (int cli, int idx_znode, HDC memdc, const RECT* rcWin)
|
||||
|
||||
update_client_window_rgn (nodes [idx_znode].cli,
|
||||
nodes [idx_znode].hwnd);
|
||||
|
||||
/* unlock zi for change ... */
|
||||
unlock_zi_for_change (zi);
|
||||
}
|
||||
else {
|
||||
lock_zi_for_change (zi);
|
||||
|
||||
@@ -4349,8 +4349,6 @@ static void on_surface_changed_for_control (struct _travel_context* ctxt,
|
||||
RECT rc_surface, rc_minimal;
|
||||
PDC pdc = dc_HDC2PDC (ctrl->privCDC);
|
||||
|
||||
_WRN_PRINTF ("called\n");
|
||||
|
||||
pdc->surface = ctxt->surface;
|
||||
|
||||
if (pdc->surface != __gal_screen) {
|
||||
|
||||
Reference in New Issue
Block a user